电影里,时不时地可以看到一些这样的场景,一辆小车,上面装有摄像头,这辆小车可以通过电脑或都是手机进行远程遥控,车上摄像头拍到的画面,可以实时地显示在电脑或手机上,就像下图这样。

没有接触过这方面的朋友或许会觉得这是一门很高大上的技术活,其实,并不然,这种小车做起来其实很简单。那么,这样子的小车,需要怎么去做呢?

其实,我们只需要准备一块控制小车的电路板(开发板),2到4个电机(马达)、小车架子一个、摄像头以及摄像头云台一个,以上这些基础配件,然后对开发板进行编程、控制就可以了,整 体硬件成本加起来不到500块钱。

开发板:

开发板有很多种,比如51单片机、树莓派、STM32、Arduino、micro:bit等等,都可以做为小车的控制板,我使用的是树莓派开发板,然后,可持树莓派有很多版本、型号,最便宜的树莓派zero 68元就可以买到,不过不建议买这种,没有网卡,需要另外买网线模块,我使用的是树莓派3B,价格220元,带有无线和有线网卡,还带有蓝牙。

小车架子: 某宝上有很多这种车架子,各式各样的,只需要在某宝上搜索“智能小车”就能找到,带上马达一整套,也就五六十块钱。

摄像头+云台: 某宝上也是一搜一大堆,比如我下面用的那个,45块钱。

配件准备好了,就是给小车的开发板装系统,然后对小车进行编程控制。

小车的控制最主要有两方面的控制,一个是小车的前后左右的运动控制,一个是摄像头的拍摄、上下左右转运的控制。

小车的前后左右控制:

#-*- coding:UTF-8 -*-
import RPi.GPIO as GPIO
import time#小车电机引脚定义
LeftIn1 = 20
LeftIn2 = 21
LeftSpeed = 16RightIn1 = 19
RightIn2 = 26
RightSpeed = 13#设置GPIO口为BCM编码方式
GPIO.setmode(GPIO.BCM)#忽略警告信息
GPIO.setwarnings(False)#电机引脚初始化操作
def car_init():global pwm_LeftSpeedglobal pwm_RightSpeedglobal delaytimeGPIO.setup(LeftSpeed,GPIO.OUT,initial=GPIO.LOW)GPIO.setup(LeftIn1,GPIO.OUT,initial=GPIO.LOW)GPIO.setup(LeftIn2,GPIO.OUT,initial=GPIO.LOW)GPIO.setup(RightSpeed,GPIO.OUT,initial=GPIO.LOW)GPIO.setup(RightIn1,GPIO.OUT,initial=GPIO.LOW)GPIO.setup(RightIn2,GPIO.OUT,initial=GPIO.LOW)#设置pwm引脚和频率为2000hzpwm_LeftSpeed = GPIO.PWM(LeftSpeed, 2000)pwm_RightSpeed = GPIO.PWM(RightSpeed, 2000)pwm_LeftSpeed.start(0)pwm_RightSpeed.start(0)#小车前进
def run(delaytime):GPIO.output(LeftIn1, GPIO.HIGH)GPIO.output(LeftIn2, GPIO.LOW)GPIO.output(RightIn1, GPIO.HIGH)GPIO.output(RightIn2, GPIO.LOW)pwm_LeftSpeed.ChangeDutyCycle(80)pwm_RightSpeed.ChangeDutyCycle(80)time.sleep(delaytime)#小车后退
def back(delaytime):GPIO.output(LeftIn1, GPIO.LOW)GPIO.output(LeftIn2, GPIO.HIGH)GPIO.output(RightIn1, GPIO.LOW)GPIO.output(RightIn2, GPIO.HIGH)pwm_LeftSpeed.ChangeDutyCycle(80)pwm_RightSpeed.ChangeDutyCycle(80)time.sleep(delaytime)#小车左转
def left(delaytime):GPIO.output(LeftIn1, GPIO.LOW)GPIO.output(LeftIn2, GPIO.LOW)GPIO.output(RightIn1, GPIO.HIGH)GPIO.output(RightIn2, GPIO.LOW)pwm_LeftSpeed.ChangeDutyCycle(80)pwm_RightSpeed.ChangeDutyCycle(80)time.sleep(delaytime)#小车右转
def right(delaytime):GPIO.output(LeftIn1, GPIO.HIGH)GPIO.output(LeftIn2, GPIO.LOW)GPIO.output(RightIn1, GPIO.LOW)GPIO.output(RightIn2, GPIO.LOW)pwm_LeftSpeed.ChangeDutyCycle(80)pwm_RightSpeed.ChangeDutyCycle(80)time.sleep(delaytime)#小车原地左转
def spin_left(delaytime):GPIO.output(LeftIn1, GPIO.LOW)GPIO.output(LeftIn2, GPIO.HIGH)GPIO.output(RightIn1, GPIO.HIGH)GPIO.output(RightIn2, GPIO.LOW)pwm_LeftSpeed.ChangeDutyCycle(80)pwm_RightSpeed.ChangeDutyCycle(80)time.sleep(delaytime)#小车原地右转
def spin_right(delaytime):GPIO.output(LeftIn1, GPIO.HIGH)GPIO.output(LeftIn2, GPIO.LOW)GPIO.output(RightIn1, GPIO.LOW)GPIO.output(RightIn2, GPIO.HIGH)pwm_LeftSpeed.ChangeDutyCycle(80)pwm_RightSpeed.ChangeDutyCycle(80)time.sleep(delaytime)#小车停止
def brake(delaytime):GPIO.output(LeftIn1, GPIO.LOW)GPIO.output(LeftIn2, GPIO.LOW)GPIO.output(RightIn1, GPIO.LOW)GPIO.output(RightIn2, GPIO.LOW)pwm_LeftSpeed.ChangeDutyCycle(80)pwm_RightSpeed.ChangeDutyCycle(80)time.sleep(delaytime)

摄像头控制有两部分,一是拍摄、二是云台转动。

摄像头的拍摄: 拍摄部分,我使用的是mjpg-streamer,这个工具可以把小车上的摄像头当作远程摄像头(Web Camera)使用,安装的方式也很简单:

#安装必要的库
sudo apt-get update
sudo apt-get install libjpeg8-dev
sudo apt-get install imagemagick
sudo apt-get install libv4l-dev
sudo apt-get autoremove cmake
sudo apt-get install cmake

必要库安装好后,下载mjpg-streamer到树莓派上,并执行编译即可:

cd mjpg-streamer/mjpg-streamer-experimental
make all
sudo make install

通过以上操作,就可以启动摄像头了:

#运行mjpg-streamer./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so -w ./www"

摄像头启动后,可以在局域网内的任何一台电脑上使用浏览器输入:http://树莓派IP:8080/?action=stream 即可看到摄像头拍到的画面。

云台控制: 云台的主是对控制上下和左右的两舵机进行编码控制:

import RPi.GPIO as GPIO
import time
import pygame#舵机引脚定义
ServoUpDownPin = 9
ServoLeftRightPin = 11#设置GPIO口为BCM编码方式
GPIO.setmode(GPIO.BCM)#忽略警告信息
GPIO.setwarnings(False)#初始化上下左右角度为90度
ServoLeftRightPos = 90
ServoUpDownPos = 90def init():global pwm_UpDownServoglobal pwm_LeftRightServoGPIO.setup(ServoUpDownPin, GPIO.OUT)GPIO.setup(ServoLeftRightPin, GPIO.OUT)#设置舵机的频率和起始占空比pwm_UpDownServo = GPIO.PWM(ServoUpDownPin, 50)pwm_LeftRightServo = GPIO.PWM(ServoLeftRightPin, 50)pwm_UpDownServo.start(0)pwm_LeftRightServo.start(0)#摄像头舵机左右旋转到指定角度
def leftrightservo_appointed_detection(pos): for i in range(1):   pwm_LeftRightServo.ChangeDutyCycle(2.5 + 10 * pos/180)time.sleep(0.02)                            #等待20ms周期结束pwm_LeftRightServo.ChangeDutyCycle(0)  #归零信号#摄像头舵机上下旋转到指定角度
def updownservo_appointed_detection(pos):  for i in range(1):  pwm_UpDownServo.ChangeDutyCycle(2.5 + 10 * pos/180)time.sleep(0.02)                            #等待20ms周期结束pwm_UpDownServo.ChangeDutyCycle(0) #归零信号#摄像头舵机向上运动
def servo_up():global ServoUpDownPospos = ServoUpDownPosupdownservo_appointed_detection(pos)#time.sleep(0.05)pos +=0.7 ServoUpDownPos = posif ServoUpDownPos >= 180:ServoUpDownPos = 180#摄像头舵机向下运动
def servo_down():global ServoUpDownPospos = ServoUpDownPosupdownservo_appointed_detection(pos)#time.sleep(0.05)pos -= 0.7ServoUpDownPos = posif ServoUpDownPos <= 45:ServoUpDownPos = 45#摄像头舵机向左运动
def servo_left():print("servo_left")global ServoLeftRightPospos = ServoLeftRightPosleftrightservo_appointed_detection(pos)#time.sleep(0.10)pos += 0.7ServoLeftRightPos = posprint('ServoLeftRightPos:',ServoLeftRightPos)if ServoLeftRightPos >= 180:ServoLeftRightPos = 180#摄像头舵机向右运动
def servo_right():global ServoLeftRightPospos = ServoLeftRightPosleftrightservo_appointed_detection(pos)#time.sleep(0.10)pos -= 0.7 ServoLeftRightPos = posif ServoLeftRightPos <= 0:ServoLeftRightPos =  0#所有舵机归位
def servo_init():servoflag = 0servoinitpos = 90if servoflag != servoinitpos:  updownservo_appointed_detection(servoinitpos)leftrightservo_appointed_detection(servoinitpos)time.sleep(0.5)        pwm_LeftRightServo.ChangeDutyCycle(0)   #归零信号pwm_UpDownServo.ChangeDutyCycle(0)  #归零信号#舵机停止
def servo_stop():pwm_LeftRightServo.ChangeDutyCycle(0)   #归零信号pwm_UpDownServo.ChangeDutyCycle(0)  #归零信号

对小车的控制编程完成后,最后我们使用WebSocket远程连接小车,发送相关的控制命令,就可以使用电脑或手机远程控制小车了。


完整的教学视频可查看:http://www.diyabc.com/frontweb/product400.html

使用树莓派制作智能小车相关推荐

  1. 自写app与树莓派制作智能小车

    实现的功能有: 1.实现小车的前进,后退,左转,右转. 2.实时视频的传回,查看小车周围的情况. 3.摄像头的上下左右转动,使用舵机云台来实现. 需要的材料: 1.树莓派一个(带有python环境,现 ...

  2. 【毕业设计之树莓派系列】基于树莓派的智能小车设计

    基于树莓派的智能小车设计 摘要 随着人们对智能化生活的需求不断增长,智能小车的发展逐渐受到关注.然而,现有的智能小车硬件和软件设计有一定的局限性,需要进一步改进和完善.本文旨在基于树莓派PICO开发板 ...

  3. 树莓派制作遥控小车教程

    树莓派制作遥控小车教程 一.成品图 二.准备材料: 三.开始制作 1.接线 2.写程序 一.成品图 二.准备材料: 1.树莓派 2.充电宝 3.小车套件(底盘,车轮,电机,电池座) 4.导线,杜邦线 ...

  4. 基于树莓派的智能小车

    基于树莓派的智能小车 代码位置:Github地址 文章目录 基于树莓派的智能小车 一.简介 二.实验设备 三.前期准备 四.实验原理 4.1硬件调试 4.2 代码框架 4.3 代码实现 4.3.1 避 ...

  5. 【毕业设计】基于树莓派的智能小车设计 - 物联网 单片机 嵌入式 stm32

    文章目录 1 简介 2 实现功能 主控开发板:树莓派 电机和控制器 避障功能 3 实现效果 5 部分实现代码 6 最后 1 简介 Hi,大家好,这里是丹成学长,今天向大家介绍一个单片机项目 ** 基于 ...

  6. OpenCV + 树莓派制作智能车【1】

    前言 以前制作智能车都是在STM32上制作的,学习了一点OpenCV想要实践一下,一下就想到了买来一直在吃灰的树莓派,做一个智能小车吧! 黑线识别 我们先在Windows上写出基本能跑的检测代码: 首 ...

  7. 【记录】本科毕设:基于树莓派的智能小车设计(使用Tensorflow + Keras 搭建CNN卷积神经网络 使用端到端的学习方法训练CNN)

    0 申明 这是本人2020年的本科毕业设计,内容多为毕设论文和答辩内容中挑选.最初的灵感来自于早前看过的一些项目(抱歉时间久远,只记录了这一个,见下),才让我萌生了做个机电(小车动力与驱动)和控制(树 ...

  8. 【DIY】树莓派ROS智能小车

    最近手里有一辆 clb 的树莓派ROS履带小车,不过放了好久,功能有点问题,最近打算把小车重新拆装.清洗,软件也重新刷写,然后顺便记录以下功能调试的过程. 文章目录 一.简介 二.机械部分 三.电气部 ...

  9. 利用树莓派制作智能音箱

    制作智能音箱需要解决的问题,如下: 需要准备的器件(例如音箱.麦克风等) 代码实现问题(语音交互) 语音识别 语音唤醒功能 能够实现播放.暂停音乐(预先设好的音乐/链接网址播放在线) 讲故事.讲笑话( ...

最新文章

  1. [转载]Surging 分布式微服务框架使用入门
  2. 字符串最易犯的错误 总是和 那个\0 有关
  3. 有点酸!中外程序员都是怎么炫富的? | 每日趣闻
  4. 上传漏洞学习——upload-labs 闯关(一)
  5. Java当中用 javabean和其他容器存入表格数据 或 利用 容器进行存储表格
  6. 上传SVN丢失.a文件的问题
  7. 电子增稳云台_揭秘Dobby自拍无人机,电子增稳是黑科技?
  8. Chrome中使用showModalDialog无法接收返回值,解决方案
  9. as3 socket 跨域连接
  10. DMX协议和RDM协议
  11. java 坦克大战暂停_java实现坦克大战游戏
  12. pe系统如何读取手机_pe系统没有连接手机的驱动怎么办
  13. 一个单位球体积理清二三重积分计算与体积的求解方法(含旋转体体积)
  14. 女儿拿着小天才电话手表问我App启动流程
  15. 小写数字转成大写的中文,方便财务对账专用
  16. 【写给初发论文的人】撰写综述性科技论文常见问题
  17. torchvision.datasets.FashionMNIST报错[WinError 10054] 远程主机强迫关闭了一个现有的连接
  18. vue 手风琴效果_Vue实现侧边菜单栏手风琴效果实例代码
  19. macbook无法下载软件问题解决
  20. QQ浏览器x5内核的兼容性问题

热门文章

  1. 大学宿舍普遍存在的噪声问题
  2. 亚马逊国际获得AMAZON商品详情 API 返回值说明
  3. 互联网早报:抖音上线外放音量过高提醒功能、5G消息或于10月中下旬全国试商用
  4. 作业辅导班怎么提高效率,提醒便签让学生做作业的速度提高
  5. java如何区分变量、成员变量、实例变量、静态变量、静态常量(类变量)、常量、静态常量、字段、属性
  6. 小程序海报分享之踩坑日记
  7. 【渝粤题库】陕西师范大学164114 西方经济学 作业(高起专)
  8. HDU 2853 Assignment (KM算法)
  9. 牛客网项目3:注册、激活功能
  10. Python入门第8天-字符串