超牛!用WIFI控制的摇控汽车
生活随笔
收集整理的這篇文章主要介紹了
超牛!用WIFI控制的摇控汽车
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
(今天在PCClub上看到一牛人的帖子,拿來和大家分享下.)
?
超牛!用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?微控制器的選擇
在本項目中我評估了三種不同的微控制器,以下是一個簡要的評估結果。
微控制器?PIC16F628A?Arduino?(ATmega168)?Freeduino?MaxSerial?AVR?Butterfly?(ATmega169)?
優點?價格相對便宜;穩定的軟件控制;?很容易編程(用C語言,而且有許多內置的函數庫);集成串行(integrated?serial);預包裝的開發套件,很少或根本不需要焊接;?比PIC?(C)容易編程;集成串行;?較少需要焊接;?
弊端?很難編程(基于匯編語言的);必須要手動連接電路;需要配備額外的串行硬件(MAX232A);需要額外編碼器;?價格相對較高?Bootloader錯誤(詳見下文);集成外設導致奇怪的輸出電壓;價格相對較高?
最后,出于以下幾個原因我選擇了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?
?(7805?1A?穩壓器)?9.2V?
(來自12V-7812?導軌)?12V?
(7812?1A?穩壓器)?12V?
(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)?
PIC
Arduino?接線指導
信號?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應用程序中。控制器可以讀取傳感器的數據,然后發送回。
在那遙遠的草原,有只小綿羊~~~
| wisexxm 版主 正在載入數據,請稍等... 昵稱:PC小綿羊 發帖:741 積分:3093 精華:25 頭銜:太平洋艦隊中校 注冊:04-07-30 查看資料查看blog 發送消息 | 2# 2008-10-09 10:51:08 手機鈴聲下載!搞笑鈴聲,個性鈴聲,隨你點 ?引用? ?回復? 三、軟件部分本項目要用到三種軟件: 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.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_robot_client.zip(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?下載所有的文件? 以下這個壓縮包包括上述所有的源碼和編譯過的二進制碼。 下載:wifi_robot_software.zip 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? |
總結
以上是生活随笔為你收集整理的超牛!用WIFI控制的摇控汽车的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件测试webtours飞机票bug档案
- 下一篇: tomcat部署war包不成功解决方法