动手能力超强 牛人教你做Wifi机器人(图)_第1页
动手能力超强 牛人教你做Wifi机器人(图)_第2页
动手能力超强 牛人教你做Wifi机器人(图)_第3页
动手能力超强 牛人教你做Wifi机器人(图)_第4页
动手能力超强 牛人教你做Wifi机器人(图)_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、动手能力超强牛人教你做Wifi机器人(图)2009年02月03日09:29分作者:摘要:Wifi机器人(WifiRobot):其实是一辆能通过互联网,或500米以外的笔记本无线设施来远程控制的遥控汽车。由于在车上配备了一个网络摄像头,因此在视野范围之外都能够遥控该车,此外,车上还装了一个喇叭,您可以远程朝人们按喇叭。、前言Wifi机器人(WifiRobot):其实是一辆能通过互联网,或500米以外的笔记本无线设施来远程控制的遥控汽车。由于在车上配备了一个网络摄像头,因此在视野范围之外都能够遥控该车,此外,车上还装了一个喇叭,您可以远程朝人们按喇叭。我发现LinksysWRT54GL路由器非常的

2、hacker-friendly(黑客友好),它运行Linux和一些已经被反向工程(reverseengineered)了的硬件。世面上有一大批针对这种路由器的固件版本(firmwareversion)可供选择,本项目用到的版本是可订制化的LinuxfirmwareOpen-WRT。有了路由器的相关软件,对一大堆硬件进行改装也变得可能。因此,既然有这样一个廉价的、可改装的、嵌入式Linux系统可以随我所用一一我知道我能做件很酷的事情,于是,Wifi机器人的想法诞生了。本文的目的是提供一个该项目的概览,同时也列出了一些相关软件和电子产品的实施细节,但它并不是一个一步一步详细介绍如何制作Wifi机器

3、人的手册,不过,那些具备一定电子和软件知识的人根据本文提供的信息也能够做出自己的Wifi机器人。我已经遵循GNUGPLv2发布了所有的源代码,因此,希望大家都来用这个源码,并尽量去完善它!二、硬件部分2.1汽车在汽车上增加网络摄像头、路由器、沉重的电池、额外的电路,以及一大堆的电线会大大超出汽车原本设计的载重量。因此,考虑到这些额外要加的重量,您需要找到一个超大型的遥控汽车。旧货店常常有一些遥控车卖,价格3到5美元不等(不包括遥控器),我已经买了许多这样的汽车以供使用。您最好选择那些体积大于或等于现实生活中真车体积1/10的玩具遥控汽车,体积太小的就不要考虑了。下图这两辆遥控汽车是我在Valu

4、eVillage花5美元买下的。我一共拆了约20辆遥控汽车。我发现几乎每一辆车都使用了RealtekRX2/TX2芯片或其他引脚兼容(pin-compatible)的芯片,而且说明书里有各引脚的具体连接方式。这意味着真的很容易改装这些汽车,而不必加上一大堆我们自己的电路。我们可以将一个微控制器直接与这些引脚连接起来,直接控制汽车。充分利用汽车的原有电路能节省很多的时间和精力。2.2路由器我已经改装了我的WRT54GL,现在它有2个串口和一个1GB的SD卡(用来充当1GB的硬盘)。在本项目中其实没有用到这个SD卡,但用到了一个串口。两个串口中的一个作为控制台端口,另一个作为我们将来会使用到的TT

5、S/1(语音合成)端口。这个项目我使用的固件版本是Open-WRTWhiteRussianv0.9,还有更多更新的固件版本,但我们这个项目并不需要。本文的后面提供了参考链接,可以帮助您使用自己的串口。2.3微控制器的选择在本项目中我评估了三种不同的微控制器,以下是一个简要的评估结果。微控制器PIC16F628AArduino(ATmega168)FreeduinoMaxSerialAVRButterfly(ATmega169)优占八、价格相对便宜;稳定的软件控制;很容易编程(用C语言,而且有许多内置的函数库);集成串行(integratedserial);预包装的开发套比PIC(C)容易编程;

6、集成串行;较少需要焊接;件,很少或根本不需要焊接;弊端很难编程(基于汇编语言的);必须要手动连接电路;需要配备额外的串行硬件(MAX232A);需要额外编码器;价格相对较咼Bootloader错误(详见下文);集成外设导致奇怪的输出电压;价格相对较咼最后,出于以下几个原因我选择了PIC16F628A:1.我手边有一堆PIC16F628A。我对PIC16F628A最熟悉。我想要块面积小的板子,PIC是三个微控制器中面积最小的。我想完全控制代码实现的功能,PIC是基于汇编语言编程,因此很适合。Arduino(FreeduinoMaxSerial)是我的第二选择,它很容易安装和运行,我真的很喜欢。社

7、区支持非常强,而且非常好用。我原先使用的是AVRButterfly开发板,但我发现AVRbutterfly的bootloader上有一个错误会破坏代码,并且不允许你重新编写它,除非载入一个新的bootloader。我花了相当长的一段时间来调试和解决这个问题,不过最终还是决定放弃它。此外,我还发现输出电压是难以预测的,因为输出还要驱动液晶显示屏之类的集成外设。PIC和Arduino微控制器平台的源代码我都有。两个都经过了测试,所以你觉得哪个好用就用哪个。Arduino(FreeduinoMaxSerial)用起来最方便,我买了这个。2.4操控电路(steeringcircuit)实际上,我在车上

8、装了两个控制板。这样做的理由是,我开始不小心烧掉了车上附带的原始驱动晶体管(drivetransistor)。幸好我还能将烧掉的晶体管拆掉,同时也拆掉了一起被烧掉的RX2芯片,从而挽救了操控电路。该驱动晶体管的额定电流为5A,当我努力将电路电压加到16V时,晶体管在一阵壮观的烟雾中牺牲了,因为正常情况下用电池驱动汽车只要9.6V。我只好又拿了另一辆遥控汽车的板子装上了这么做当然是为了要用板子上的驱动晶体管。当我把电压打到12V时,尽管上面的晶体管已经变得非常热,但一切正常。如果能够利用遥控汽车已有的电路,而不必建立自己的H桥电机驱动(H-bridqe)电路,那将会节省大量的时间和金钱。2.5电

9、池我花了50多美元在易趣上买了一些高级的遥控汽车电池,它们的电池容量都是3800毫安(mAh)的,另外还有一个1.8A的智能充电器。在完全没电的情况下,每个电池大概需要花1.5小时充电。我用标准ATX电源Molex连接器换下了所有的遥控电池连接器。这样,我就可以用我已有的廉价连接器将它们连接起来,并且比较容易做一个分配连接器(splitterconnector)来进行功率测量。这些完全充好电的电池串联连接时总电压约为16V。2.6电源导轨(PowerRails)5V(78051A稳压器)9.2V(来自12V-7812导轨)12V(78121A稳压器)12V(LT10837.5A稳压器)微控制器

10、摄像头;操控电路控制器;喇叭wifi路由器有电动控制器的驱动板(driveboardwithmotorcontroller)9.6V导轨(rail)是由781212V导轨供电,不过,我们首先需要将4个二极管与781212V导轨串联在一起。这样做的理由是,每个二极管需要0.7V(实际不超过0.7V)的电压,把这4个二极管串联,就能把781212V导轨的总电压降低约2.8V,变为9V左右,从而得到我们设备所需要的电压。7812稳压器的额定电流只有1A,但电动机的耗电量会大大超过它。所以,我在Digikey花了不到14美元买了一个7.5A12V的稳压器,并且还在上面加了一个散热器,因为我当时估计它运

11、行起来有可能变得很烫,但在多次的实际使用中,我发现它甚至没有变暖,所以并不需要散热器。我不想冒烧掉操控控制电路的风险,所以我把它放在最接近遥控汽车电池的轨道上。摄像头的工作电压为9V,喇叭也差不多,因此,我把这些设备都放在9.2V轨道。所有的电力电子设备都装在一个原型板(prototypeboard)上,然后被储存在一个项目盒(projectbox)中。2.7微控制器电路(MicrocontrollerCircuit)PICTiVfiEPSCTgFSZflAJR4GHTkeftBACKWARDFORWARHjUWJSRA1JWM1RATNWREFRANAN3raL!Fliw/rotwcM叱RA

12、MiqRM3?SMXHiClCLKCUTRA7JASC1iiCLKWRaOlNTFffilWTiRBiX/CKRB3JCCF1哉BiiPGMFSWIMJTICCKMRfl?7T1OSLGOC1-*V*Cl-VrGtiHHOUTT2ffJTJCBJTR1OUTR1H;RWUTRHMISG.PhceAdEcuptngpacilof-1iri-)hetAreniVCCandCtMlDcaiiiMAX232AArduino接线指导信号Arduino引脚向前数字引脚8向后数字引脚9向左数字引脚10向右数字引脚11绿色发光二极管数字引脚7红色发光二极管数字引脚6喇叭数字引脚5只要用标准的串行电缆,就可以将

13、FreeduinoMaxSerial串口与路由器的串口连接起来。DB9_FEMALE该FreeduinoMaxSerial使用串行引脚4即DTR(dataterminalready,数据终端就绪)引脚来重启微控制器,并使其能够下载新的代码。在正常的电脑操作中,这个引脚的工作电压为10V或-10V一具体取决于该串口连接与否。然而,这个引脚是接地连接在路由器的串口上,当路由器串口发送数据时,MaxSerial就会重启,而这点对本项目不合适,我们要求把DTR引脚加压到+9V。通过硬件改造,我们给它增加了一个程序锁定模式,使之不能上传新的代码,也使得串口无法重启微控制器。注意:如果您使用的是USB接口

14、版本的Arduino,您应该只需要把RX和TX引脚连接到MAX232A,然后再连接到路由器的串口,并且可能不需要做硬件修改。不过我手中只有MaxSerial版本,所以无法验证此点。2.8摄像头LensSerialnurnberMACAddressIndicator13氧StancKTripod-mounlingholeHookforACadaptorDC(NjackEthernet(UKN)port本项目最酷的一个地方,是在视野范围以外还能驱动汽车。这其实是靠一个网络摄像头完成的。我选择的摄像头是PanasonicBL-C1A,它基本上算是最便宜的有线网络摄像头,其驱动软件也只能用在Windo

15、ws系统上,不过已经完全够用了。而且,就像两位评论家所指出的那样,该摄像头有一个非常实用的web使用界面。该摄像头的视频质量相当不错。然而,即使在连接良好的情况下,它也常常会暂停1秒左右的时间,然后又开始恢复正常。我猜这是因为它的控制器没有足够强大的自动对焦能力,但总的来说我还是很喜欢这款性价比不错的摄像头。2.9喇叭.PIC16F628ARB5(PIN我觉得用遥控汽车朝人摁喇叭很有趣,于是就加了个喇叭,而且这很容易实现。我买了一个3美元的蜂鸣器,然后用一个晶体管把它连接到微控制器上就可以了。2.10硬件安装我去掉所有的装饰性和非功能性零部件,只用到了遥控汽车最基础的部分。接着,对摄像头附带的

16、硬件做了个小改动后,就轻松将摄像头安装在了车前面。电路板也被固定在车的前端,使用的是塑料螺母和螺栓,以避免导电问题。PIC控制板被安全固定在车的一侧。在车架上我打了很多孔,用来穿电线,所有的电线长度都弄得比实际需要的要长,目的是为了使电线连接的各零部件在最终固定之前可以自由地调整位置。当所有的零部件被最终固定好之后,用捆线器收紧电线的多余部分即可。本项目一共用到了大约30根电线,还不包括以太网电缆。车的顶部装了个项目盒,除了LT10837.5A稳压器被装在遥控车的底部之外,所有其他的电源电路就放在这个项目盒里。而我之所以没把LT10837.5A稳压器也放在盒子里,是因为它是在我烧掉第一块控制板

17、后新加的一个东西,装在车子底部最省事。当路由器启动时,装在项目盒背面的一个发光二级管就开始发出红光。当路由器向微控制器发送一个alive信息时,这个发光二级管就变为发绿光,于是我就知道我可以连接VB客户端应用程序了。这个发光二极管在调试系统时非常有用。我用了些热胶(hot-glue)和捆线器将电池固定好。另外,路由器相对遥控车的底座有点太宽,所以我做了点改动将两片有机玻璃加在遥控车底座,使之变宽。2.11未来可能还会添加的部件下面几个东西应该很有趣,是我想加的东西:头灯:其实就是超级亮的发光二极管,应该很容易将它们加到微电路上。电流传感器(CurrentSensor):可以传回汽车使用的电流量

18、,并将其显示在VB应用程序中。控制器可以读取传感器的数据,然后发送回。三、软件部分本项目要用到三种软件:VB6Wifi_Robot客户端应用程序(运行在Windows系统中);用在路由器上的用C语言编写的CarServer,该路由器运行OpenWRTWhiteRussianv0.9(Linux版本);微控制器固件。我已经提供了经测试过的PIC16F628A微控制器和Arduino(FreeduinoMaxSerial)固件,相关的源码都遵循GNUGPLv2发布了。假设您有一个安装了OpenWRTWhiteRussianv0.9的LinksysWRT54GL,并将它已连接到了互联网,可以参考下面

19、的安装指令。OpenWRT安装指令参考这个指南。InstallingCarServer(安装CarServer)如果你只是想要使用该软件,在你的路由器安装配置SSH,然后运行以下代码:cd/tmpwget HYPERLINK /projects/wifirobot/carserver_1_mipsel.ip /projects/wifirobot/carserver_1_mipsel.ipk#ipkginstall./carserver_1_mipsel.ipkCompilingandInstallingCarServer(编译和安装CarServer)如果你想看看它是如何工作的,或者想自己修

20、改代码,你需要先下载OpenWRTSDK(Linux版本),然后遵循EricBishop的WritingandCompilingASimpleProgramforOpenWRT去编译软件(只需参考第一部分)Makefileplacein/OpenWrt-SDK-Linux-i686-1/package/carserver/Makefileplacein/OpenWrt-SDK-Linux-i686-1/package/carserver/srccarserver.cplacein/OpenWrt-SDK-Linux-i686-1/package/carserver/src你编译的ipkg将出现

21、在/OpenWrt-SDK-Linux-i686-1/bin/packages.然后将代码#scpcarserver_1_mipsel.ipkroot:/tmp/.复制到你的路由器,配置SSH,并安装它。相关资源关于WRT54G系列路由器有一本很不错的电子书:LinksysWRT54GUltimateHacking。这本书教人如何添加一个串口,如何设置软件,还有一大堆的黑客技巧。我已经联系过该书的作者之一,这本书并非免费的,但是你在GoogleBooks上可以读至U它。3.1如何让串口工作起来我们需要利用TTS/1(语音合成),因此,如果您只添加了一个串行端口,那就保证这个端口用于语音合成。假

22、定你已经安装了OpenWRTWhiteRussianvO.9,那么运行如下指令即可。ipkgupdateipkginstallsetserialcd/usr/sbinwget HYPERLINK /projects/wifirobot/stty.tgz /projects/wifirobot/stty.tgztar-zxvfstty.tgzchmod755stty将下列语句添加在/etc/init.d/custom-user-startup后,使串口启动后工作起来,并使CarServer自动启动。/usr/sbin/setserial/dev/tts/1irq3/usr/sbin/stty-F

23、/dev/tts/1rawspeed9600/bin/carserver&3.2运行Wifi机器人客户端应用程序下载:wifirobotclient.zip(Wifi机器人客户端应用程序软件包)该压缩包(wifi_robot_client.zip)包含了VB6源码和编译过的EXE文件。如果您不想修改源程序的话,您只需用到wifi_robot_client.exe和config.txt文件,当然,如果您想修改源码,也完全可以。此外,该应用程序只适用于Windows系统,如果有人想开发用于其他操作系统的客户端软件,我也很欢迎。3.3微控制器固件PIC您首先需要一个PIC编码器来烧录固件。市场上有许

24、多PIC编码器可供选择,我自己使用的编码器P16PRO40是在易趣上买的。您可以使用Microchip公司的MPLAB自己编译HEX文件,或直接下载本文提供的HEX文件。链接:carpic.asm链接:carpic.HEXArduino(FreeduinoMaxSerial)扌旨南:ArduinoTutorial相关源码下载链接:cararduino.c如果您使用的是FreeduinoMaxSerial,请务必对其进行小的硬件改造,以防Freeduino每次从路由器串口接收数据时都要重启。更多细节请参考本文的“硬件”部分。3.4下载所有的文件以下这个压缩包包括上述所有的源码和编译过的二进制码。

25、下载:wifirobotsoftware.zip3.5免责声明我已经尽最大的努力确保所有上述信息是准确的。如果您发现任何错误,请发送电子邮件至 HYPERLINK mailto:jon jon,我会立刻做岀更正。四、衡量标准和实测数据4.1最高时速为了得知该遥控车的最大速度,我在地上相隔3米放了两条带子,然后用摄像机拍摄。摄像机每秒记录30帧,摄像机的误差大约+/-3.3%,带子的误差大约是+/-1%。该车在0.7秒内开岀3米远(即相机在一秒内拍了21帧),所以最高时速为:4.3米/s=15.5km/h=9.6miles/h4.2距离在500米之处,遥控车上装配的路由器还能连接到我的笔记本电脑(传输速度1MB/S),然而距离超出500米,就不行了。固件(OpenWRT)本可以提高输岀功率,我也试图修改相关参数值,但无济于事,可能是我的戴尔Inspiron6000型笔记本有限制。4.3数据传输速率控制信号:3.5KB/s摄像头:50-190KB/s该摄像头使用多少带宽取决于所拍摄图像的亮度,如果亮度很高,就会需要较大的带宽。如果遥控车开出了很远,路由器还能以较低的速度继续连接笔记本电脑,直到传输速度降到1Mb/s,在这种速度下摄像头无法传回数据,但控制信号

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论