陳維剛 ,朱天航 ,吝 毅
(長安大學(xué)工程機(jī)械學(xué)院,陜西 西安 710064)
近年來,人們的生活正在逐漸向智能化轉(zhuǎn)變,嵌入式技術(shù)及其他新技術(shù)的快速發(fā)展,使人們的生活和工作變得越來越智能化[1]。智能小車也叫作輪式機(jī)器人,以四足和六足最為常見。其以汽車電子技術(shù)為背景,綜合計(jì)算機(jī)、機(jī)械、控制以及傳感技術(shù)等多學(xué)科技術(shù),屬機(jī)器人的一個(gè)分支[2]。目前,智能小車能應(yīng)用于傳感、汽車電子、電氣、計(jì)算機(jī)、導(dǎo)航、信息等多個(gè)領(lǐng)域,在倉庫搬運(yùn)、快遞投送、軍事偵察等方面都有廣泛應(yīng)用[3]。此外,通過人為的控制,智能小車可進(jìn)入如礦井、廢墟等人們不易進(jìn)入的地方工作。
智能小車控制包括有線控制和無線控制[4]。有線控制即通過有線通信技術(shù)來控制小車狀態(tài),這種方法安全穩(wěn)定,但設(shè)計(jì)要求較高且控制效果容易受到線長的制約;無線控制就是利用無線遙測遙控終端設(shè)備取代現(xiàn)場總線。目前,藍(lán)牙技術(shù)得到了空前廣泛的應(yīng)用,使用藍(lán)牙的產(chǎn)品非常多,如手機(jī)、電腦、汽車、游戲設(shè)備和醫(yī)療設(shè)備等[5]。在我國,手機(jī)的普及率已經(jīng)很高,通過移動(dòng)設(shè)備實(shí)現(xiàn)遠(yuǎn)程控制已成為滿足人們需求的一大方向[6]。通過Android平臺(tái)控制的小車具有遠(yuǎn)程無線遙控、測距、自主避障等功能,能夠應(yīng)用于軍事偵察、排爆、救災(zāi)搶險(xiǎn)探測、工程勘探、工農(nóng)業(yè)生產(chǎn)等領(lǐng)域,完成一些僅靠人力無法完成的任務(wù),因而具有一定的實(shí)際應(yīng)用意義。
智能小車由硬件部分和應(yīng)用軟件層組成,無線遙控小車的系統(tǒng)框圖如圖1所示。設(shè)計(jì)中硬件部分以Arduino Mega 2560單片機(jī)為控制核心,結(jié)合藍(lán)牙模塊、超聲波測距模塊、電機(jī)驅(qū)動(dòng)模塊等進(jìn)行硬件電路設(shè)計(jì)。軟件部分則由單片機(jī)軟件和Android手機(jī)平臺(tái)軟件構(gòu)成,Arduino控制板通過藍(lán)牙串口與上位機(jī)Android平臺(tái)通信,接收來自上位機(jī)的指令,控制板根據(jù)接收到的指令信息選擇執(zhí)行自主避障功能或手動(dòng)控制功能,從而控制電機(jī)驅(qū)動(dòng)板工作,進(jìn)而控制電機(jī)的轉(zhuǎn)動(dòng),帶動(dòng)車輪轉(zhuǎn)動(dòng),實(shí)現(xiàn)智能小車的前進(jìn)、后退及轉(zhuǎn)向等功能。
圖1 總體設(shè)計(jì)框圖
本研究選擇六輪車作為實(shí)驗(yàn)平臺(tái),該車采用分布式六輪驅(qū)動(dòng)結(jié)構(gòu),每個(gè)電機(jī)屬于獨(dú)立模塊,電機(jī)驅(qū)動(dòng)板可以對(duì)每個(gè)電機(jī)進(jìn)行單獨(dú)控制。這種方法既能實(shí)現(xiàn)對(duì)小車的靈活控制,又可以避免電機(jī)運(yùn)轉(zhuǎn)相互之間的影響。智能小車硬件部分的設(shè)計(jì)主要包括電源、電機(jī)、舵機(jī)以及避障功能模塊等。Arduino Mega 2560控制板是整個(gè)系統(tǒng)的核心,控制電機(jī)驅(qū)動(dòng)板和避障模塊工作;電機(jī)驅(qū)動(dòng)板接收來自控制板的指令驅(qū)動(dòng)直流減速電機(jī),從而帶動(dòng)車子運(yùn)動(dòng);藍(lán)牙模塊作為Android手機(jī)平臺(tái)與Arduino之間通信的橋梁,負(fù)責(zé)將指令從上位機(jī)發(fā)送給下位機(jī);避障模塊主要由超聲波測距傳感器、舵機(jī)以及蜂鳴器組成,共同完成主動(dòng)避障及報(bào)警等功能;電源模塊是整個(gè)系統(tǒng)的動(dòng)力來源,為整個(gè)系統(tǒng)供電。為了保證足夠的電源動(dòng)力以及考慮到安全性,本次設(shè)計(jì)采用兩組18650充電鋰電池組分別給Arduino控制板和電機(jī)驅(qū)動(dòng)模塊供電。
設(shè)計(jì)首先要實(shí)現(xiàn)遠(yuǎn)程遙控小車運(yùn)動(dòng),因此整個(gè)系統(tǒng)能夠正常工作需要單片機(jī)實(shí)現(xiàn)對(duì)電機(jī)驅(qū)動(dòng)模塊的控制,同時(shí)還要實(shí)現(xiàn)單片機(jī)與Android平臺(tái)的通信功能。
考慮到單片機(jī)要實(shí)現(xiàn)以上功能,本研究采用Arduino開發(fā)板作為主控板。Arduino作為一款開源的單片機(jī)開發(fā)平臺(tái),能夠通過C語言編程實(shí)現(xiàn)簡單的開發(fā)工作和項(xiàng)目工程,上手較容易,操作較簡單。本次設(shè)計(jì)選用性價(jià)比較高的Arduino Mega 2560控制板,該控制板只需要通過USB數(shù)據(jù)線連接電腦就能實(shí)現(xiàn)供電、程序下載和數(shù)據(jù)通信,用AC-DC適配器或者電池就可以驅(qū)動(dòng),還可以通過接口在外部連接不同的傳感器,從而豐富設(shè)計(jì)和開發(fā)功能。
電機(jī)作為智能小車的驅(qū)動(dòng)裝置,其選擇合適與否對(duì)系統(tǒng)電路的正常運(yùn)行起著重要作用[7]。L298N電機(jī)驅(qū)動(dòng)板是一款接受高電壓的電機(jī)驅(qū)動(dòng)器,工作電流大,啟動(dòng)性能好,啟動(dòng)轉(zhuǎn)矩大,可以驅(qū)動(dòng)大功率的直流電機(jī)和步進(jìn)電機(jī)等。L298N可以通過輸入端接口對(duì)電機(jī)進(jìn)行直接控制,通過主控芯片的I/O輸入對(duì)其控制電平進(jìn)行設(shè)定,就可為電機(jī)進(jìn)行正轉(zhuǎn)反轉(zhuǎn)驅(qū)動(dòng),通過控制ENABLE引腳的電平高低可以實(shí)現(xiàn)PWM調(diào)速,滿足小車運(yùn)行的速度快慢要求。L298N模塊操作簡單、穩(wěn)定性好、驅(qū)動(dòng)能力強(qiáng)、可靠性高,可以滿足本次設(shè)計(jì)的要求。
通信模塊選用HC-05藍(lán)牙模塊。HC-05是一款性能較好的主從一體藍(lán)牙串口模塊,能夠?qū)崿F(xiàn)透明傳輸。當(dāng)模塊處于命令響應(yīng)模式,即AT模式時(shí),用戶可以向模塊發(fā)送各種AT指令,為模塊設(shè)定控制參數(shù)或發(fā)布控制命令,實(shí)現(xiàn)本設(shè)計(jì)通過藍(lán)牙通信手動(dòng)控制小車的效果。
避障模塊主要由超聲波測距傳感器、舵機(jī)以及蜂鳴器組成。超聲波測距的原理是通過測量超聲波從發(fā)射出去到反射回來之間的時(shí)間差,結(jié)合超聲波的傳播速度來計(jì)算發(fā)射點(diǎn)與障礙物的實(shí)際距離。本次設(shè)計(jì)選用的是HC-SR04超聲波測距傳感器,它由超聲波發(fā)射器、超聲波接收器以及控制電路組成,該模塊可提供2 cm~400 cm的非接觸式距離感測功能,測距精度可達(dá)3 mm[8],測量角度為15°,檢測范圍大、測距距離精確、盲區(qū)小、性能穩(wěn)定,常用于機(jī)器人避障、公共安防及停車場監(jiān)測等場景,能夠滿足設(shè)計(jì)要求。舵機(jī)根據(jù)控制板的指令帶動(dòng)超聲波傳感器進(jìn)行0~180°范圍內(nèi)的重復(fù)搖擺運(yùn)動(dòng),可以擴(kuò)大超聲波傳感器的監(jiān)測范圍,提高避障的精準(zhǔn)度。蜂鳴器模塊則是起到報(bào)警作用,當(dāng)超聲波傳感器監(jiān)測到前方障礙物距離小于30 cm時(shí),便將其信號(hào)引腳置于低電平狀態(tài),蜂鳴器就會(huì)發(fā)出警報(bào)聲,直到小車與障礙物之間處于安全距離。
在系統(tǒng)核心模塊的控制過程中,藍(lán)牙模塊接收Android平臺(tái)發(fā)送的控制命令,并將控制命令通過串口傳輸給單片機(jī),單片機(jī)對(duì)收到的指令進(jìn)行分析并作出響應(yīng)。
下位機(jī)工作流程如圖2所示。手機(jī)通過藍(lán)牙發(fā)送自主避障指令給下位機(jī)時(shí),自主避障程序開始執(zhí)行,避障模塊開始工作,完成測距功能并通過單片機(jī)控制實(shí)現(xiàn)報(bào)警和避障功能;收到手動(dòng)控制指令時(shí),單片機(jī)控制電機(jī)的運(yùn)行方向與速度,從而控制小車實(shí)現(xiàn)前進(jìn)、后退、轉(zhuǎn)向及調(diào)速等功能。
圖2 下位機(jī)流程圖
避障功能主要由超聲波測距傳感器實(shí)現(xiàn)。超聲波是指頻率高于20 kHz的聲波,因其在介質(zhì)中傳播時(shí)遇到不同的界面將產(chǎn)生反射、繞射、折射的原理而被廣泛應(yīng)用于各行各業(yè)。超聲波測距模塊HC-SR04的兩個(gè)引腳觸發(fā)控制端Trig和接收端Echo能夠?qū)崿F(xiàn)測距功能??刂贫薚rig用來控制發(fā)出的超聲波信號(hào),接收端Echo用來接收反射回來的超聲波信號(hào)。接收到返回信號(hào)后I/O口就會(huì)輸出一個(gè)高電平,模塊與前方障礙物的距離 =(高電平時(shí)間*聲速(340 m/s))/2。
避障程序流程如下所述:系統(tǒng)上電后,調(diào)用初始化函數(shù)對(duì)各個(gè)部件進(jìn)行初始化設(shè)置,然后進(jìn)入一個(gè)循環(huán)。首先調(diào)用超聲波測距函數(shù)對(duì)前方的障礙物進(jìn)行測距,當(dāng)檢測到小車與前方障礙物小于安全距離(即前文提到的30 cm)時(shí),蜂鳴器發(fā)出警報(bào)。小車通過電機(jī)的速度調(diào)節(jié)及轉(zhuǎn)向避過障礙物,當(dāng)前方開闊后繼續(xù)按照之前的速度前進(jìn)。為了實(shí)現(xiàn)更加精準(zhǔn)的避障功能,本研究使用一個(gè)舵機(jī)將HC-SR04模塊安裝在小車的車頭,舵機(jī)可以左右搖頭帶動(dòng)超聲波模塊運(yùn)動(dòng),以此實(shí)現(xiàn)更大范圍的測距,從而實(shí)現(xiàn)小車更加精確的避障功能??刂瓢迨盏缴衔粰C(jī)自主避障的指令后,舵機(jī)、超聲波傳感器和蜂鳴器分別執(zhí)行各自的程序,共同完成避障任務(wù)。
Arduino控制板與藍(lán)牙模塊之間通過串口通信[9],故串口通信在Arduino系統(tǒng)中具有十分重要的地位。Arduino單片機(jī)與藍(lán)牙模塊之間的通信是通過單片機(jī)的UART端口來實(shí)現(xiàn)的。首次使用藍(lán)牙模塊時(shí),要將其初始化,然后使其處于命令響應(yīng)工作模式,使用USB-TTL模塊將藍(lán)牙模塊與電腦連接并利用AT命令對(duì)其進(jìn)行參數(shù)設(shè)置。利用電腦端藍(lán)牙串口助手對(duì)HC-05進(jìn)行參數(shù)設(shè)置,步驟如下。
1)發(fā)送AT,返回OK,表示執(zhí)行AT指令正常,進(jìn)入命令響應(yīng)模式;
2)發(fā)送AT+UART=9600,設(shè)置波特率為9 600,停止位1位,無校驗(yàn)位;
3)發(fā)送AT+NAME=HAHAHA,配置藍(lán)牙模塊名稱為HAHAHA;
4)發(fā)送AT+PSWD=1234,設(shè)置藍(lán)牙連接密碼為1234,防止被其他人誤連。
手機(jī)端藍(lán)牙APP操作界面如圖3所示。圖中下方顯示已經(jīng)連接HAHAHA,也就是HC-05藍(lán)牙模塊。從手機(jī)界面中可以看出智能小車總共設(shè)計(jì)了5種運(yùn)行模式,包括自主避障和手動(dòng)控制的四種運(yùn)動(dòng)方式,每種模式的按鈕對(duì)應(yīng)Arduino程序中不同的字符。當(dāng)主控板接收到藍(lán)牙模塊傳輸?shù)淖址淖儠r(shí),車子的行駛方式就會(huì)切換對(duì)應(yīng)的模式。
圖3 手機(jī)端藍(lán)牙APP操作界面
智能汽車系統(tǒng)中的電機(jī)是動(dòng)力源,直流電機(jī)運(yùn)行電流較大、干擾較多,小車采用調(diào)壓控制電機(jī)運(yùn)行速度,因此選擇高效、可靠、可控的驅(qū)動(dòng)電路及方式至關(guān)重要[10]。與當(dāng)前常用的直流電機(jī)控制方式類似,本研究采用L298N電機(jī)驅(qū)動(dòng)板和PWM調(diào)速來控制直流減速電機(jī)。當(dāng)使能端ENA/ENB處于高電平時(shí),可以通過改變輸入引腳IN1~I(xiàn)N4的電平來控制電機(jī)的運(yùn)動(dòng)狀態(tài),調(diào)速就是改變PWM脈沖高電平的占空比,電機(jī)的轉(zhuǎn)速就會(huì)改變,小車運(yùn)行速度也會(huì)隨之改變;占空比越大,小車運(yùn)行速度越快,反之越慢。
完成所有模塊的設(shè)計(jì)與調(diào)試后,將所有硬件搭建起來組裝成一個(gè)六輪車實(shí)驗(yàn)平臺(tái),如圖4所示。接著完成整個(gè)系統(tǒng)電路的連接以及單片機(jī)程序的上傳。將系統(tǒng)上電,各模塊初始化,打開手機(jī)端APP,與藍(lán)牙模塊連接。依次點(diǎn)擊手機(jī)藍(lán)牙APP操作界面上的前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)等按鍵,六輪車可以完成相應(yīng)的動(dòng)作,點(diǎn)擊“自主”按鍵,小車開始自主運(yùn)行并在遇到障礙物時(shí)通過蜂鳴器發(fā)出警報(bào),小車改變運(yùn)行方向及速度直到完全避開障礙物。實(shí)驗(yàn)表明,本方案可以通過手機(jī)端的無線遙控對(duì)智能小車進(jìn)行控制并且能夠?qū)崿F(xiàn)自主避障,證明了本設(shè)計(jì)的可行性。
圖4 智能車實(shí)驗(yàn)平臺(tái)
本研究基于Arduino智能小車系統(tǒng)實(shí)現(xiàn)了Android手機(jī)端遙控行駛功能及自主避障功能,實(shí)現(xiàn)小車根據(jù)遠(yuǎn)程指令,執(zhí)行前進(jìn)、后退和轉(zhuǎn)向等動(dòng)作。此種智能小車還可用于環(huán)境探測等多種用途,降低人們的工作危險(xiǎn)系數(shù),解決惡劣環(huán)境下的勘探需求,具有一定的實(shí)用價(jià)值。本設(shè)計(jì)還存在許多不足之處,例如藍(lán)牙模塊通信距離有限、小車對(duì)環(huán)境感知不夠全面以及避障功能不夠完善等,日后還需不斷改進(jìn)和完善,以在更廣闊的地方發(fā)揮其更大的作用。