聚豐項目 > 基于物聯網的智能小車平臺搭建
本設計旨在設計一款基于物聯網的智能小車平臺,可以實現通過wifi控制小車,以及可以通過各種傳感器對周圍環境進行檢測以及適當的進行自己的對環境的適應。
jeffc_good
分享jeffc_good
團隊成員
常旭磊 創客
小車的硬件搭建是個很復雜的過程,費去了我很多時間,費時間主要是根據手上的僅有的器件,所以就是湊出來的,用了很多膠帶,甚至各位客觀可以看到上面有牙膏盒的痕跡。所以一步步的介紹搭建的流程不現實,我就將其畫成示意圖,大概講一下硬件的分布。總之,我的原則是手上有什么就用什么。
執行器件主要是兩個57步進電機,兩個大輪子以及一個行李箱的萬向輪,兩個步進電機驅動器,電源是24V鋰電池,其直接給驅動器供電,通過一個電壓轉換模塊,轉換成12V給Intel Edison的Arduino供電。兩個超聲波模塊是很常見的HC-SR04 超聲波模塊,傳感器以及控制板就是Grove套件以及Intel Edison套件,小車的車體是一塊亞克力板。整個硬件的結構圖如下所示,Intel Edison上的接口為Arduino底板上的對應接口。驅動板的使能接口沒有連接,可以省兩個IO口。
搭建成的小車實物如下圖所示:
拼湊完成之后還是感覺挺霸氣側漏的。
從上面看,藍色電池上面的是藍牙模塊。
驅動器部分的細節,下面是繼電器。
這是車后面,兩個步進電機還是很清楚的
電池部分,上面的藍色的方塊是24V鋰電池,下面的盒子里面是電源轉換模塊,將24v轉換成12V提供給主板。
前面的萬向輪
主控板部分,
程序的開始肯定是初始化了,初始化主要包括如下幾個步驟:
初始化的部分包括了串口、Wifi、Web服務器、LCD、IO以及定時器的初始化,串口采用Serial 1,也就是Arduino板上的RX、TX兩個引腳占用的串口,其主要是打印出一些要查看的信息,這里我連接了一個串口藍牙模塊;無線掃描主要是查看一下周圍的無線有哪些,然后連上指定的無線;Web服務器主要是等會的傳送Html代碼;LCD要顯示溫度,對其進行初始化;IO根據實際需要進行輸入輸出的初始化;定時器初始化主要是對Timer1的初始化,其為步進電機提供脈沖,周期是10ms。
主程序如下所示:
前面主要是包括讀取模擬量值,并進行相應的顯示以及控制。溫度值是將環境溫度顯示在LCD以及網頁上;亮度值控制小燈是否亮滅,環境足夠亮時熄滅小燈,環境比較暗的時候打開小燈;聲音控制蜂鳴器是否發聲,當周圍聲音很吵的時候表示有人闖入(模擬監控)發出警報聲,并至少延遲一秒鐘,家里沒人的時候可以用來嚇唬小偷。超聲波傳感器主要是來檢測前后距離,當低于安全距離的時候改變運行方向,防止碰撞到墻壁或其他障礙物。在之后就是主要的在服務器上運行網頁的實現了,其是控制的主體,其主要包括建立客戶端,讀取客戶端請求內容,并發送網頁內容。其根據客戶端的返回內容主要包括啟動、停止、前進、后退、左轉以及右轉。
程序編寫
程序主要講幾段,以下片段是判斷周圍環境,val1是判斷亮度,val2是判斷聲音大小,length1以及length2是判斷前后安全距離的判斷。
下面一段是判斷web客戶端返回的請求中的關鍵字是否有返回相應的控制類的字符,比如說是否返回了GET /On,如果有,就是啟動小車。
步進電機的脈沖是在定時器中斷函數里面的,其到時候就將兩個的PUL引腳進行反轉,形成脈沖。當然,其速度不可控。
這個程序段是超聲波的驅動函數,num是對前后兩個超聲波的判斷,其為1的時候代表的前面的超聲波,其為2的時候代表驅動后面的超聲波。先給trig至少10us的拉高,然后拉低,這時候Echo在返回超聲波的時候是會拉高的,并且拉高時間跟距離是成正比的關系,因此需要記錄這段拉高的時間。duration = pulseIn(echo, HIGH, 60000)這句會讀取引腳上的高電平脈沖,最大脈沖時間間隔為60毫秒,并且把結果賦值給duration變量
調試與實驗
將下載的執行文件設置成開機啟動項后就可以開機后自動等待它的運動了。當然開始主要是通過開關給系統上電了,Edison的啟動過程還是挺慢的。我用串口藍牙,可以通過手機上的藍牙調試助手查看系統打印的信息,并能最終得到Edison得到的IP號碼。藍牙接收到的信息如下所示:
在瀏覽器輸入IP:8080(這是我定義的端口號),然后就可以進入網頁控制頁面了。
點擊turn on就是啟動小車,點擊turnoff就是關閉小車,turn on狀態下是可以控制小車運動方向的。這時候藍牙界面是可以顯示客戶端的請求信息。
實驗總結
因為Intel Edison的緣故,竟然第一次接觸了Arduino的開發,怪不得很多人喜歡用Arduino,確實是因為很簡單,無腦就能完成項目的實現。所以很happy的采用這種簡單的方法進行試用以及功能驗證。上手是快,但是隨著開發的深入,也會發現,其實采用這種方法的局限性很強,過于依賴提供的庫,而且很多功能無法實現。當然也可能是自己并不是很了解這些庫。總之,通過Arduino的開發過程是個很開心的過程,但是如果深層次的學習技術我感覺還是不能這么玩。
我的這次試用的項目的實現,總體來說是實現了預期的各種功能,但是功能的實現效果一般,當然跟硬件的胡亂拼湊有關系,但是也是跟很多地方設計還是不是很精確。所以接下來需要進行深入的學習和開發,希望能夠打造出一個靈活好用的物聯網智能小車平臺。
整體來說,這次提供的試用套件用起來很方便,資料齊全,而且定位準確,其豐富的資源以及多樣的開發環境,可以滿足各個層次的發燒友的需求,可以像我試用這樣簡單的玩,也可以很高端的開發。Intel Edison模塊小巧的外形以及強大的處理運算能力是對當下物聯網等行業很準確的定位,而Arduino底板以及其相應的開發環境使得整個的開發難度可以降到非常低。Grove套件則能使得玩法各種各樣,總體很滿意。當然,由于其IO引腳數等相對較少的緣故,我認為其無法滿足大的開發項目的需求。