7
今天的作品(來(lái)自Instructables)是一臺(tái)搭載了相機(jī),并可由Wi-Fi控制的遙控車(chē),你可以通過(guò)互聯(lián)網(wǎng)駕駛它。這臺(tái)遙控車(chē)比較特別,因?yàn)樗摹斑b控器”是無(wú)線路由器,而不是我們熟悉的手柄。好吧,言歸正轉(zhuǎn),跟著我一起熟悉下制作步驟吧。
這是一臺(tái)兩輪驅(qū)動(dòng)的遙控車(chē)
前輪是該車(chē)的轉(zhuǎn)向輪
該車(chē)的兩個(gè)后輪和電機(jī)位于車(chē)體后部
兼容OpenWrt的路由器,如GL.iNet 6416
支持USB Video Class的攝像頭,我使用的是帶有自動(dòng)對(duì)焦功能的微軟 LifeCam HD-5000
4塊3.7伏的鋰離子電池(一定要買(mǎi)有內(nèi)置保護(hù)電路的)
兼容Arduino系統(tǒng)的DIY智能小車(chē)Chassis Kit 2 WD
L298N電機(jī)驅(qū)動(dòng)控制器開(kāi)發(fā)板
多功能DIY直流對(duì)直流轉(zhuǎn)換器
FTF杜邦跨接電線
MTF杜邦跨接電線(20厘米)
阻抗為47歐姆的白光LED。
螺母和螺栓。
如上圖所示,無(wú)線路由器起到了中樞的作用,它可以控制所有部分。網(wǎng)絡(luò)攝像頭通過(guò)支持流媒體視頻的USB接口連接到無(wú)線路由器,電機(jī)控制板則直接通過(guò)通用輸入輸出接口(GPIO)與路由器相連,這樣,即使沒(méi)有了遙控器,我們也可控制小車(chē)。
在這個(gè)項(xiàng)目中我采用了GL.iNet 6416A無(wú)線路由器,因?yàn)樗w積十分小巧(三維只有58*58*22毫米),其機(jī)身上的五個(gè)接口使用起來(lái)也十分方便。
如果存儲(chǔ)空間能過(guò)關(guān),其他支持OpenWrt的路由器也能勝任該項(xiàng)工作,你可以在OpenWrt的官網(wǎng)上找到支持該標(biāo)準(zhǔn)的路由器名單。
多數(shù)路由器的接口數(shù)量都稍顯不足,無(wú)法滿足控制電機(jī)的需求。你可以在路由器上使用類(lèi)似LED pin的其他引腳,不過(guò)你要卸掉LED的接口模塊或者手動(dòng)控制LED。
我手頭上就有一臺(tái)微軟HD-5000攝像頭,它可以錄制720p的視頻。不過(guò)攝像頭的自動(dòng)對(duì)焦弄得我煩煩的,小車(chē)上這功能沒(méi)什么意義,所以干脆直接關(guān)掉這一功能了事。不過(guò)攝像頭還是要找個(gè)支持UVC的。
電機(jī)對(duì)電流的需求比路由器提供的要高的多,如果你操控電機(jī)時(shí)沒(méi)有使用H橋,就有可能會(huì)對(duì)路由器造成損害。我在該項(xiàng)目中使用L298N電機(jī)驅(qū)動(dòng)控制開(kāi)發(fā)板就是為了控制兩臺(tái)直流電機(jī)的速度和方向。
在實(shí)驗(yàn)過(guò)程中我發(fā)現(xiàn),輸入電壓和L298的輸出電壓之間有一個(gè)約為1.5伏的電壓降。
這是一臺(tái)可自動(dòng)降壓升壓的轉(zhuǎn)換器,它具有輸出電壓調(diào)幅功能,可以讓輸出電壓高于或低于輸入電壓。
與線性調(diào)節(jié)器相比,直流對(duì)直流轉(zhuǎn)換器的優(yōu)勢(shì)在于其轉(zhuǎn)化效率,該效率可達(dá)95%以上,因此它的能耗相對(duì)來(lái)說(shuō)要低得多。為此我還做了一個(gè)簡(jiǎn)單的實(shí)驗(yàn),我將該模塊的輸出電壓改為5伏,而輸入電壓則在2伏到24伏間調(diào)節(jié),但無(wú)論輸入電壓如何(除非輸入低于2.6伏),輸出電壓都穩(wěn)定的保持在5伏。
Chassis Kit由丙烯材料制作而成,其尺寸為19.8 x 14.0 x 6.5厘米,比我想象中要小巧許多。裝配過(guò)程可不簡(jiǎn)單,我絞盡腦汁才把各個(gè)零件、模塊和設(shè)備的位置搞清楚。
套件包含兩臺(tái)減速電機(jī),兩個(gè)塑料輪子,一個(gè)能容納4塊AA電池的電池夾,此外還有兩個(gè)高速編碼器,不過(guò)在這個(gè)項(xiàng)目中我們用不到它倆。
據(jù) Gearbest.com上的數(shù)據(jù)顯示,電機(jī)的輸入電壓為3伏到12伏,下面幾點(diǎn)是我在網(wǎng)上找到的其他相關(guān)信息。
建議工作電壓為6到8伏
電壓為3V時(shí),其最大扭矩可達(dá)800gf cm(約為78牛米)
空載速度可達(dá)1:48
負(fù)載電流為70毫安(最大250毫安)
這玩意相當(dāng)有趣,那兩個(gè)減速電機(jī)體積很小,但性能強(qiáng)勁,甚至可以推動(dòng)一把塑料椅。
在整個(gè)項(xiàng)目中,我使用了4節(jié)3.7伏的18650鋰離子充電電池,其中兩塊串聯(lián),另外兩塊則采用并聯(lián)的方式,這樣電壓就提升到了7.4伏。若使用或充電方式不當(dāng),有可能會(huì)引發(fā)電池爆炸或火災(zāi),所以我推薦大家購(gòu)買(mǎi)內(nèi)置保護(hù)電路的電池。
由于電機(jī)的輸入電壓可變,所以遙控車(chē)需要兩種不同的電壓,5伏來(lái)支持無(wú)線路由器,其它的則供給給電機(jī)。
在組裝遙控車(chē)前,我訂購(gòu)了雙USB降壓調(diào)壓器模塊和直流對(duì)直流轉(zhuǎn)換器(可自動(dòng)升壓降壓)。前者通過(guò)USB線為無(wú)線路由器和網(wǎng)絡(luò)攝像頭提供穩(wěn)定的5伏電壓,后者則會(huì)在輸出之前將電壓調(diào)整到電機(jī)所需的大小。
在測(cè)試過(guò)程中,我發(fā)現(xiàn)電機(jī)的輸入電壓不能超過(guò)5伏,要不然遙控車(chē)會(huì)速度過(guò)快,或者由于電路保護(hù)而直接停掉。
基于這一測(cè)試結(jié)果,雙USB降壓調(diào)壓器模塊就被我棄用了,而直流對(duì)直流轉(zhuǎn)換器則被我留了下來(lái),它可以將輸出電壓穩(wěn)定在4.5伏左右。這樣一來(lái),路由器和攝像頭電壓就變?yōu)?.5伏,兩臺(tái)電機(jī)則只有3伏的輸入電壓了。
GL.iNet無(wú)線路由器出廠就自帶OpenWrt Barrier Braker軟件,它擁有全新設(shè)計(jì)的易用網(wǎng)頁(yè)界面,你可以在這里對(duì)路由器進(jìn)行設(shè)置。請(qǐng)?zhí)D(zhuǎn)到http://192.168.8.1并登錄你的網(wǎng)絡(luò)賬號(hào)。
此外你還可以點(diǎn)擊高級(jí)選項(xiàng)(或者打開(kāi)http://192.168.8.1/cgi-bin/luci)來(lái)進(jìn)入傳統(tǒng)的Luci網(wǎng)絡(luò)界面對(duì)路由器進(jìn)行設(shè)置。
在測(cè)試中我發(fā)現(xiàn),如果不登陸到路由器,視頻流就無(wú)法正常工作,為此我不得不從OpenWrt的網(wǎng)站上下載相關(guān)文件并將其傳送至路由器。
如果你的路由器上還沒(méi)安裝OpenWrt的固件,請(qǐng)參閱相關(guān)教程并對(duì)你的固件進(jìn)行升級(jí)。
安裝相關(guān)軟件時(shí)路由器需要網(wǎng)絡(luò)連接,所以你得先對(duì)路由器進(jìn)行設(shè)置,具體步驟點(diǎn)這里,學(xué)習(xí)一番之后你就能為路由器設(shè)置好網(wǎng)絡(luò)了。此外,你還可以為路由器創(chuàng)建一個(gè)新的SSID,這樣你的各類(lèi)設(shè)備都能連上互聯(lián)網(wǎng)了。
默認(rèn)條件下,OpenWrt包括一些標(biāo)準(zhǔn)軟件,借助它們你可以建立無(wú)線網(wǎng)絡(luò)或者加入現(xiàn)有網(wǎng)絡(luò),不過(guò)你需要在路由器上安裝一些額外的軟件。下面的步驟詳細(xì)介紹了攝像頭所需軟件的安裝過(guò)程,如果你沒(méi)有攝像頭或不需要視頻流,盡可以略過(guò)這部分。
使用SSH將軟件傳輸至路由器,然后逐行執(zhí)行下列命令,推薦使用名為PuTTY的工具。
在安裝軟件前,你需要從本地軟件庫(kù)中下載當(dāng)前列表中的軟件包。
opkg update #update list of available packages
對(duì)攝像頭進(jìn)行設(shè)置時(shí),請(qǐng)參閱相關(guān)教程。
opkg install kmod-video-uvc #UVC camera driver
opkg install mjpg-streamer #stream JPEG files over an IP-based network
若要開(kāi)啟視頻,請(qǐng)對(duì)/etc/config/mjpg-streamer文件進(jìn)行編輯,在這里我是用的編輯工具是WinSCP。
config mjpg-streamer core
option enabled "1"
option device "/dev/video0"
option resolution "640x480"
option fps "15"
option www "/www/webcam"
option port "8080"
如果你想打開(kāi)或關(guān)掉攝像頭的自動(dòng)對(duì)焦,請(qǐng)安裝uvcdynctrl。
opkg install uvcdynctrl
如果想隨時(shí)獲知攝像頭的狀態(tài),請(qǐng)安裝Isof。
opkg install lsof
要開(kāi)啟視頻請(qǐng)重啟路由器。
/etc/init.d/mjpg-streamer enable
重啟路由器后你就可以使用視頻功能了。
下面一行命令可以暫時(shí)關(guān)掉自動(dòng)對(duì)焦功能。
uvcdynctrl --set='Focus, Auto' 0
通過(guò)lsof命令來(lái)查看攝像頭狀態(tài)。
lsof /dev/video0
將下列代碼保存到/etc/init.d/disableAutoFocus。
#!/bin/sh /etc/rc.common
START=99
STOP=15
start() {
uvcdynctrl --set='Focus, Auto' 0
}
stop() {
uvcdynctrl --set='Focus, Auto'
}
將文件系統(tǒng)權(quán)限設(shè)定為0755,你也可以通過(guò)WinSCP修改權(quán)限。
chmod 0755 /etc/init.d/disableAutoFocus
需要時(shí)可關(guān)掉自動(dòng)對(duì)焦
/etc/init.d/disableAutoFocus start
激活服務(wù)自啟動(dòng)能
/etc/init.d/disableAutoFocus enable
該項(xiàng)目的核心代碼由Lua腳本語(yǔ)言撰寫(xiě)而成,網(wǎng)頁(yè)界面則使用了html和javascript。作者已經(jīng)將所有文件整合進(jìn)了一個(gè)壓縮包,請(qǐng)點(diǎn)擊此處下載。
Lua是一種解釋性語(yǔ)言,對(duì)腳本進(jìn)行修改也并不需要重建整個(gè)項(xiàng)目,它的代碼在保存后就會(huì)立即執(zhí)行,所以Lua在升級(jí)和維護(hù)上十分方便。如果你對(duì)Lua感興趣,可以仔細(xì)閱讀下列Lua文檔。
/usr/lib/lua/gpio.lua
控制路由器上各類(lèi)接口的讀寫(xiě)工作。
/usr/lib/lua/2w_motor.lua
與gpio.lua協(xié)同工作,可控制小車(chē)上的兩臺(tái)直流電機(jī)。
/www/cgi-bin/control
該程序可作為瀏覽器和路由器之間的一個(gè)接口。
之前我們提到過(guò),網(wǎng)頁(yè)界面的編寫(xiě)使用了html和javascript。如果你想開(kāi)發(fā)自己的界面,可以參考下列文檔。
/www/car/index.html
主程序,可加載外部js & css文件并實(shí)現(xiàn)圖像的onClick事件。
/www/car/pantilt.html
主程序,可帶來(lái)更大的視頻分辨率。
/www/car/car.css
控制選項(xiàng)布局,如圖片位置,顏色和字體等。
/www/car/car.js
該文檔包含有一部分javascript函數(shù)。
/www/images
網(wǎng)頁(yè)上一個(gè)裝滿圖片的文件夾。
/www/codebase
該文檔中包含了一部分javascript的元素,開(kāi)發(fā)者可以用它來(lái)制作滑塊。
實(shí)際上你并不需要費(fèi)勁安裝軟件,只要把它們放在路由器的相關(guān)文件夾中就行,在項(xiàng)目中我是用WinSCP來(lái)管理文件和文件夾。
WinSCP是Windows下的SFTP/FTP/WebDAV/SCP客戶端,你可以利用它在電腦和路由器間傳輸文檔和管理文件夾。
若你的電腦上已經(jīng)安裝了WinSCP并建立了與路由器的連接,就可以解壓縮下載的文檔(2W_WiFi_car.zip) 到你的電腦并將其傳送至路由器上相應(yīng)的文件夾(如上圖所示)。
名為 /www/cgi-bin/control的文件需要執(zhí)行權(quán)限,請(qǐng)將其權(quán)限修改為0755 (rwxr-xr-x)(如上圖所示)。至于修改權(quán)限的相關(guān)步驟,你可以參考WinSCP的相關(guān)提示。
第十九步:脈寬調(diào)變(PWM)-速度控制
GL.iNet無(wú)線路由使用了一塊Atheros AR9331 CPU,不過(guò)它在硬件上卻不支持脈寬調(diào)變,想要實(shí)現(xiàn)該功能,只能通過(guò)安裝相關(guān)軟件來(lái)支持。
在內(nèi)核升級(jí)到3.14之后,許多OpenWrt的軟件如Barrier Breaker和Chaos Calmer都不再支持輸入輸出接口端的脈寬調(diào)變了。所以你得自行對(duì)OpenWrt的固件進(jìn)行修改,以便使用脈寬調(diào)變功能。
我跟著教程試著對(duì)固件進(jìn)行修改,但當(dāng)我將修改好的固件上傳至路由器后,它卻直接變磚了,還好路由器恢復(fù)起來(lái)比較簡(jiǎn)單,真是驚出我一身冷汗。
我上手gpio-pwm-ar9331時(shí)間不短了,之前下載了先行編譯版的程序并上傳至我的路由器,不過(guò)安裝缺總是出錯(cuò),顯示的錯(cuò)誤信息如下:
Installing kmod-gpio-pwm-ar9331 (3.10.49-1) to root...Collected errors:
* satisfy_dependencies_for: Cannot satisfy the following dependencies for kmod-gpio-pwm-ar9331:* kernel (= 3.10.49-1-69f3c9d824d79ff97e8c05f8219a41f3) *
* opkg_install_cmd: Cannot install package kmod-gpio-pwm-ar9331.
此后,我從源碼對(duì)gpio-pwm-ar9331進(jìn)行了重新編譯,這次安裝成功了,但它卻完全無(wú)法工作。
于是我從網(wǎng)上找了一些軟件端脈寬調(diào)頻教程,經(jīng)過(guò)不斷地測(cè)試,我終于取得了成功,希望在使用過(guò)程中不要出現(xiàn)bug。
不過(guò)我的擔(dān)心還是發(fā)生了,路由器上的脈寬調(diào)頻還是廢了,希望未來(lái)幾周我能搞定這個(gè)問(wèn)題。如果各位有什么高見(jiàn),我洗耳恭聽(tīng)。
你可以通過(guò)網(wǎng)絡(luò)瀏覽器(別用萬(wàn)惡的IE,我推薦你們使用Chrome)或者安卓應(yīng)用來(lái)控制小車(chē)。
打開(kāi)瀏覽器并跳轉(zhuǎn)到http://routerIP/car/(一般是http://192.168.8.1/car/)或者h(yuǎn)ttp://routerIP/car/pantilt.html(如:http://192.168.8.1/car/pantilt.html)。
在界面中點(diǎn)擊相關(guān)按鈕或使用鍵盤(pán)對(duì)校車(chē)進(jìn)行操控。
狂點(diǎn)鍵盤(pán)上的一個(gè)鍵就可以讓小車(chē)跑起來(lái),松開(kāi)按鍵小車(chē)就會(huì)停下來(lái)。
我的名字叫Wi-Fi遙控車(chē),我于05年十月誕生于馬來(lái)西亞。我能跑能看,身強(qiáng)力壯長(zhǎng)得又帥,熟悉我之后保證你會(huì)愛(ài)上我。
你愛(ài)上它了嗎?更多有趣的項(xiàng)目,請(qǐng)關(guān)注硬創(chuàng)邦微信(leiphone_bang),還有創(chuàng)客馬拉松的比賽在等著你哦,華南農(nóng)大站的比賽正在火熱報(bào)名中,在微信回復(fù)“華農(nóng)”即可參與。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。