基于Arduino/Android的小車藍(lán)牙控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
2017-03-05
作者:徐鵬1,梁曼2,魏萍1,張海玲1
來源:2017年微型機(jī)與應(yīng)用第4期
徐鵬1,梁曼2,魏萍1,張海玲1
?。?.浙江國際海運(yùn)職業(yè)技術(shù)學(xué)院 船舶工程學(xué)院,浙江 舟山 316021;2.浙江工業(yè)大學(xué) 特種裝備制造與先進(jìn)加工技術(shù)教育部重點(diǎn)實(shí)驗(yàn)室,浙江 杭州 310014)
摘要:以Arduino單片機(jī)的硬件平臺(tái)為核心控制器,結(jié)合Eclipse開發(fā)環(huán)境和Arduino IDE編程語言完成小車的主控程序,通過Android手機(jī)藍(lán)牙客戶端與藍(lán)牙模塊服務(wù)端的通信實(shí)現(xiàn)小車的智能策略控制。小車整體采用前橋驅(qū)動(dòng)、后輪轉(zhuǎn)向的布局方式,兩輪各用一個(gè)直流電機(jī)配合齒輪減速機(jī)構(gòu)實(shí)現(xiàn)運(yùn)作。實(shí)驗(yàn)表明:該控制系統(tǒng)實(shí)現(xiàn)了基于Android手機(jī)的藍(lán)牙控制小車的運(yùn)行功能,實(shí)現(xiàn)小車的前進(jìn)、后退和轉(zhuǎn)彎等多種運(yùn)動(dòng)形態(tài)。該控制系統(tǒng)結(jié)構(gòu)簡單、操作方便,為新型智能控制系統(tǒng)的設(shè)計(jì)提供了參考依據(jù)。
關(guān)鍵詞:Arduino;Android;藍(lán)牙;智能小車
中圖分類號(hào):TN242.6文獻(xiàn)標(biāo)識(shí)碼:ADOI: 10.19358/j.issn.1674-7720.2017.04.029
引用格式:徐鵬,梁曼,魏萍,等.基于Arduino/Android藍(lán)牙控制小車系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2017,36(4):96-98,102.
0引言
*基金項(xiàng)目:浙江省高等教育課堂教學(xué)改革項(xiàng)目(kg2015939);浙江國際海運(yùn)職業(yè)技術(shù)學(xué)院2016訪問工程師校企項(xiàng)目Arduino作為新興的開源電子設(shè)計(jì)平臺(tái),注重程序的邏輯結(jié)構(gòu),忽略底層函數(shù)的具體設(shè)計(jì),大大降低了編程難度,因此常用作機(jī)器人的主控芯片[12]。此外,Arduino中的Atmega328AU處理芯片具有強(qiáng)大的數(shù)據(jù)處理功能,處理速度和各項(xiàng)性能均優(yōu)于傳統(tǒng)的51芯片,本設(shè)計(jì)基于Android操作系統(tǒng)的開源性和可操作性,利用無線技術(shù)控制小車運(yùn)行[34]。藍(lán)牙作為一種抗干擾能力強(qiáng)、功耗低的無線互連技術(shù),比其他無線控制技術(shù),如紅外、射頻等應(yīng)用范圍更廣,在局域范圍控制中具有一定的優(yōu)勢[56]。因此,本文以Android手機(jī)作為終端,通過藍(lán)牙串口傳輸指令,實(shí)現(xiàn)小車的智能策略控制[78]。
1系統(tǒng)設(shè)計(jì)方案
以Arduino單片機(jī)為核心,通過Android手機(jī)中的藍(lán)牙串口助手發(fā)送指令至藍(lán)牙模塊進(jìn)行存儲(chǔ)分析,實(shí)現(xiàn)小車的前進(jìn)、后退、左旋、右旋、左轉(zhuǎn)、右轉(zhuǎn)、停止等功能。首先在硬件通電的瞬間實(shí)現(xiàn)硬件的初始化,包括HC06藍(lán)牙模塊的設(shè)置連接及電機(jī)通電待命狀態(tài)。初始化完成后,通過Android手機(jī)中的藍(lán)牙串口助手進(jìn)行指令的發(fā)送,Arduino處理器實(shí)時(shí)對(duì)HC06藍(lán)牙模塊端口進(jìn)行數(shù)據(jù)讀取和分析,收到信號(hào)立即進(jìn)行處理,再通過L296N電機(jī)驅(qū)動(dòng)模塊實(shí)現(xiàn)小車的運(yùn)行功能,控制流程如圖1所示。
2系統(tǒng)硬件電路設(shè)計(jì)
整個(gè)硬件系統(tǒng)分為3個(gè)子模塊:Arduino主控模塊、H橋控制的電機(jī)驅(qū)動(dòng)模塊和HC06藍(lán)牙模塊。主控模塊采用以Atmega328AU處理芯片為內(nèi)核的芯片,是整個(gè)系統(tǒng)的智能控制部分,進(jìn)行信息數(shù)據(jù)的分析和處理;電機(jī)驅(qū)動(dòng)模塊主要采用L298N驅(qū)動(dòng)模式,實(shí)現(xiàn)對(duì)電機(jī)的控制;藍(lán)牙模塊負(fù)責(zé)接收相應(yīng)的指令控制驅(qū)動(dòng)電機(jī)模塊轉(zhuǎn)動(dòng),從而實(shí)現(xiàn)無線控制功能。
2.1Arduino硬件開發(fā)板
Arduino單片機(jī)是一塊基于開放源代碼的USB接口板,微處理器采用Atmega328AU,性價(jià)比高,同時(shí)具有類似Java、C語言的IDE開發(fā)環(huán)境硬件庫,可根據(jù)外圍硬件進(jìn)行庫的二次開發(fā),方便與各種電子組件的連接[910]。外圍引腳包括數(shù)字I/O(D0-D13)、模擬I/O(A0-A5)、7個(gè)PWM,并且支持外部供電與USB供電自動(dòng)切換。
2.2電機(jī)驅(qū)動(dòng)模塊
L298N電機(jī)驅(qū)動(dòng)模塊主要包括由8個(gè)二極管組成的兩組電機(jī)控制接口端(P1,P2),其內(nèi)部是4通道邏輯驅(qū)動(dòng)電路,用于接收來自Arduino芯片的驅(qū)動(dòng)控制信息和對(duì)兩個(gè)電機(jī)的控制信息。電路中8個(gè)二極管的作用是為產(chǎn)生的反向電流提供泄放路徑,避免電流過大燒毀驅(qū)動(dòng)芯片。小車的左右輪兩組電機(jī)分別與電機(jī)控制接口端相連接,構(gòu)成小車的運(yùn)動(dòng)控制系統(tǒng)。電機(jī)控制系統(tǒng)中采用線圈式電機(jī),防止電機(jī)從一種運(yùn)行狀態(tài)切換到另一種運(yùn)行狀態(tài)時(shí)形成的反向電流燒毀電機(jī)。電機(jī)驅(qū)動(dòng)模塊電路設(shè)計(jì)如圖2所示。
2.3HC-06藍(lán)牙模塊
藍(lán)牙模塊用于連接Android手機(jī)和小車,實(shí)現(xiàn)數(shù)據(jù)的傳輸。藍(lán)牙模塊分為主機(jī)模塊和從機(jī)模塊,主機(jī)能夠與從機(jī)配對(duì)通信,從機(jī)與從機(jī)之間或主機(jī)與主機(jī)之間不能通信,在本項(xiàng)目中,藍(lán)牙模塊主要功能是接收從手機(jī)端發(fā)送過來的指令,實(shí)現(xiàn)單一方向的通信,因此選擇從機(jī)HC-06模塊[1112]。藍(lán)牙數(shù)據(jù)傳輸流程如圖3所示。
首先將藍(lán)牙模塊連接到PC上,完成與手機(jī)的配對(duì),再將藍(lán)牙模塊連接到Arduino控制板的藍(lán)牙模塊接口。連接方式:藍(lán)牙模塊的VCC接Arduino的3.3 V;GND接Arduino的GND;藍(lán)牙模塊的接收端RXD接Arduino的發(fā)送端TX,因?yàn)锳rduino主控器只發(fā)送命令無需接收信號(hào),所以藍(lán)牙模塊的發(fā)送端TXD和Arduino的接收端RX無需連接,再根據(jù)相應(yīng)的IDE程序完成Android手機(jī)與Arduino控制器的連接,硬件連接如圖4所示。
3系統(tǒng)軟件設(shè)計(jì)
小車控制系統(tǒng)的軟件設(shè)計(jì)包括上位機(jī)和下位機(jī)軟件的編寫和測試。在上位機(jī)軟件設(shè)計(jì)中,選用Eclipse作為開發(fā)工具,設(shè)計(jì)了客戶端軟件,用Java語言開發(fā)客戶端的控制程序。為簡潔、快速地實(shí)現(xiàn)程序功能,本程序沒有對(duì)軟件界面做美化設(shè)計(jì)。在程序操作過程中,首先連接智能小車和HC06藍(lán)牙模塊,點(diǎn)擊界面中的“查找設(shè)備”,程序就會(huì)列出周圍已開啟的藍(lán)牙設(shè)備,如圖5(a)所示,選擇屬于小車的藍(lán)牙設(shè)備即可自動(dòng)連接上,控制小車運(yùn)行的9個(gè)按鈕和圖形顯示如圖5(b)所示。
下位機(jī)軟件設(shè)計(jì),即Arduino主控模塊上串口通信程序的設(shè)計(jì),采用模塊化結(jié)構(gòu),由主程序﹑左轉(zhuǎn)子程序、右轉(zhuǎn)子程序﹑前進(jìn)子程序、后退子程序等構(gòu)成。Arduino單片機(jī)的串行口通過訪問特殊功能寄存器SBUF實(shí)現(xiàn)接收緩沖器和發(fā)送緩沖器的訪問,并且可以同時(shí)接收和發(fā)送數(shù)據(jù)。串行口的控制主要包括對(duì)狀態(tài)控制寄存器SCON、控制寄存器PCON和串行數(shù)據(jù)寄存器SBUF的設(shè)置。Arduino對(duì)于常用的串行口已有完整的集成庫,管腳進(jìn)行配置只需調(diào)用相應(yīng)的子函數(shù),如pinMode(pin,mode),pin為用戶欲配置的管腳編號(hào),mode為配置模式(INPUT表示配置為輸入管腳,OUTPUT表示配置為輸出管腳)。基于Arduino開發(fā)環(huán)境下的部分IDE程序代碼如下。圖4藍(lán)牙模塊的硬件連接圖圖5藍(lán)牙客戶端與硬件模塊連接界面
void forward( );//小車前進(jìn)
void back( ); //小車后退
void turnLeft( ); //小車左轉(zhuǎn)
void turnRight( ); //小車右轉(zhuǎn)
void car_up( ); //小車加速
void car_down( ); //小車減速
void turnLeftOrigin( ); //小車左旋
void turnRightOrigin( ); //小車右旋
void _stop();//小車停止
void setup();
{pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
Serial.begin(9600);}
void loop()
{…..}
4控制系統(tǒng)測試
4.1驅(qū)動(dòng)電機(jī)測試
小車的系統(tǒng)設(shè)計(jì)要求Android手機(jī)能正確控制小車的轉(zhuǎn)向、前進(jìn)、后退和停止等功能。為檢測系統(tǒng)能否達(dá)到設(shè)計(jì)要求,對(duì)系統(tǒng)進(jìn)行功能和性能測試。本文中用Arduino單片機(jī)的4、5、6、7引腳的高低電平來控制小車的啟停和轉(zhuǎn)向。ENA和ENB是電機(jī)1和電機(jī)2的使能引腳,IN1和IN2引腳控制電機(jī)1,IN3和IN4引腳控制電機(jī)2。以前驅(qū)左輪電機(jī)1為例,真值表如表1所示。
4.2藍(lán)牙通信距離的測試
藍(lán)牙作為一種抗干擾能力強(qiáng)、功耗低的無線技術(shù)使用較為普遍,但同時(shí)藍(lán)牙模塊的低功率和高頻率限制了其應(yīng)用范圍,故對(duì)該系統(tǒng)的通信質(zhì)量進(jìn)行測試,測試地點(diǎn)選擇教學(xué)樓內(nèi)和空曠的平地,經(jīng)測試確定無線藍(lán)牙能在約9 m的范圍內(nèi)有效控制。
5結(jié)論
本設(shè)計(jì)以Arduino單片機(jī)為核心控制,通過HC06藍(lán)牙模塊實(shí)現(xiàn)小車和主控制器的通信,完成小車多種運(yùn)動(dòng)形態(tài),實(shí)現(xiàn)小車智能策略控制。實(shí)驗(yàn)表明,本控制系統(tǒng)能夠?qū)崿F(xiàn)小車前進(jìn)、停止、左旋、右旋等功能,達(dá)到預(yù)期設(shè)計(jì)效果。但藍(lán)牙控制范圍有限,為擴(kuò)大其應(yīng)用范圍,考慮引進(jìn)蜂窩的網(wǎng)路架構(gòu)或者通過增大發(fā)射功率等措施來擴(kuò)大覆蓋半徑。
參考文獻(xiàn)
[1] 紀(jì)欣然.基于Arduino開發(fā)環(huán)境的智能尋光小車設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2012,35(15):161-163.
[2] 朱丹峰,葛主冉,林曉雷.基于Android平臺(tái)的無線遙控智能小車[J].電子器件,2013,36(3):408-412.
?。?] 王洪斌,李程,王躍靈,等.基于Arduino和藍(lán)牙技術(shù)的六足機(jī)器人控制系統(tǒng)設(shè)計(jì)[J].黑龍江大學(xué)自然科學(xué)學(xué)報(bào),2015,32(4):533-537.
?。?] 李建高,李樹明. 基于藍(lán)牙與智能手機(jī)的遠(yuǎn)程信息采集與控制系統(tǒng)[J]. 微型機(jī)與應(yīng)用,2012, 31(17):92-94.
?。?] 紀(jì)欣然.基于Arduino開發(fā)環(huán)境的智能尋光小車設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2012,35(15):161-163.
?。?] 卞云松.基于Arduino單片機(jī)的避障小車機(jī)器人[J].自動(dòng)化技術(shù)與應(yīng)用,2014,33(1):16-19.
[7] 戈惠梅,徐曉慧,顧志華,等.基于Arduino的智能小車避障系統(tǒng)的設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2014,37(11):118-120.
?。?] 趙新穎,羅坤.基于80C51控制的智能電動(dòng)小車系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2011,30(22):85-87.
?。?] 江燕良.基于Android智能終端的遠(yuǎn)程控制系統(tǒng)[J].電子技術(shù)應(yīng)用,2012,38(8):129-132