【vb精品源码栏目提醒】:网学会员vb精品源码为您提供【精品】Wifi机器人的制作流程 - 其它参考,解决您在【精品】Wifi机器人的制作流程 - 其它学习中工作中的难题,参考学习。
思路简单,但是创意无限 动手能力超强 牛人教你做 Wifi 机器人(图)一、前言Wifi 机器人(Wifi Robot):其实是一辆能通过互联网,或 500 米以外的笔记本无线设施来远程控制的遥控汽车。
由于在车上配备了一个网络摄像头,因此在视野范围之外都能够遥控该车,此外,车上还装了一个喇叭,您可以远程朝人们按喇叭。
我发现 Linksys WRT54GL 路由器非常的 hacker-friendly(黑客友好),它运行 Linux 和一些已经被反向工程(reverse engineered)了的硬件。
世面上有一大批针对这种路由器的固件版本(firmware version)可供选择,本项目用到的版本是可订制化的 Linux firmware Open-WRT。
有了路由器的相关软件,对一大堆硬件进行改装也变得可能。
因此,既然有这样一个廉价的、可改装的、嵌入式 Linux 系统可以随我所用——我知道我能做件很酷的事情,于是,Wifi 机器人的想法诞生了。
本文的目的是提供一个该项目的概览,同时也列出了一些相关软件和电子产品的实施细节,但它并不是一个一步一步详细介绍如何制作 Wifi 机器人的手册,不过,那些具备一定电子和软件知识的人根据本文提供的信息也能够做出自己的 Wifi 机器人。
我已经遵循 GNU GPL v2 发布了所有的源代码,因此,希望大家都来用这个
源码,并尽量去完善它!二、硬件部分2.1 汽车在汽车上增加网络摄像头、路由器、沉重的电池、额外的电路,以及一大堆的电线会大大超出汽车原本设计的载重量。
因此,考虑到这些额外要加的重量,您需要找到一个超大型的遥控汽车。
旧货店常常有一些遥控车卖,价格 3 到 5 美元不等(不包括遥控器),我已经买了许多这样的汽车以供使用。
您最好选择那些体积大于或等于现实生活中真车体积 1/10 的玩具遥控汽车,体积太小的就不要考虑了。
下图这两辆遥控汽车是我在 Value Village 花 5 美元买下的。
我一共拆了约 20 辆遥控汽车。
我发现几乎每一辆车都使用了 Realtek RX2/TX2 芯片或其他引脚兼容(pin-compatible)的芯片,而且说明书里有各引脚的具体连接方式。
这意味着真的很容易改装这些汽车,而不必加上一大堆我们自己的电路。
我们可以将一个微控制器直接与这些引脚连接起来,直接控制汽车。
充分利用汽车的原有电路能节省很多的时间和精力。
2.2 路由器我已经改装了我的 WRT54GL,现在它有 2 个串口和一个 1GB 的 SD卡(用来充当 1GB 的硬盘)。
在本项目中其实没有用到这个 SD 卡,但用到了一个串口。
两个串口中的一个作为控制台端口,另一个作为我们将来会使用到的 TTS/1(语音合成)端口。
这个项目我使用的固件版本是 Open-WRT White Russian v0.9,还有更多更新的固件版本,但我们这个项目并不需要。
本文的后面提供了参考链接,可以帮助您使用自己的串口。
2.3 微控制器的选择在本项目中我评估了三种不同的微控制器,以下是一个简要的评估结果。
微 Arduino AVR Butterfly PIC16F628A控 ATmega168 ATmega169制 reeduino MaxSerial器 很容易编程(用 C 语言, 而且有许多内置的函数 比 PIC C 容 易 编优 库 价格相对便宜;稳定的 ) ; 集 成 串 行 程;集成串行; 较点软件控制; (integrated serial); 少需要焊接; 预包装的开发套件,很少 或根本不需要焊接; 很难编程(基于汇编语 Bootloader 错 误 言的);必须要手动连 ; (详见下文) 集成弊接电路;需要配备额外 价格相对较高 外设导致奇怪的输端的 串 行 硬 件 出电压;价格相对较 (MAX232A);需要额 高 外编码器;最后,出于以下几个原因我选择了 PIC16F628A:1. 我手边有一堆 PIC16F628A。
2. 我对 PIC16F628A 最熟悉。
3. 我想要块面积小的板子,PIC 是三个微控制器中面积最小的。
4. 我想完全控制代码实现的功能,PIC 是基于汇编语言编程,因此很适合。
Arduino Freeduino MaxSerial是我的第二选择,它很容易安装和运行,我真的很喜欢。
社区支持非常强,而且非常好用。
我原先使用的是 AVR Butterfly 开发板,但我发现 AVR butterfly 的bootloader 上有一个错误会破坏代码,并且不允许你重新编写它,除非载入一个新的 bootloader。
我花了相当长的一段时间来调试和解决这个问题,不过最终还是决定放弃它。
此外,我还发现输出电压是难以预测的,因为输出还要驱动液晶显示屏之类的集成外设。
PIC 和 Arduino 微控制器平台的源代码我都有。
两个都经过了测试,所以你觉得哪个好用就用哪个。
Arduino Freeduino MaxSerial用起来最方便,我买了这个。
2.4 操控电路(steering circuit)实际上,我在车上装了两个控制板。
这样做的理由是,我开始不小心烧掉了车上附带的原始驱动晶体管(drive transistor)。
幸好我还能将烧掉的晶体管拆掉,同时也拆掉了一起被烧掉的 RX2 芯片,从而挽救了操控电路。
该驱动晶体管的额定电流为 5A,当我努力将电路电压加到 16V 时,晶体管在一阵壮观的烟雾中“牺牲”了,因为正常情况下用电池驱动汽车只要 9.6V。
我只好又拿了另一辆遥控汽车的板子装上了——这么做当然是为了要用板子上的驱动晶体管。
当我把电压打到 12V 时,尽管上面的晶体管已经变得非常热,但一切正常。
如果能够利用遥控汽车已有的电路,而不必建立自己的 H 桥电机驱动(H-bridge)电路,那将会节省大量的时间和金钱。
2.5 电池我花了 50 多美元在易趣上买了一些高级的遥控汽车电池,它们的电池容量都是 3800 毫安(mAh)的,另外还有一个 1.8A 的智能充电器。
在完全没电的情况下,每个电池大概需要花 1.5 小时充电。
我用标准 ATX 电源 Molex 连接器换下了所有的遥控电池连接器。
这样,我就可以用我已有的廉价连接器将它们连接起来,并且比较容易做一个分配连接器(splitter connector)来进行功率测量。
这些完全充好电的电池串联连接时总电压约为 16V。
2.6 电源导轨(Power Rails)5V 9.2V 12V 12V7805 1A 稳来自 12V-78127812 1A 稳压LT1083 7.5A 稳 压压器 导轨 器 器 摄像头; 操控电路控制 有电动控制器的驱动 器;微控制器 wifi 路由器 板(drive board with 喇叭 motor controller)9.6V 导轨(rail)是由 7812 12V 导轨供电,不过,我们首先需要将4 个二极管与 7812 12V 导轨串联在一起。
这样做的理由是,每个二极管需要 0.7V(实际不超过 0.7V)的电压,把这 4 个二极管串联,就能把 7812 12V 导轨的总电压降低约 2.8V,变为 9V 左右,从而得到我们设备所需要的电压。
7812 稳压器的额定电流只有 1A,但电动机的耗电量会大大超过它。
所以,我在 Digikey 花了不到 14 美元买了一个 7.5A 12V 的稳压器,并且还在上面加了一个散热器,因为我当时估计它运行起来有可能变得很烫,但在多次的实际使用中,我发现它甚至没有变暖,所以并不需要散热器。
我不想冒烧掉操控控制电路的风险,所以我把它放在最接近遥控汽车电池的轨道上。
摄像头的工作电压为 9V,喇叭也差不多,因此,我把这些设备都放在 9.2V 轨道。
所有的电力电子设备都装在一个原型板(prototype board)上,然后被储存在一个项目盒(project box)中。
2.7 微控制器电路(Microcontroller Circuit)PICArduino 接线指导 信号 Arduino 引脚 向前 数字引脚 8 向后 数字引脚 9 向左 数字引脚 10 向右 数字引脚 11 绿色发光二极管数字引脚 7 红色发光二极管数字引脚 6 喇叭 数字引脚 5只要用标准的串行电缆,就可以将 Freeduino MaxSerial 串口与路由器的串口连接起来。
该 Freeduino MaxSerial 使用串行引脚 4——即 DTR(data terminal ready,数据终端就绪)引脚来重启微控制器,并使其能够下载新的代码。
在正常的电脑操作中,这个引脚的工作电压为 10 V 或-10V——具体取决于该串口连接与否。
然而,这个引脚是接地连接在路由器的串口上,当路由器串口发送数据时,MaxSerial 就会重启,而这点对本项目不合适,我们要求把 DTR 引脚加压到9V。
通过硬件改造,我们给它增加了一个程序锁定模式,使之不能上传新的代码,也使得串口无法重启微控制器。
注意:如果您使用的是 USB 接口版本的 Arduino,您应该只需要把 RX 和 TX 引脚连接到 MAX232A,然后再连接到路由器的串口,并且可能不需要做硬件修改。
不过我手中只有 MaxSerial 版本,所以无法验证此点。
2.8 摄像头本项目最酷的一个地方,是在视野范围以外还能驱动汽车。
这其实是靠一个网络摄像头完成的。
我选择的摄像头是 Panasonic BL-C1A,它基本上算是最便宜的有线网络摄像头,其驱动软件也只能用在 Windows 系统上,不过已经完全够用了。
而且,就像两位评论家所指出的那样,该摄像头有一个非常实用的 web 使用界面。
该摄像头的视频质量相当不错。
然而,即使在连接良好的情况下,它也常常会暂停 1 秒左右的时间,然后又开始恢复正常。
我猜这是因为它的控制器没有足够强大的自动对焦能力,但总的来说我还是很喜欢这款性价比不错的摄像头。
2.9 喇叭我觉得用遥控汽车朝人摁喇叭很有趣,于是就加了个喇叭,而且这很容易实现。
我买了一个 3 美元的蜂鸣器,然后用一个晶体管把它连接到微控制器上就可以了。
2.10 硬件安装PIC 控制板被安全固定在车的一侧。
在车架上我打了很多孔,用来穿电线,所有的电线长度都弄得比实际需要的要长,目的是为了使电线连接的各零部件在最终固定之前可以自由地调整位置。
当所有的零部件被最终固定好之后,用捆线器收紧电线的多余部分即可。
本项目一共用到了大约 30 根电线,还不包括以太网电缆。
车的顶部装了个项目盒,除了 LT1083 7.5A 稳压器被装在遥控车的底部之外,所有其他的电源电路就放在这个项目盒里。
而我之所以没把LT1083 7.5A 稳压器也放在盒子里,是因为它是在我烧掉第一块控制板后新加的一个东西,装在车子底部最省事。
当路由器启动时,装在项目盒背面的一个发光二级管就开始发出红光。
当路由器向微控制器发送一个‘alive’信息时,这个发光二级管就变为发绿光,于是我就知道我可以连接
VB 客户端应用程序了。
这个发光二极管在调试系统时非常有用。
我用了些热胶(hot-glue)和捆线器将电池固定好。
另外,路由器相对遥控车的底座有点太宽,所以我做了点改动——将两片有机玻璃加在遥控车底座,使之变宽。
2.11 未来可能还会添加的部件下面几个东西应该很有趣,是我想加的东西:1. 头灯:其实就是超级亮的发光二极管,应该很容易将它们加到微电路上。
2. 电流传感器(Current Sensor):可以传回汽车使用的电流量,并将其显示在
VB 应用程序中。
控制器可以读取传感器的数据,然后发送回。
三、软件部分本项目要用到三种软件: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/projects/wifirobot/carserver_1_mipsel.ipk ipkg install ./carserver_1_mipsel.ipkCompiling and Installing CarServer(编译和安装 CarServer)如果你想看看它是如何工作的,或者想自己修改代码,你需要先下载OpenWRT SDK(Linux 版本),然后遵循 Eric Bishop 的 Writingand 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/srccarserver.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:/tmp/. 复制到你的路由器,配置 SSH,并安装它。
相关资源关于 WRT54G 系列路由器有一本很不错的电子书:《Linksys WRT54G Ultimate Hacking》。
这本书教人如何添加一个串口,如何设置软件,还有一大堆的黑客技巧。
我已经联系过该书的作者之一,这本书并非免费的,但是你在 Google Books 上可以读到它。
3.1 如何让串口工作起来