動手能力超強(qiáng)牛人教你做Wifi機(jī)器人(圖)_第1頁
動手能力超強(qiáng)牛人教你做Wifi機(jī)器人(圖)_第2頁
動手能力超強(qiáng)牛人教你做Wifi機(jī)器人(圖)_第3頁
動手能力超強(qiáng)牛人教你做Wifi機(jī)器人(圖)_第4頁
動手能力超強(qiáng)牛人教你做Wifi機(jī)器人(圖)_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

動手能力超強(qiáng)牛人教你做Wifi機(jī)器人(圖)2009年02月03日09:29分

作者:摘要:Wifi機(jī)器人(WifiRobot):其實是一輛能通過互聯(lián)網(wǎng),或500米以外的筆記本無線設(shè)施來遠(yuǎn)程控制的遙控汽車。由于在車上配備了一個網(wǎng)絡(luò)攝像頭,因此在視野范圍之外都能夠遙控該車,此外,車上還裝了一個喇叭,您可以遠(yuǎn)程朝人們按喇叭。一、前言Wifi機(jī)器人(WifiRobot):其實是一輛能通過互聯(lián)網(wǎng),或500米以外的筆記本無線設(shè)施來遠(yuǎn)程控制的遙控汽車。由于在車上配備了一個網(wǎng)絡(luò)攝像頭,因此在視野范圍之外都能夠遙控該車,此外,車上還裝了一個喇叭,您可以遠(yuǎn)程朝人們按喇叭。我發(fā)現(xiàn)LinksysWRT54GL路由器非常的hacker-friendly(黑客友好),它運(yùn)行Linux和一些已經(jīng)被反向工程(reverseengineered)了的硬件。世面上有一大批針對這種路由器的固件版本(firmwareversion)可供選擇,本項目用到的版本是可訂制化的LinuxfirmwareOpen-WRT。有了路由器的相關(guān)軟件,對一大堆硬件進(jìn)行改裝也變得可能。因此,既然有這樣一個廉價的、可改裝的、嵌入式Linux系統(tǒng)可以隨我所用——我知道我能做件很酷的事情,于是,Wifi機(jī)器人的想法誕生了。本文的目的是提供一個該項目的概覽,同時也列出了一些相關(guān)軟件和電子產(chǎn)品的實施細(xì)節(jié),但它并不是一個一步一步詳細(xì)介紹如何制作Wifi機(jī)器人的手冊,不過,那些具備一定電子和軟件知識的人根據(jù)本文提供的信息也能夠做出自己的Wifi機(jī)器人。我已經(jīng)遵循GNUGPLv2發(fā)布了所有的源代碼,因此,希望大家都來用這個源碼,并盡量去完善它!二、硬件部分2.1汽車在汽車上增加網(wǎng)絡(luò)攝像頭、路由器、沉重的電池、額外的電路,以及一大堆的電線會大大超出汽車原本設(shè)計的載重量。因此,考慮到這些額外要加的重量,您需要找到一個超大型的遙控汽車。舊貨店常常有一些遙控車賣,價格3到5美元不等(不包括遙控器),我已經(jīng)買了許多這樣的汽車以供使用。您最好選擇那些體積大于或等于現(xiàn)實生活中真車體積1/10的玩具遙控汽車,體積太小的就不要考慮了。下圖這兩輛遙控汽車是我在ValueVillage花5美元買下的。我一共拆了約20輛遙控汽車。我發(fā)現(xiàn)幾乎每一輛車都使用了RealtekRX2/TX2芯片或其他引腳兼容(pin-compatible)的芯片,而且說明書里有各引腳的具體連接方式。這意味著真的很容易改裝這些汽車,而不必加上一大堆我們自己的電路。我們可以將一個微控制器直接與這些引腳連接起來,直接控制汽車。充分利用汽車的原有電路能節(jié)省很多的時間和精力。2.2路由器我已經(jīng)改裝了我的WRT54GL,現(xiàn)在它有2個串口和一個1GB的SD卡(用來充當(dāng)1GB的硬盤)。在本項目中其實沒有用到這個SD卡,但用到了一個串口。兩個串口中的一個作為控制臺端口,另一個作為我們將來會使用到的TTS/1(語音合成)端口。這個項目我使用的固件版本是Open-WRTWhiteRussianv0.9,還有更多更新的固件版本,但我們這個項目并不需要。本文的后面提供了參考鏈接,可以幫助您使用自己的串口。2.3微控制器的選擇在本項目中我評估了三種不同的微控制器,以下是一個簡要的評估結(jié)果。微控制器PIC16FArduino(ATmega168)FreeduinoMaxSerialAVRButterfly(ATmega169)優(yōu)點價格相對便宜;穩(wěn)定的軟件控制;很容易編程(用C語言,而且有許多內(nèi)置的函數(shù)庫);集成串行(integratedserial);預(yù)包裝的開發(fā)套件,很少或根本不需要焊接;比PIC(C)容易編程;集成串行;較少需要焊接;弊端很難編程(基于匯編語言的);必須要手動連接電路;需要配備額外的串行硬件(MAX232A);需要額外編碼器;價格相對較高Bootloader錯誤(詳見下文);集成外設(shè)導(dǎo)致奇怪的輸出電壓;價格相對較高最后,出于以下幾個原因我選擇了PIC16F628A1.

我手邊有一堆PIC16F628A2.

我對PIC16F628A3.

我想要塊面積小的板子,PIC是三個微控制器中面積最小的。4.

我想完全控制代碼實現(xiàn)的功能,PIC是基于匯編語言編程,因此很適合。Arduino(FreeduinoMaxSerial)是我的第二選擇,它很容易安裝和運(yùn)行,我真的很喜歡。社區(qū)支持非常強(qiáng),而且非常好用。我原先使用的是AVRButterfly開發(fā)板,但我發(fā)現(xiàn)AVRbutterfly的bootloader上有一個錯誤會破壞代碼,并且不允許你重新編寫它,除非載入一個新的bootloader。我花了相當(dāng)長的一段時間來調(diào)試和解決這個問題,不過最終還是決定放棄它。此外,我還發(fā)現(xiàn)輸出電壓是難以預(yù)測的,因為輸出還要驅(qū)動液晶顯示屏之類的集成外設(shè)。PIC和Arduino微控制器平臺的源代碼我都有。兩個都經(jīng)過了測試,所以你覺得哪個好用就用哪個。Arduino(FreeduinoMaxSerial)用起來最方便,我買了這個。2.4操控電路(steeringcircuit)實際上,我在車上裝了兩個控制板。這樣做的理由是,我開始不小心燒掉了車上附帶的原始驅(qū)動晶體管(drivetransistor)。幸好我還能將燒掉的晶體管拆掉,同時也拆掉了一起被燒掉的RX2芯片,從而挽救了操控電路。該驅(qū)動晶體管的額定電流為5A,當(dāng)我努力將電路電壓加到16V時,晶體管在一陣壯觀的煙霧中“犧牲”了,因為正常情況下用電池驅(qū)動汽車只要9.6V。我只好又拿了另一輛遙控汽車的板子裝上了——這么做當(dāng)然是為了要用板子上的驅(qū)動晶體管。當(dāng)我把電壓打到12V時,盡管上面的晶體管已經(jīng)變得非常熱,但一切正常。如果能夠利用遙控汽車已有的電路,而不必建立自己的H橋電機(jī)驅(qū)動(H-bridge)電路,那將會節(jié)省大量的時間和金錢。2.5電池我花了50多美元在易趣上買了一些高級的遙控汽車電池,它們的電池容量都是3800毫安(mAh)的,另外還有一個1.8A的智能充電器。在完全沒電的情況下,每個電池大概需要花1.5小時充電。我用標(biāo)準(zhǔn)ATX電源Molex連接器換下了所有的遙控電池連接器。這樣,我就可以用我已有的廉價連接器將它們連接起來,并且比較容易做一個分配連接器(splitterconnector)來進(jìn)行功率測量。這些完全充好電的電池串聯(lián)連接時總電壓約為16V。2.6電源導(dǎo)軌(PowerRails)5V

(78051A穩(wěn)壓器)9.2V(來自12V-7812導(dǎo)軌)12V(78121A穩(wěn)壓器)12V(LT10837.5A穩(wěn)壓器)微控制器攝像頭;操控電路控制器;喇叭wifi路由器有電動控制器的驅(qū)動板(driveboardwithmotorcontroller)9.6V導(dǎo)軌(rail)是由781212V導(dǎo)軌供電,不過,我們首先需要將4個二極管與781212V導(dǎo)軌串聯(lián)在一起。這樣做的理由是,每個二極管需要0.7V(實際不超過0.7V)的電壓,把這4個二極管串聯(lián),就能把781212V導(dǎo)軌的總電壓降低約2.8V,變?yōu)?V左右,從而得到我們設(shè)備所需要的電壓。7812穩(wěn)壓器的額定電流只有1A,但電動機(jī)的耗電量會大大超過它。所以,我在Digikey花了不到14美元買了一個7.5A12V的穩(wěn)壓器,并且還在上面加了一個散熱器,因為我當(dāng)時估計它運(yùn)行起來有可能變得很燙,但在多次的實際使用中,我發(fā)現(xiàn)它甚至沒有變暖,所以并不需要散熱器。我不想冒燒掉操控控制電路的風(fēng)險,所以我把它放在最接近遙控汽車電池的軌道上。攝像頭的工作電壓為9V,喇叭也差不多,因此,我把這些設(shè)備都放在9.2V軌道。所有的電力電子設(shè)備都裝在一個原型板(prototypeboard)上,然后被儲存在一個項目盒(projectbox)中。2.7微控制器電路(MicrocontrollerCircuit)PICArduino接線指導(dǎo)信號Arduino引腳向前數(shù)字引腳8向后數(shù)字引腳9向左數(shù)字引腳10向右數(shù)字引腳11綠色發(fā)光二極管數(shù)字引腳7紅色發(fā)光二極管數(shù)字引腳6喇叭數(shù)字引腳5只要用標(biāo)準(zhǔn)的串行電纜,就可以將FreeduinoMaxSerial串口與路由器的串口連接起來。該FreeduinoMaxSerial使用串行引腳4——即DTR(dataterminalready,數(shù)據(jù)終端就緒)引腳來重啟微控制器,并使其能夠下載新的代碼。在正常的電腦操作中,這個引腳的工作電壓為10V或-10V——具體取決于該串口連接與否。然而,這個引腳是接地連接在路由器的串口上,當(dāng)路由器串口發(fā)送數(shù)據(jù)時,MaxSerial就會重啟,而這點對本項目不合適,我們要求把DTR引腳加壓到+9V。通過硬件改造,我們給它增加了一個程序鎖定模式,使之不能上傳新的代碼,也使得串口無法重啟微控制器。

注意:如果您使用的是USB接口版本的Arduino,您應(yīng)該只需要把RX和TX引腳連接到MAX232A,然后再連接到路由器的串口,并且可能不需要做硬件修改。不過我手中只有MaxSerial版本,所以無法驗證此點。2.8攝像頭本項目最酷的一個地方,是在視野范圍以外還能驅(qū)動汽車。這其實是靠一個網(wǎng)絡(luò)攝像頭完成的。我選擇的攝像頭是PanasonicBL-C1A,它基本上算是最便宜的有線網(wǎng)絡(luò)攝像頭,其驅(qū)動軟件也只能用在Windows系統(tǒng)上,不過已經(jīng)完全夠用了。而且,就像兩位評論家所指出的那樣,該攝像頭有一個非常實用的web使用界面。該攝像頭的視頻質(zhì)量相當(dāng)不錯。然而,即使在連接良好的情況下,它也常常會暫停1秒左右的時間,然后又開始恢復(fù)正常。我猜這是因為它的控制器沒有足夠強(qiáng)大的自動對焦能力,但總的來說我還是很喜歡這款性價比不錯的攝像頭。2.9喇叭我覺得用遙控汽車朝人摁喇叭很有趣,于是就加了個喇叭,而且這很容易實現(xiàn)。我買了一個3美元的蜂鳴器,然后用一個晶體管把它連接到微控制器上就可以了。2.10硬件安裝我去掉所有的裝飾性和非功能性零部件,只用到了遙控汽車最基礎(chǔ)的部分。接著,對攝像頭附帶的硬件做了個小改動后,就輕松將攝像頭安裝在了車前面。電路板也被固定在車的前端,使用的是塑料螺母和螺栓,以避免導(dǎo)電問題。PIC控制板被安全固定在車的一側(cè)。在車架上我打了很多孔,用來穿電線,所有的電線長度都弄得比實際需要的要長,目的是為了使電線連接的各零部件在最終固定之前可以自由地調(diào)整位置。當(dāng)所有的零部件被最終固定好之后,用捆線器收緊電線的多余部分即可。本項目一共用到了大約30根電線,還不包括以太網(wǎng)電纜。車的頂部裝了個項目盒,除了LT10837.5A穩(wěn)壓器被裝在遙控車的底部之外,所有其他的電源電路就放在這個項目盒里。而我之所以沒把LT10837.5A穩(wěn)壓器也放在盒子里,是因為它是在我燒掉第一塊控制板后新加的一個東西,裝在車子底部最省事。當(dāng)路由器啟動時,裝在項目盒背面的一個發(fā)光二級管就開始發(fā)出紅光。當(dāng)路由器向微控制器發(fā)送一個‘a(chǎn)live’信息時,這個發(fā)光二級管就變?yōu)榘l(fā)綠光,于是我就知道我可以連接VB客戶端應(yīng)用程序了。這個發(fā)光二極管在調(diào)試系統(tǒng)時非常有用。我用了些熱膠(hot-glue)和捆線器將電池固定好。另外,路由器相對遙控車的底座有點太寬,所以我做了點改動——將兩片有機(jī)玻璃加在遙控車底座,使之變寬。2.11未來可能還會添加的部件下面幾個東西應(yīng)該很有趣,是我想加的東西:1.

頭燈:其實就是超級亮的發(fā)光二極管,應(yīng)該很容易將它們加到微電路上。2.

電流傳感器(CurrentSensor):可以傳回汽車使用的電流量,并將其顯示在VB應(yīng)用程序中??刂破骺梢宰x取傳感器的數(shù)據(jù),然后發(fā)送回。三、軟件部分本項目要用到三種軟件:1.

VB6Wifi_Robot客戶端應(yīng)用程序(運(yùn)行在Windows系統(tǒng)中);2.

用在路由器上的用C語言編寫的CarServer,該路由器運(yùn)行OpenWRTWhiteRussianv0.9(Linux版本);3.

微控制器固件。我已經(jīng)提供了經(jīng)測試過的PIC16F628A微控制器和Arduino(FreeduinoMaxSerial)固件,相關(guān)的源碼都遵循GNUGPLv2發(fā)布了。假設(shè)您有一個安裝了OpenWRTWhiteRussianv0.9的LinksysWRT54GL,并將它已連接到了互聯(lián)網(wǎng),可以參考下面的安裝指令。OpenWRT安裝指令參考這個指南。InstallingCarServer(安裝CarServer)如果你只是想要使用該軟件,在你的路由器安裝配置SSH,然后運(yùn)行以下代碼:#cd/tmp#wget/projects/wifirobot/carserver_1_mipsel.ipk#ipkginstall./carserver_1_mipsel.ipkCompilingandInstallingCarServer(編譯和安裝CarServer)如果你想看看它是如何工作的,或者想自己修改代碼,你需要先下載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將出現(xiàn)在/OpenWrt-SDK-Linux-i686-1/bin/packages.然后將代碼#scpcarserver_1_mipsel.ipkroot@<router_ip>:/tmp/.復(fù)制到你的路由器,配置SSH,并安裝它。相關(guān)資源關(guān)于WRT54G系列路由器有一本很不錯的電子書:《LinksysWRT54GUltimateHacking》。這本書教人如何添加一個串口,如何設(shè)置軟件,還有一大堆的黑客技巧。我已經(jīng)聯(lián)系過該書的作者之一,這本書并非免費(fèi)的,但是你在GoogleBooks上可以讀到它。3.1如何讓串口工作起來我們需要利用TTS/1(語音合成),因此,如果您只添加了一個串行端口,那就保證這個端口用于語音合成。假定你已經(jīng)安裝了OpenWRTWhiteRussianv0.9,那么運(yùn)行如下指令即可。#ipkgupdate#ipkginstallsetserial#cd/usr/sbin#wget/projects/wifirobot/stty.tgz#tar-zxvfstty.tgz#chmod755stty將下列語句添加在/etc/init.d/custom-user-startup后,使串口啟動后工作起來,并使CarServer自動啟動。/usr/sbin/setserial/dev/tts/1irq3/usr/sbin/stty-F/dev/tts/1rawspeed9600/bin/carserver&3.2運(yùn)行Wifi機(jī)器人客戶端應(yīng)用程序下載:wifi_robot_client.zip(Wifi機(jī)器人客戶端應(yīng)用程序軟件包)該壓縮包(wifi_robot_client.zip)包含了VB6源碼和編譯過的EXE文件。如果您不想修改源程序的話,您只需用到wifi_robot_client.exe和config.txt文件,當(dāng)然,如果您想修改源碼,也完全可以。此外,該應(yīng)用程序只適用于Windows系統(tǒng),如果有人想開發(fā)用于其他操作系統(tǒng)的客戶端軟件,我也很歡迎。3.3微控制器固件PIC您首先需要一個PIC編碼器來燒錄固件。市場上有許多PIC編碼器可供選擇,我自己使用的編碼器P16PRO40是在易趣上買的。您可以使用Microchip公司的MPLAB自己編譯HEX文件,或直接下載本文提供的HEX文件。鏈接:car_pic.asm鏈接:car_pic.HEXArduino(FreeduinoMaxSerial)指南:ArduinoTutorial相關(guān)源碼下載鏈接:car_arduino.c如果您使用的是FreeduinoMaxSerial,請務(wù)必對其進(jìn)行小的硬件改造,以防Freeduino每次從路由器串口接收數(shù)據(jù)時都要重啟。更多細(xì)節(jié)請參考本文的“硬件”部分。3.4下載所有的文件以下這個壓縮包包括上述所有的源碼和編譯過的二進(jìn)制碼。下載:wifi_robot_software.zip3.5免責(zé)聲明我已經(jīng)盡最大的努力確保所有上述信息是準(zhǔn)確的。如果您發(fā)現(xiàn)任何錯誤,請發(fā)送電子郵件至jon@,我會立刻做出更正。四、衡量標(biāo)準(zhǔn)和實測數(shù)據(jù)4.1最高時速為了得知該遙控車的最大速度,我在地上相隔3米放了兩條帶子,然后用攝像機(jī)拍攝。攝像機(jī)每秒記錄30幀,攝像機(jī)的誤差大約+/-3.3%,帶子的誤差大約是+/-1%。該車在0.7秒內(nèi)開出3米遠(yuǎn)(即相機(jī)在一秒內(nèi)拍了21幀),所以最高時速為:4.3米/s=15.5km/h=9.6miles/h4.2距離在500米之處,遙控車上裝配的路由器還能連接到我的筆記本電腦(傳輸速度1MB/s),然而距離超出500米,就不行了。固件(OpenWRT)本可以提高輸出功率,我也試圖修改相關(guān)參數(shù)值,但無濟(jì)于事,可能是我的戴爾Inspiron6000型筆記本有限制。4.3數(shù)據(jù)傳輸速率控制信號:3.5KB/s攝像頭:50-190KB/s該攝像頭使用多少帶寬取決于所拍攝圖像的亮度,如果亮度很高,就

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論