Monday, 09 November 2015 21:56

无需外加微控制器的无线路由器WiFi遥控小车

Written by
Rate this item
(0 votes)

Wi Fi controlled Remote Control Car without microcontroller

这是一个具有摄像功能的Wi-Fi无线遥控小车,设计独特,它使用了一个无线路由器,无需外加微控制器亦可以通过电机驱动器进行遥控小车。

 

 

材料

Materials

 

框架原理图

如图所示,所有指令都是由一个无线路由器来完成,摄像头经由USB连接到无线路由器来实现视频流,路由器的GPIO输出直接与电机驱动器通信从而控制两个电机。

Wi Fi car block diagram

 

无线路由器

GL.iNet 6416A是一个非常小的无线路由器(尺寸:58 * 58 *22毫米),印刷电路板设计了5个GPIO和一个串口的焊点,另外还包括了5V与3.3V焊点,非常方便焊接与扩展。

GL.iNet 6416

GL.iNet GPIOs

其它支持OpenWrt的无线路由器,只须有足够的flash空间,一般上都可以正常工作。OpenWrt的网站列出了其支持固件的路由器型号

大多数无线路由器可能没有足够的GPIO来控制多个输出,不过你可以使用路由器上的其他引脚,比如用在LED的引脚,这需要卸载leds_gpio组件或使用这方式来完成控制LED。

 

摄像头

之前已经有了一个微软HD-5000摄像头,它能够拍摄高达1280×720像素的视频,且拥有自动对焦功能。对焦功能并不适合应用在遥控小车,所以必须禁用此功能(见这里)。

Microsoft LifeCam HD-5000

只要是USB UVC兼容的摄像头都可以应用在此制作

 

电机控制器板

路由器並不能提供足够的电流来操作电机,如果直接由路由器供电给电机,将会造成路由器损坏。因此通过电机控制器来操作电机,可以避免损坏发生。
经过测试,我发现输入电压和L298的输出之间约有1.5V 的电压降。

L298N Motor Driver Controller Board

DC-DC转换器

这是一个降压与升压DC-DC转换器,其输出电压电平可以调整大于或小于输入电压的电平。

线性稳压器比较,DC-DC转换效率可达到大于95%,从而降低了功耗。

做了一个简单的试验。把此模块的电压输出调到5V,输入2V-24V。低于2.6V除外,无论输入电压高于或低于5V,其输出总是取得非常稳定的5V。

dc dc converter


汽车底盘套件

底盘是亚克力物质,尺寸(长x宽x高)19.8 x 14.0×6.5厘米,比预期的小,在一层底盘上安装各组件(之前我以为是双层的)也就相当考验了 。

Car Chassis Kit

该套件包括两部减速电机,两个塑料轮,安置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)。电池充电或使用不当可能会引起爆炸或火灾,建议使用内置保护电路的电池。

Li on battery

遥控车可能需要两组不同的电源电压,这取决于电机的输入电压。第一组电压提供5V给无线路由器,另一组电压则供给电机。

制作过程中,我订购了一个双USB降压稳压模块(如图所示)和一个自动升压与自动降压DC-DC转换器。双USB降压稳压模块通过USB端口提供恒定的5V给无线路由器和摄像头,而DC-DC转换器则需调节其所需的输出电压后才供电给电机。不过,在测试过程中,我发现电机的输入电压不能超过5V,否则小车将会行驶太快,更槽糕时,电源会自动断电(电池保护电路会触发)。

Double USB Voltage Step Down Regulator Module

经过多次测试,结果我只需一个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界面就会出现在屏幕上。

GL.iNet main menu
你也可以点击高级设置(或浏览http://192.168.8.1/cgi-bin/luci)进入传统式的Luci Web界面。

Luci Web Interface
测试视频时,遇到了问题。在没有登录路由器的情况下,摄像头是不能播放视频的。因此我必须从OpenWrt的网站下载固件(image),并将其升级到路由器,复盖了厂家的固件。

如果你的路由器还没有安装OpenWrt,请参阅此教程如何升级固件。

 

网络与互联网设置

路由器必须连接互联网以便安装更多的程序。请查看此教程如何设置网络与互联网,教程也列出如何创建一个新的虚拟SSID以便让智能手机/笔记本/计算机通过路由器连接互联网。
Wireless Bridge

 

安装额外软件

谋些软件必须额外安装,以下教程展示如何安装视频流(摄像头)所需之软件包,如果没有摄像头,可以就此跳过。

  • 使用SSH 连接路由器,建议使用puTTy
    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
STOP=15

start() {
uvcdynctrl --set='Focus, Auto' 0
}

stop() {
uvcdynctrl --set='Focus, Auto'
}

  • 设置文件权限为0755,也可以使用WinSCP设置之
    chmod 0755 /etc/init.d/disableAutoFocus
  • 禁用自动对焦
    /etc/init.d/disableAutoFocus start
  • 自动启动上述服务
    /etc/init.d/disableAutoFocus enable

 

原理图

wifi car schematic

 

源代码

核心代码是使用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

假设你已经在计算机安装了WinSCP,且运行及登录了路由器。接下来下载源代码及解压之(2W_WiFi_car.zip)到计算机,最后将各文件传送到路由器,如图所示:

Files_and_folders_tree_view

/www/cgi-bin/control需要特别运行权限,必须更改其权限为0755(rwxr-XR-X)。请参阅WinSCP如何更改文件权限。

WinSCP

 

遥控小车

你可以打开一个网页来遥控小车,别使用IE浏览器,建议使用谷歌浏览器。

  • 在浏览器的地址栏键入http://192.168.8.1/car/(使用你的IP)或http//192.168.8.1/car/pantilt.html
    Web_ Interface
  • 点击图像或使用键盘按键来遥控小车
  • 保持键盘按键按下,小车将会运行,松开按键,小车既立刻停下

 

 

键盘快捷键

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遥控小车,出生于马来西亚。我能看,我能跑,我爱玩,我强壮,我很帅。请你试着了解我​​,我敢肯定你将会爱上我。

https://youtu.be/eXmIvQJJw-Q

Wi-Fi_car_1

Wi-Fi_car_2

 

Read 4262 times Last modified on Friday, 15 January 2016 20:12

More in this category: « Arduino电子排队叫号机

Leave a comment

Back to Top