材料
- OpenWrt的兼容路由器,如GL.iNet 6416。
- USB UVC兼容的网络摄像头,我使用支持自动对焦的Microsft LifeCam HD-5000
- 4×3.7V 可充电锂离子电池(内置保护电路)
- DIY智能机器人车底盘套件
- L298N 电机驱动器模块
- DC-DC转换器
- 母对母彩色杜邦线
- 公对母彩色杜邦线, 额外加$ 0.07,你可以得到一个无焊面包板
- 47ohms电阻和白色LED
- 螺母和螺栓
框架原理图
如图所示,所有指令都是由一个无线路由器来完成,摄像头经由USB连接到无线路由器来实现视频流,路由器的GPIO输出直接与电机驱动器通信从而控制两个电机。
无线路由器
GL.iNet 6416A是一个非常小的无线路由器(尺寸:58 * 58 *22毫米),印刷电路板设计了5个GPIO和一个串口的焊点,另外还包括了5V与3.3V焊点,非常方便焊接与扩展。
其它支持OpenWrt的无线路由器,只须有足够的flash空间,一般上都可以正常工作。OpenWrt的网站列出了其支持固件的路由器型号。
大多数无线路由器可能没有足够的GPIO来控制多个输出,不过你可以使用路由器上的其他引脚,比如用在LED的引脚,这需要卸载leds_gpio组件或使用这方式来完成控制LED。
摄像头
之前已经有了一个微软HD-5000摄像头,它能够拍摄高达1280×720像素的视频,且拥有自动对焦功能。对焦功能并不适合应用在遥控小车,所以必须禁用此功能(见这里)。
只要是USB UVC兼容的摄像头都可以应用在此制作
电机控制器板
路由器並不能提供足够的电流来操作电机,如果直接由路由器供电给电机,将会造成路由器损坏。因此通过电机控制器来操作电机,可以避免损坏发生。
经过测试,我发现输入电压和L298的输出之间约有1.5V 的电压降。
DC-DC转换器
这是一个降压与升压DC-DC转换器,其输出电压电平可以调整大于或小于输入电压的电平。
与线性稳压器比较,DC-DC转换效率可达到大于95%,从而降低了功耗。
做了一个简单的试验。把此模块的电压输出调到5V,输入2V-24V。低于2.6V除外,无论输入电压高于或低于5V,其输出总是取得非常稳定的5V。
汽车底盘套件
底盘是亚克力物质,尺寸(长x宽x高)19.8 x 14.0×6.5厘米,比预期的小,在一层底盘上安装各组件(之前我以为是双层的)也就相当考验了 。
该套件包括两部减速电机,两个塑料轮,安置4xAA电池的电池座,还有两个我用不上的速度编码器。
根据Gearbest.com提供的产品说明,电机电源为3V-12V。以下是我从互联网获取的资料。
- 推荐工作电压为6V至8V
- 最大扭矩:800gf厘米@ 3V
- 空载转速:1:48 @ 3V
- 负载电流:70毫安(250毫安MAX)@ 3V
两个小家伙很有意思,我指的是减速电机,体积虽小,动力切是非常大,只需供电3V,就可以推动一张塑料椅。
电池和电源
我用了4个3.7V 18650可充电锂离子电池,“2串2并”取得7.4V(充满电= 8.4V)。电池充电或使用不当可能会引起爆炸或火灾,建议使用内置保护电路的电池。
遥控车可能需要两组不同的电源电压,这取决于电机的输入电压。第一组电压提供5V给无线路由器,另一组电压则供给电机。
制作过程中,我订购了一个双USB降压稳压模块(如图所示)和一个自动升压与自动降压DC-DC转换器。双USB降压稳压模块通过USB端口提供恒定的5V给无线路由器和摄像头,而DC-DC转换器则需调节其所需的输出电压后才供电给电机。不过,在测试过程中,我发现电机的输入电压不能超过5V,否则小车将会行驶太快,更槽糕时,电源会自动断电(电池保护电路会触发)。
经过多次测试,结果我只需一个DC-DC转换器,将其输出电压调节到4.5V,双USB降压稳压模块暂时无用武之地。现在无线路由器和摄像头都是运行4.5V,两部减速电机则运行3V(4.5V-1.5V的电压降)。
OpenWrt: 嵌入式的 Linux 发行版
GL.iNet无线路由器出厂前已经安装了OpenWrt,其中包括了他们最新设计的Web界面。在浏览器(建议使用Google Chrome)的地址栏输入http://192.168.8.1(使用你的IP),然后输入用户名和密码,GL.iNet Web界面就会出现在屏幕上。
你也可以点击高级设置(或浏览http://192.168.8.1/cgi-bin/luci)进入传统式的Luci Web界面。
测试视频时,遇到了问题。在没有登录路由器的情况下,摄像头是不能播放视频的。因此我必须从OpenWrt的网站下载固件(image),并将其升级到路由器,复盖了厂家的固件。
如果你的路由器还没有安装OpenWrt,请参阅此教程如何升级固件。
网络与互联网设置
路由器必须连接互联网以便安装更多的程序。请查看此教程如何设置网络与互联网,教程也列出如何创建一个新的虚拟SSID以便让智能手机/笔记本/计算机通过路由器连接互联网。
安装额外软件
谋些软件必须额外安装,以下教程展示如何安装视频流(摄像头)所需之软件包,如果没有摄像头,可以就此跳过。
- 使用SSH 连接路由器,建议使用puTTy
- 从OpenWrt的本地库下载最新列表,之后才安装软件包到路由器
opkg update #update list of available packages - 安装网络摄像头驱动,点击这里获取更多信息
opkg install kmod-video-uvc #UVC camera driver
opkg install mjpg-streamer #stream JPEG files over an IP-based network - 编辑路由器里的文件/etc/config/mjpg-streamer以便启动视频。建议使用WinSCP编辑文件
config mjpg-streamer core
option enabled "1"
option device "/dev/video0"
option resolution "640x480"
option fps "15"
option www "/www/webcam"
option port "8080" - 如果需要禁用自动对焦,必须安装uvcdynctrl
opkg install uvcdynctrl - 如果想要获取网络摄像头状态,必须安装lsof
opkg install lsof - 重新启动路由器后,同时启动视频驱动
/etc/init.d/mjpg-streamer enable - 路由器重启后,视频流可以运作了
- 以下指令临时禁用自动对焦
uvcdynctrl --set='Focus, Auto' 0 - 获取网络摄像头状态
lsof /dev/video0
重新启动路由器后,禁用自动对焦
将下面代码保存到/etc/init.d/disableAutoFocus。更多关于Init Scripts的信息。
#!/bin/sh /etc/rc.common START=99 start() { stop() { |
- 设置文件权限为0755,也可以使用WinSCP设置之
chmod 0755 /etc/init.d/disableAutoFocus - 禁用自动对焦
/etc/init.d/disableAutoFocus start - 自动启动上述服务
/etc/init.d/disableAutoFocus enable
原理图
源代码
核心代码是使用Lua脚本语言编写,而Web界面则是用HTML和JavaScript。所有文件压缩成一个zip文件,请从这里下载之。
Lua是一个小巧的解释型语言,其代码不需编译就可以直接运行,因此更容易更新和维护。
- /usr/lib/lua/gpio.lua
GPIO读与写功能,这里有更多关于GPIO的信息 - /usr/lib/lua/2w_motor.lua
与gpio.lua配合,以便控制两个直流电机,这里有更多关于2w_motor.lua2w_motor.lua的信息 - /www/cgi-bin/control
如上所述,Web界面是使用HTML和JavaScript编写。如果想要开发自己的界面,请阅读以下文件。
- /www/car/index.html
主程序,调用外部js和css文件并执行onclick点击事件 - /www/car/pantilt.html
另一个主程序,更大的视窗显示视频 - /www/car/car.css
布局选项,如设定图像位置,颜色和字体 - /www/car/car.js
JavaScript函数 - /www/images
用于显示在屏幕的图像,都保存在此文件夹 - /www/codebase
实现滑块的JavaScript组件(dhtmlxSlider)
软件安装
该软件不需安装,确保各自的文件都传送到正确的位置。建议使用WinSCP来处理。
WinSCP是一个运行于Microsoft Windows的SFTP/FTP/WebDAV/SCP客户端,用于计算机与路由器之间传输文件和管理。
假设你已经在计算机安装了WinSCP,且运行及登录了路由器。接下来下载源代码及解压之(2W_WiFi_car.zip)到计算机,最后将各文件传送到路由器,如图所示:
/www/cgi-bin/control需要特别运行权限,必须更改其权限为0755(rwxr-XR-X)。请参阅WinSCP如何更改文件权限。
遥控小车
你可以打开一个网页来遥控小车,别使用IE浏览器,建议使用谷歌浏览器。
- 在浏览器的地址栏键入http://192.168.8.1/car/(使用你的IP)或http//192.168.8.1/car/pantilt.html
- 点击图像或使用键盘按键来遥控小车
- 保持键盘按键按下,小车将会运行,松开按键,小车既立刻停下
键盘快捷键
Keyboard | Function | Command |
8 or Up arrow | Move forward | routerIP/cgi-bin/control?RUN=8 |
2 or Down Arrow | Move backward | routerIP/cgi-bin/control?RUN=2 |
4 or Left Arrow | Move left | routerIP/cgi-bin/control?RUN=4 |
6 or Right Arrow | Move right | routerIP/cgi-bin/control?RUN=6 |
5 or Space | Stop | routerIP/cgi-bin/control?RUN=5 |
7 | Enable/Disable webcam | routerIP/cgi-bin/control?CAM |
9 | Headlight ON/OFF (use GPIO20) | routerIP/cgi-bin/control?LED=20 |
1 | Horn (not implemented) | routerIP/cgi-bin/control?SPK |
3 | Enable/Disable mic input (not implemented) | routerIP/cgi-bin/control?MIC |
Q | Speed 1 (lowest speed) | routerIP/cgi-bin/control?SPD=40 |
W | Speed 2 (low speed) | routerIP/cgi-bin/control?RUN=60 |
E | Speed 3 (high speed) | routerIP/cgi-bin/control?RUN=80 |
R | Speed 4 (full speed) | routerIP/cgi-bin/control?RUN=100 |
我是Wi-Fi遥控小车
我的名字叫Wi-Fi遥控小车,出生于马来西亚。我能看,我能跑,我爱玩,我强壮,我很帅。请你试着了解我,我敢肯定你将会爱上我。