趙 琦,王飛飛,郭寧峰
(平頂山學院 信息工程學院,河南 平頂山 467000)
近年來,隨著經濟水平和科學技術的快速發展,人們對大自然的探索和改造也逐漸進入了更深的層次。無線遙控探測器作為一種環境探測的重要工具,為自然環境以及災后環境的探測工作做出了巨大的貢獻。但是,因為路況等不確定因素的影響,部分探測器難以對不同的環境進行有效的探測?;诖?,本文設計了一款基于Arduino的無線遙控視頻小車系統,以實現對危險或者不易到達地區的環境監控和信息采集。
本系統主要分為上位機軟件模塊和下位機硬件模塊兩個部分。軟件模塊主要包括基于Android智能終端的應用控制程序及電機驅動和舵機驅動程序。硬件模塊以Arduino為控制核心進行設計,主要分為無線控制模塊和視頻監控模塊兩部分。通過將所有的軟件模塊與硬件模塊相結合,最終構成一個完整的系統。該系統總體設計框圖如圖1所示。

圖1 總體設計框圖
根據對功能的分析,本系統主要包括小車的無線遙控和視頻監控兩大功能。通過對不同的控制指令進行判斷,進而實現對無線遙控小車的運動控制;通過車載攝像頭實現對小車周圍情況的視頻采集功能。系統功能如圖2所示。

圖2 系統功能
Arduino UNO REV3開發板(以下簡稱“R3開發板”)是本系統的核心控制單元。作為Arduino平臺最為通用的一款開源硬件產品,R3開發板采用ATMEGA328P單片機作為核心處理器,它擁有14個數字I/O引腳,其中可用于PWM輸出的有6個,同時R3開發板還擁有6個模擬I/O口、一個頻率為16 MHz的晶體振蕩器、一個可用于程序燒錄和供電的USB口、一個電源插座和復位按鈕,具有功耗低、成本低、接口豐富的特點,完全能夠滿足該系統的設計需求。該系統通過對4個數字I/O引腳輸出的控制來實現小車的控制功能。在實現對小車控制的四個引腳中,該系統使用兩個PWM輸出引腳(D5和D6),通過設置占空比來調節驅動電機的轉動速率;使用兩個數字引腳(D4和D7)作為電機的驅動引腳,通過為D4和D7輸入高低電平來控制驅動電機的轉動方向。
本系統中采用R3-L293D作為小車的驅動擴展板,R3-L293D驅動擴展板是一款為智能小車機器人開發而打造的多功能擴展板,采用排針式的對插結構設計,更全面地提升了Arduino開發板的適用性。它集成了電源開關、電機驅動、WiFi接口等功能接口,并且將Arduino UNO開發板的14個數字I/O口全部引出,多顏色的排針方式可以更簡單地區分不同功能的引腳。R3-L293D的部分功能引腳如圖3所示。

圖3 R3-L293D的功能引腳
在無線路由的設計方面,TL-WR702是一種專為移動設備WiFi無線上網而設計的迷你無線路由器,利用其攜帶的內置天線,可有效擴展數據傳輸的距離,使數據有效傳輸距離達到最大300 m左右。TL-WR702的8 MB FLASH、64 MB RAM的內存也能夠滿足視頻傳輸不卡頓的需求;它不需要單獨電源,支持多種供電方式,并具有低壓驅動的特點。通過TTL串口通信實現與Arduino UNO R3開發板的數據交互。
在電機控制方面,該系統采用L293D驅動芯片,通過H橋電路和控制器輸出的PWM信號來實現對電機的控制,采用Micro USB接口的方式為其提供5 V穩壓。將無線路由器模塊的TTL線連接到R3-L293D擴展板的WiFi TTL接口上。通過將UVC攝像頭驅動加載到OpenWrt系統上實現視頻數據的實時無線傳輸。利用Socket模式進行指令信息和視頻數據的傳輸。通過連接云服務器,控制端的虛擬按鍵值就可以被轉換成相應的控制指令,然后通過無線路由器的串口進行控制指令數據的接收工作,最后將接收到的數據通過TTL串口通信發送給R3開發板,并由其進行相應的處理。
在本系統程序設計中,采用函數式開發的思想,根據小車不同的運動狀態,利用analogWrite()方法和digitalWrite()方法進一步封裝了 goAhead()、Left()、goBack()、Right()和Stop()方法。在實際程序中,使用digitalWrite()方法控制引腳的高低電平輸出,通過調用goAhead()、goBack()、Left()、Right()和 Stop()方法分別實現小車的前進、后退、左轉、右轉和停止功能。小車無線控制模塊流程如圖4所示。

圖4 小車無線控制模塊流程
作為本系統的核心功能之一,視頻監控模塊根據其特點可以劃分為視頻信號的采集、處理和傳輸三個模塊。系統視頻采集模塊采用的硬件為USB免驅動攝像頭。該USB攝像頭擁有兩個Interface,分別是Video Control Interface和Video Stream Interface。攝像頭中的圖像處理芯片會將其收集到的視頻信號編碼為固定的格式,然后通過FIFO緩沖將各個單元發送到USB總線上。路由器模塊上的驅動程序會接收每一個數據單元,并將其組成一個完整的圖像幀,然后由圖像處理軟件將圖像幀編碼成固定格式的圖像數據。其工作流程如圖5所示。

圖5 視頻處理流程
視頻數據傳輸功能由無線路由器模塊來實現。通過將UVC攝像頭驅動加載到無線路由器模塊的OpenWrt系統上,可以實現視頻數據的實時無線傳輸。該系統的設計中所有的指令信息和視頻數據都是通過Socket的模式傳輸,無線路由器模塊在啟動后會自動創建UDP連接,并連接云服務器,將采集到的數據以Socket的模式發送到指定端口的地址,以供客戶端取用視頻。
控制端軟件模塊主要工作是實現對硬件的遠程控制、接收硬件設備傳遞來的視頻信息,并將視頻信息實時地顯示在控制頁面上。
本系統的控制端軟件主要由兩個頁面組成:第一個頁面為APP的主頁面;通過點擊其上的控制按鈕可以進入到第二個頁面,即控制頁面。在控制頁面使用digitalWrite()方法控制引腳的高低電平輸出。通過將Servo.h庫中Servo類型的變量附加到引腳上,實現對舵機的控制。通過點擊不同的控制按鈕對小車進行不同的控制操作,控制頁面的背景為硬件設備所采集視頻信息的展示窗口,通過myServo.attach(9)語句將舵機附加到9號引腳上,并通過write()方法將其默認狀態下(即小車直行狀態下)的舵機角度設置為90°。當控制芯片接收到使車載攝像頭左擺的指令時,就通過myServo.write(60)語句將舵機角度設置為60°;而接收到右擺的指令時,就通過myServo.write(120)語句將舵機角度設置為120°。通過該窗口,用戶可以實時看到小車前方的事物??刂栖浖木唧w流程如圖6所示。

圖6 控制端軟件流程
本設計采用控制端和數據采集端相結合的方式,可以很好地實現小車的遠程控制以及視頻信息的采集和傳輸、控制端的信息展示等功能,能在不同的條件下完成環境信息采集工作。該設計能夠較好地協助甚至替代人們完成惡劣條件下的環境探測工作,在完成基本功能的基礎上達到了比較理想的效果,具有較好的實用價值。