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小车的制作 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1729141749h1323024.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论