管理员
无线论坛管理员
- 注册时间
- 2004-10-2
- 金币
- 35126 个
- 威望
- 404 个
- 荣誉
- 114 个
累计签到:119 天 连续签到:3 天 [LV.200]无线新星
|
三、软件部分
本项目要用到三种软件:
1. VB6 Wifi_Robot客户端应用程序(运行在Windows系统中);
2. 用在路由器上的用C语言编写的CarServer,该路由器运行OpenWRT WhiteRussian v0.9 (Linux版本);
3. 微控制器固件。
我已经提供了经测试过的PIC16F628A微控制器和Arduino (Freeduino MaxSerial)固件,相关的源码都遵循GNU GPL v2发布了。
假设您有一个安装了OpenWRT WhiteRussian v0.9 的Linksys WRT54GL,并将它已连接到了互联网,可以参考下面的安装指令。OpenWRT安装指令参考这个指南。
Installing CarServer(安装CarServer)
如果你只是想要使用该软件,在你的路由器安装配置SSH,然后运行以下代码:
# cd /tmp
# wget http://www.jbprojects.net/projec ... server_1_mipsel.ipk
# ipkg install ./carserver_1_mipsel.ipk
Compiling and Installing CarServer(编译和安装CarServer)
如果你想看看它是如何工作的,或者想自己修改代码,你需要先下载OpenWRT SDK(Linux 版本),然后遵循Eric Bishop的Writing and Compiling A Simple Program for OpenWRT去编译软件(只需参考第一部分)
Makefile place in /OpenWrt-SDK-Linux-i686-1/package/carserver/
Makefile place in /OpenWrt-SDK-Linux-i686-1/package/carserver/src
carserver.c place in /OpenWrt-SDK-Linux-i686-1/package/carserver/src
你编译的ipkg 将出现在 /OpenWrt-SDK-Linux-i686-1/bin/packages. 然后将代码# scp carserver_1_mipsel.ipk root@<router_ip>:/tmp/. 复制到你的路由器,配置SSH,并安装它。
相关资源
关于WRT54G系列路由器有一本很不错的电子书:《Linksys WRT54G Ultimate Hacking》。这本书教人如何添加一个串口,如何设置软件,还有一大堆的黑客技巧。我已经联系过该书的作者之一,这本书并非免费的,但是你在Google Books上可以读到它。
3.1 如何让串口工作起来
我们需要利用TTS/1(语音合成),因此,如果您只添加了一个串行端口,那就保证这个端口用于语音合成。假定你已经安装了OpenWRT WhiteRussian v0.9,那么运行如下指令即可。
# ipkg update
# ipkg install setserial
# cd /usr/sbin
# wget http://www.jbprojects.net/projects/wifirobot/stty.tgz
# tar -zxvf stty.tgz
# chmod 755 stty
将下列语句添加在/etc/init.d/custom-user-startup后,使串口启动后工作起来,并使CarServer自动启动。
/usr/sbin/setserial /dev/tts/1 irq 3
/usr/sbin/stty -F /dev/tts/1 raw speed 9600
/bin/carserver &
3.2 运行Wifi机器人客户端应用程序
下载:(Wifi机器人客户端应用程序软件包)
该压缩包(wifi_robot_client.zip)包含了VB6源码和编译过的EXE文件。如果您不想修改源程序的话,您只需用到wifi_robot_client.exe和config.txt文件,当然,如果您想修改源码,也完全可以。此外,该应用程序只适用于Windows系统,如果有人想开发用于其他操作系统的客户端软件,我也很欢迎。
3.3 微控制器固件
PIC
您首先需要一个PIC编码器来烧录固件。市场上有许多PIC编码器可供选择,我自己使用的编码器P16PRO40是在易趣上买的。您可以使用Microchip公司的MPLAB自己编译HEX文件,或直接下载本文提供的HEX文件。
链接:car_pic.asm
链接:car_pic.HEX
Arduino(Freeduino MaxSerial)
指南:Arduino Tutorial
相关源码下载链接: car_arduino.c
如果您使用的是Freeduino MaxSerial,请务必对其进行小的硬件改造,以防Freeduino每次从路由器串口接收数据时都要重启。更多细节请参考本文的“硬件”部分。
3.4 下载所有的文件
以下这个压缩包包括上述所有的源码和编译过的二进制码。
下载:
3.5 免责声明
我已经尽最大的努力确保所有上述信息是准确的。如果您发现任何错误,请发送电子邮件至 jon@jbprojects.net,我会立刻做出更正。
四、衡量标准和实测数据
4.1 最高时速
为了得知该遥控车的最大速度,我在地上相隔3米放了两条带子,然后用摄像机拍摄。摄像机每秒记录30帧,摄像机的误差大约+ /-3 .3%,带子的误差大约是+ /- 1%。
该车在0.7秒内开出3米远(即相机在一秒内拍了21帧),所以最高时速为:4.3米/ s= 15.5km/h = 9.6miles/h
4.2 距离
在500米之处,遥控车上装配的路由器还能连接到我的笔记本电脑(传输速度1MB/s),然而距离超出500米,就不行了。固件(OpenWRT)本可以提高输出功率,我也试图修改相关参数值,但无济于事,可能是我的戴尔Inspiron 6000型笔记本有限制。
4.3 数据传输速率
控制信号:3.5KB /s
摄像头:50-190KB /s
该摄像头使用多少带宽取决于所拍摄图像的亮度,如果亮度很高,就会需要较大的带宽。
如果遥控车开出了很远,路由器还能以较低的速度继续连接笔记本电脑,直到传输速度降到1Mb/s,在这种速度下摄像头无法传回数据,但控制信号仍然有效。
4.4 功率测量
以下所有测量由一个Fluke 187 True RMS万用表来完成。
4.4.1 摄像头
时间
(单位:秒) | 电流
(mA @ 15.3V) | 电流
(mA @ 9.2V) | 功率
(W) | 0 | 39 | 65 | 0.6 | 5 | 58 | 96 | 0.9 | 8 | 98 | 163 | 1.5 |
4.4.2 路由器
时间
(单位:秒) | 电流
(mA @ 15.3V) | 电流
(mA @ 9.2V) | 功率
(W) | 0 | 185 | 235 | 2.8 | 23 | 263 | 335 | 4.0 | 30 | 250 | 319 | 3.8 |
4.4.3 喇叭
时间
(单位:秒) | 电流
(mA @ 15.3V) | 电流
(mA @ 9.2V) | 功率
(W) | 0 | 40 | 66 | 0.6 |
4.4.4 遥控车
状态 | 电流
(mA @ 15.3V) | 电流
(mA @ 12V) | 功率
(W) | 系统加载(Booting) 0 ~23秒
| Fluctuates
~400 | 510 | 6.1 | PIC+LED, 稳压器, 两块控制板(不包括路由器或摄像头) | 102 | 130 | 1.6 | 系统加载完成,但车未启动(稳态) | 479 | 611 | 7.3 | 加速行驶 | 5500 | 7012 | 84.1 | 运速行驶 | 4000 | 5100 | 61.2 |
注意:我们在遥控车行驶时测得的数据不那么精确,因为,当你举着一个笔记本电脑来操控遥控汽车,并且还得在大街上追着它跑,是很难读准万用表的。嗯,数据大概有正负0.1A的误差。
根据我的经验,正常情况下电池能维持1.5小时。
4.5 温度/过热问题
从以上的功率测量我们可以看出,汽车加速时驱动晶体管工作电流超过了7A(12V),而它们的额定电流是5A,所以晶体管变热了。
在室内,遥控车运行25秒后,晶体管温度达到89摄氏度,汽车发动机也越来越热,达到85摄氏度。当遥控车在室外行使时,晶体管似乎并没有那么热,这也许是因为遥控车在室外多半是匀速行驶,不像在室内有很多的加速启动和停止。该晶体管能承受的额定温度高达150摄氏度,所以我觉得问题不大,不过我没有任何关于发动机的资料。
五、工程造价
项目 | 成本(单位:美元) | 遥控汽车 | 6 | 第2块控制板(取自另一辆遥控汽车) | 6 | 路由器 | 73 | 摄像头 | 115 | 电池 | 67 | 喇叭 | 3 | PIC 电路 | 6 | 其它:螺母、螺栓、螺丝钉、电线、连接器 | 20 | 总计 | 296 |
(周源编译) |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
|