admin 管理员组

文章数量: 887019

转载请保留作者信息:星辉斑斓http://blog.csdn/hnmsky

本文分三个部分:

一:小车的组成。

二:tplink wr703n的改造。

三:网页代码和用ps2手柄控制小车。

四:后续工作


   某次出差的时在宾馆无聊,就折腾我带去的wrt703n这个路由器,刷上了openwrt。然后就想着用这个东西做点什么,最简单的就是做一个wifi的小车。第一次做这个东西,我也不想做成个很复杂的小车,而且703n这个东西本来就很小巧,我觉得如果做个很大很复杂的小车反而会抹杀了这个特点。所有就有了这个小车。


    小车主要功能:

    可以通过网页控制(手机,ipad,电脑都可以)前进后退和转向,带有摄像头可以实时传输图像。有舵机可以控制摄像头方向。轮子附近有2个红外传感器用来控制走直线。

先看一下完成后的图片:



这里还有小车视频

http://v.youku/v_show/id_XNDgyOTY0NTM2.html



小车的组成

这部分主要来说明小车的构成。如下图所示:

 

 WR703N通过wifi来通信,并通过串口与单片机通信。单片机用的是杜洋的DB1(STC12C5A60S2),比较小巧。单片机通过驱动板来控制电机,舵机。

703N上还接了个摄像头,并通过舵机控制摄像头方向,可以实时监控。

为了保证走直线,还加了红外传感器。用来计算2个轮子转动的圈数,这样就是可以控制小车走直线了。

但要注意前轮要用那种珠子的,不要用轮子的。我开始买的是轮子的,转向不灵活很容易走偏。


照片上还有个数码管是用来显示一些调试信息。

电源上我用了一个移动电源来给单片机和WR703供电。其中WR703N大概要200mA,单片机要20mA。然后用5个镍氢的充电电池给电机供电。其实这个可以用锂电池,只不过我手上没有其他的移动电源了。其实一开始我只用了一个电源,结果每次打开驱动板的开关时电压会被瞬间拉低,会导致703N工作不正常。所以搞了2个电源。

 

单片机上的程序并不复杂,主要就是串口通信和产生PWM控制电机和舵机。其实如果用arduino会更简单一些。


703N的改造

这个比较麻烦,所幸网上有很多资料可以参考。

    硬件部分

首先这个东西比较难拆,我是特意买了一套手机的拆机工具来拆的。

1:换64M Ram。这个在[1]找一个对应型号的DDR的芯片,买一个换上就行。

2:我并没有换8M flash,而是参考[2]的作法,放了一个H202 usb hub进去,然后买了一个sdisk mini的U盘放了进去。我在taobao上找了下,基本上这个USB hub和U盘算是最小的了。然后开了一个孔,这样就有2个USB接口可以使用了(另外一个插了U盘)。

3:我把串口线引到了电源的mini USB的接口上,这部分可参考[3],注意[4]这样用普通USB 线接电源无法开机,接电脑没事,需要把USB 的D+ D-断开。

        当然还需要一些开孔(引出2个USB接口),打磨的工作。


我做了一个USB 线,插在电源那里的就是,并且又开了一个USB的孔

这里可以看到USB hub和U盘。



软件部分:

刷入openwrt

首先就是刷上openwrt,可以自己编译,但其实下载编好的镜像就可以。到官网[1]下载镜像文件升级,注意tp link原生系统升级要用这个squashfs-factory.bin,已经是openwrt系统的才可以用squashfs-sysupgrade.bin。升级之后通过网页用192.168.1.1这个地址登陆进去,可以看到Luci的管理配置页面,在这里设置好网络就可以了。最新的版本上配置已经很简单了,不需要去手动改一些配置文件,而且官网上有很多介绍,后面我也会说一下一些软件的安装。

有兴趣编译源码的可以在这里下载代码https://dev.openwrt/wiki/GetSource,我用的是Attitude Adjustment 12.09 branch。

这里介绍了如何编译http://wiki.openwrt/doc/howto/build


shell中刷写命令 注意-sysupgrade.bin和factory.bin的区别

cd /tmp
wget http://downloads.openwrt/snapshots/trunk/ar71xx/openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin
sysupgrade openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin
reboot


cd /tmp
wget http://downloads.openwrt/attitude_adjustment/12.09/ar71xx/generic/openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin
mtd -r write /tmp/openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin firmware

备份

建议做下备份,特别是art,这里保存了一些校准数据,每台机器都不一样,如果丢失是无法恢复的。当然这部分不是必须的。

openwrt备份命令:

 

查看分区cat /proc/mtd

可以看到mtd4 “art”这类的字样。

备份 ddif=/dev/mtd4 of=/tmp/art.bin

然后用winscp软件(linux下可以用scp)把/tmp/art.bin copy到pc上

 

openwrt恢复命令注[1]:

先将固件用winscp软件上传到/tmp/ 目录下

mtd -r write/tmp/art.bin art

 

 串口部分:

禁用系统的串口输出:

       修改/etc/inittab

::sysinit:/etc/init.d/rcS S boot
::shutdown:/etc/init.d/rcS K shutdown
#ttyATH0::askfirst:/bin/ash --login

最后一行注释掉


开机后启动stty把波特率设为9600(默认为115200),详细参考web/wificar


挂载U盘

         首先确认以下软件安装到wr703中

         block-mount
         kmod-usb-storage
         kmod-fs-ext4
         kmod-usb2
         kmod-usb-core
         kmod-usb-ohci

         e2fsprogs

         然后插上U盘,不出意外的话可以找到设备/dev/sda1。执行下面命令

mkfs.ext4 /dev/sda1
mkdir -p /mnt/sda1
mount -t ext4 /dev/sda1 /mnt/sda1
mkdir -p /tmp/cproot
mount --bind / /tmp/cproot
tar -C /tmp/cproot -cvf - . | tar -C /mnt/sda1 -xf -
umount /tmp/cproot


         登陆进到管理页面,进入SYSTEM下的STARTUP,启动 fstab,再回到SYSTEM下的MOUNT POINTS,修改挂载点,点击开启挂载mount, 选中 对于block-extroot则设置挂载到overlay存储 。重启后可进入SYSTEM下SOFTWARE查看剩余空间,就知道是否成功。


安装mjpg-streamer 

         远程监控基本上是wifi小车的一个必备功能了。摄像头的选用可以参考[5],我用的是微软 LifeCam HD-3000,这个要100多吧。

         确认安装了以下软件:

         kmod-usb2
         kmod-video-uvc
         (*)kmod-nls-base
         kmod-usb-core
         kmod-video-core
         kmod-input-core
         kmod-usb-ohci   
         kmod-usb-video
         libjpeg
         (*)librt
         (*)libpthread

         mjpg-streamer

         (*)的表示我并不确定是否是必须要的。

 

         然后运行运行mjpg_streamer -i "input_uvc.so -r 640x480 -f 25" -o "output_http.so -p 8080  -w /www/webcam"

         其中640X480 是视频的大小,25是帧率,这个要根据摄像头来选择。

         然后再PC的浏览器上输入下面的网址即可查看

192.168.1.1:8080/?action=stream(动态视频)

192.168.1.1:8080/?action=snapshot(静态图像)

也可访问192.168.1.1:8080/index.html 可以看到更多的内容

 

至于设置mjpg-streamer开机自启动,可以用uci来配置。关于uci可以看官网上的介绍。

首先执行

uci show mjpg-streamer

输出大概是下面的样子

mjpg-streamer.core=mjpg-streamer

mjpg-streamer.core.device=/dev/video0

mjpg-streamer.core.resolution=640x480

mjpg-streamer.core.www=/www/webcam

mjpg-streamer.core.port=8080

mjpg-streamer.core.enabled=0

mjpg-streamer.core.fps=15

 

然后根据自己摄像头的情况修改

uci set mjpg-streamer.core.enabled=1

uci set mjpg-streamer.core.fps=25

uci set mjpg-streamer.core.resolution=640x480

登陆进到管理页面,进入SYSTEM下的STARTUP,点击enable mjpg-streamer

这样下次开机mjpg-streamer就会自启动了。


网页代码和如何用ps2手柄控制小车

网页代码

单片机和网页的代码在

https://github/hnmsky/wifi_car.git


网页代码要放到703N上的www目录。

这部分代码是参考网上的,通过lua脚本来向串口发送数据。

我调整了布局(Html是现学的,凑合着用了),并加入了触摸事件的处理[6],这样就可以用手机或ipad来控制小车了。

web/car.html:网页代码

web/web2ser:lua脚本,向串口发数据

web/wificar:703N开机时启动的服务,用来设置串口

 

用ps2手柄控制小车.

手上正好有个ps2的手柄,当然要利用起来。首先要到淘宝上买个usb的转接头,10多块钱吧。

然后这是有2种方案:

1:有个Joy2Key的工具,可以把手柄上的按键映射为键盘上的按键,然后在网页中处理相应按键即可。

2:firefox和chrome有相应版本可以支持gamepadAPI,这样在网页用使用相关API,就可以用手柄了。

 

我采用的是方案2.用的是firefox[7]。

首先需要一个gamepad.js的脚本[8]。不过原来的不支持ps2,所以我添加了ps2的支持。

然后可参考[9],在网页上监听相应事件即可。注意左摇杆和方向键有冲突,其实是无法区分这些键。所以我只用了左摇杆。


web/Ps2/index.html:测试ps2手柄。

web/Ps2/ps2.html:用手柄控制小车的代码。


后续的工作

电机底盘都买的便宜货。驱动力很差,基本只能在平地上跑跑了。这个还有很大改进空间。另外也可以加上超声波雷达什么的,改进下控制电机的算法。

至于摄像头,可以做一些人脸识别,自动拍照录像的工作。总之,可玩的东西还很多。

不过我也只是介绍这种只有基本功能的小车的制作,其他的就有待大家研究了。

参考文献:

[1]openwrt官网镜像下载地址 

http://wiki.openwrt/toh/tp-link/tl-wr703n

        

[2]wr703n+USB hub

http://www.right/forum/forum.php?mod=viewthread&tid=79885

 

[3]WR703N TTL引线教程+TTL免拆机无损改造教程

http://www.right/forum/forum.php?mod=viewthread&tid=75606
 
[4]703N这样改TTL的可得要注意了
http://www.right/forum/forum.php?mod=viewthread&tid=75606
 
[5]openWRT摄像头选购

http://hi.baidu/lancerz001/item/af0ee7f23874afd9a935a263


[6]: https://developer.apple/library/safari/#documentation/appleapplications/reference/safariwebcontent/handlingevents/handlingevents.html


[7]:https://wiki.mozilla/GamepadAPI


[8]:http://www.gamepadjs/


[9] http://active.tutsplus/tutorials/games/an-introduction-to-the-html5-gamepad-api/

注意:

         [1]这部分我未测试

本文标签: 小车 WiFi