一、前言

最近工作之余,制作了一款用树莓派(Raapberry Pi)搭建的无线视频传输履带坦克车,这个项目使用了Node.js作为服务框架,可通过浏览器进行视频的传输和驱动马达的前后左右控制,还包括了一个LED灯的控制端,和语音合成输出(控制端发送文字,车载迷你音箱播放语音的功能)。废话少说,先上几张效果图吧,除此之外,我还录制了一段使用视频,想看更多效果的同学可以猛戳→上传在优酷的视频

这个项目的初衷是想制作一款带有机械臂的履带坦克车,用来给家里养的哈士奇“花生”铲屎。博古先生每天下班回家就要给它铲屎,那酸爽,养过猫狗的朋友应该都懂。因此才最终萌发了要做一款遥控型铲屎战车的想法(全自动(智能)铲屎战车的想法也曾有过,但是太复杂。怎么去自动识别臭臭?所以放弃改为遥控的了!)。然后从5月份开始着手设计,因为工作关系,陆陆续续在推进。然后6月初的时候,带着花生出去玩在花园里面跑丢了,一直找都没找到,也希望它会在新的主人家里继续快乐地生活吧。

anyway~回到我们的主题上,然后,就没有然后了。机械臂部分就略去了,剩下的就是你们看到的样子。

 

二、硬件组成

OK,正式开始这个项目的制作过程。先说一下硬件部分,大家可以不需要跟我一!毛!一!样!的配置,按你的现有的资源来就行,你可以不需要履带式的坦克车,有两个马达和两个轮子和一个L298N驱动板就行。我的硬件清单包括了以下这些:

  • 马达  ×2
  • 车辆底盘  ×1
  • L298N电机控制器  ×1
  • 杜邦线(公对公、公对母)×若干
  • Raspberry Pi B+  ×1
  • USB无线WIFI模块  ×1
  • 5V 1A充电宝  ×1
  • 7.4V充电锂电池组 20C 1500毫安  ×1
  • 罗技 C270免驱720P高清摄像头 ×1

这些硬件的作用描述:5v充电宝给树莓派供电,7.4V充电锂电池给两个马达供电。Raspberry Pi(树莓派)通过USB无线WIFI模块,发送摄像头采集的图像数据,并接收控制端(浏览器)传来的控制指令,控制Raspberry Pi上GPIO的IO,进而来操作L298N电机(马达)控制器的输出效果(前后)。

好吧,文字描述可能有点复杂,来看看下面的L298N接线示意图吧(网上找的):

l298n

 

三、硬件组装

这个可能我们在实施的时候因为硬件部分的差异有所不同,所以我在这里主要讲解一下重要的GPIO和L298N控制器的接线方法,其它的部分省略。

RaspberryPi GPIO

这里上面给出了树莓派上的引脚对应的引脚号图,这里我们需要用到的GPIO引脚和它对应的控制电机如下:

右侧马达:GPIO4和GPIO17
左侧马达:GPIO22和GPIO23
LED灯控制:GPIO24

1、用母对母杜邦线分别接入GPIO4、17、22、24引脚,将另外的一头接入L298N的INA、INB、INC、IND引脚上(注意:有些L298N的端口号是,IN1、IN2、IN3、IN4)
2、用一条公对母杜邦线(或者母对母杜邦线,将一头的塑料罩取下来,得到一根公对母的杜邦线),接到树莓派Ground(地线)上,另一口接入L298N的GUD接口上。
3、从7.4V电池中导出两条正负电线,正极(红色)接入VCC接口,负极(黑色)接入GUD接口(电池的连接注意做成插拔式的,或者链接开关的,方便以后断电操作)。
4、分别将左右侧的马达正负极共四根线接入OUT A、B、C、D接口,接线时要对应上面列出的控制逻辑。

到这个部分,硬件链接部分就完成了。这里说明一下,我是用的L298N可以使用主板供电,就是使用7.4V的电池。有些型号的可能不支持,这个时候,需要从树莓派中接出一条5V的电源到5V+的接口给L298N供电。

 

四、软件组成

说完硬件部分,我们再来看看软件部分。软件其实就是把上面的原理图中每个模块的不同功能组织起来,用一个易于操作的界面,展示出来的服务。这里我们采用的是Node.js服务框架,有关Node.js的介绍和优势,感兴趣的童靴可以自行Google。

为了实现Node.js对Raspberry Pi GPIO的控制以及摄像的视频图像采集。我们还需要安装下面四款软件:

  • Node.js  服务框架
  • Mjpg-streamer  图像采集服务
  • Pi-blaster  GPIO控制服务
  • festival  文字语音合成服务

 

五、软件安装

这里我已经默认大家已经成功安装了树莓派的Rasbmc系统,并已连接网络。

首先我们需要安装Node.js,执行下面命令:

cd ~
wget http://node-arm.herokuapp.com/node_latest_armhf.deb
sudo dpkg -i node_latest_armhf.deb

安装完Node.js之后,我们接着安装Mjpg-streamer和Pi-blaster。这两个软件需要编译安装,为了方便,我已经把程序包和脚本都打包在了一起,直接执行脚本就可以编译安装。逐行执行下面的命令就可以:
wget http://bogu.me/wp-content/uploads/2015/08/rasp-tank.zip
unzip rasp-tank.zip
cd rasp-tank/installation/
sudo ./mjpgsetup.sh
sudo ./piblastersetup.sh

六、Node.js模块安装

到这一步,如果没有发生错误的话,软件部分就都已经安装好了。如果出现什么问题,可以博文下面的评论框中留言,我能即时收到邮件通知,有空便会上来解答。最后,我们还需要安装一下Node.js模块以开启相关的服务,模块包括以下几个部分:

  • socket.io
  • node-static
  • sleep
  • pi-blaster.js  (这个模块的功能是控制Raspberry Pi 的GPIO引脚,使指定引脚号输出高频或低频电。这里我们使用了PWM模式输出,因此,我们可以控制电机的电压,进而车辆控制速度。但是,需要注意一点,PWM模式输出的时候,因为一些电磁问题,可能会干扰的音箱,所以如果您是一个完美主义者,也可以切换成PCM模式输出。)
  • optimist

执行下面的命令进行安装(注意:要切换到程序所在目录中噢):

sudo nmp install socket.io node-static sleep pi-blaster.js optimist

成功安装后,我们的软件部分就都已经准备就绪了。

七、测试和程序修改

完成了上面软硬件的操作,本项目基本就已经搭建完成了。但是为了更个性化地满足不同需求,这里我来说明一下程序中各个各个文件的作用和参数设置。

此时,我们已经可以通过下面的命令来开启控制程序:
./startrobot

如果没有报错,此时可以在浏览器中打开下述格式的链接,来进入控制界面,背景是摄像头获取的图像数据,你可以在屏幕的任意区域拖动屏幕,来调出操纵杆控制电机的速度和方向。如果发现方向错误,请对照上文中列出的对照表来调整GPIO的顺序。你也可以修改nodeserver文件夹中的app.js文件,在第31~33行修改GPIO引脚。

http://你的树莓怕地址:8090/socket.html

如果你想调整调整摄像头获取图像的清晰度和大小,可以修改程序根目录的mjpgserverrunner.sh文件,在表粗部分修改获取图像的大小。这里需要注意一下,如果图片设置过大,可能导致显示延迟问题,图像越大延迟越严重,所以,请设置在一个合理的大小区间。

mjpg_streamer -i "/usr/lib/input_uvc.so -d /dev/video0 -r 320x240" -o "/usr/lib/output_http.so -p 8091 -w /var/www/mjpg_streamer -n" &

当这些都已经调试完成之后,你就可以开始考虑如何将作品中乱七八糟的线布置的更完美一些了。全部组装完毕之后,一辆可以通过手机浏览器来控制,实时传输图像数据的坦克车就做好了。

希望大家能希望这个教程,有任何问题可以在下方评论框中留言。

转载请注明出处,谢谢观看^_^

【博古先生 Http://Bogu.Me】

16