李云飛 肖江 彭浩東 胡申輝 劉泓杏
摘要:近年來,機(jī)器人逐步的進(jìn)入了人們的視線,而針對機(jī)器人的循跡避障問題,采用的是一種基于Arduino單片機(jī)的循跡避障系統(tǒng)。該系統(tǒng)主要是通過Arduino單片機(jī)為核心,通過光電傳感器來實(shí)現(xiàn)循跡功能、超聲波模塊實(shí)現(xiàn)自動避障功能,電機(jī)驅(qū)動模塊來控制電機(jī)的驅(qū)動,從而到達(dá)小車的循跡避障功能。該系統(tǒng)穩(wěn)定性好,能夠很好地應(yīng)用于機(jī)器人運(yùn)輸?shù)阮I(lǐng)域,具有很好地實(shí)用價(jià)值。
關(guān)鍵詞:Arduino 尋跡 避障
一、硬件和軟件設(shè)計(jì)
1、硬件系統(tǒng)
該智能小車總體上可以分為:電源模塊、光電傳感器模塊、超聲波模塊、Arduino模塊和直流電機(jī)驅(qū)動模塊。該小車可以實(shí)現(xiàn)循跡和自動避障功能。主要是以Arduino UNO開發(fā)板為主要控制芯片,來控制超聲波模塊、光電傳感器模塊,采用直流電機(jī)為動力。
2、Arduino模塊
該設(shè)計(jì)采用的是Arduino開發(fā)板,Arduino是一款便捷,靈活,易于上手的開源電子平臺。包含硬件和軟件。它構(gòu)建與原始碼simple I/O介面版。具有類似于C,C++的開發(fā)環(huán)境。硬件部分是用來做電路連接的Arduino開發(fā)板。Arduino IDE則是計(jì)算機(jī)的程序,在其中編寫程序代碼;將程序通過USB轉(zhuǎn)接線上傳到 Arduino 開發(fā)板后,程序便會操作器實(shí)現(xiàn)想要實(shí)現(xiàn)的尋跡避障功能。
二、尋跡模塊
于通過光電傳感器實(shí)現(xiàn)此功能,光電傳感器是通過把光強(qiáng)度的變化轉(zhuǎn)變成電信號來進(jìn)行控制的。光電傳感器一般有發(fā)送器、接收器和檢測電路構(gòu)成的。而該設(shè)計(jì)采用的是紅外探測器。紅外探測器是能對外界紅外光輻射產(chǎn)生響應(yīng)的光電傳感器,是目前傳感器領(lǐng)域發(fā)展的重點(diǎn)之一。通過這種光電傳感器就能很方便進(jìn)行小車的循跡功能。我們所用到的就是在智能小車上安裝光電傳感器來進(jìn)行小車的尋跡功能從而達(dá)到實(shí)驗(yàn)?zāi)康摹?/p>
三、超聲避障模塊
對于超聲避障模塊。首先我們要進(jìn)行了解對于超聲避障主要是通過超聲波模塊,探測到物體就馬上輸出脈沖,到單片機(jī)中預(yù)處理。再通過電機(jī)驅(qū)動模塊進(jìn)行控制,從而實(shí)現(xiàn)避障功能。超聲波我們選擇的是HC-SR04超聲波傳感器,該傳感器具有低功耗的特點(diǎn),能夠適用于電池供電的設(shè)備,方便我們在此基礎(chǔ)上安裝移動電源,而且方便連接,價(jià)格也便宜。通過超聲波模塊可以判斷前方是否有障礙物,從而小車是否進(jìn)行避障,這樣就能解決小車避障的問題。
四、功能實(shí)現(xiàn)
首先定義小車的前進(jìn),左轉(zhuǎn),右轉(zhuǎn)函數(shù),再通過if判斷實(shí)現(xiàn)尋基于避障功能,避障的優(yōu)先級高于循跡。具體思路是,首先判斷前方20cm內(nèi)是否有障礙物,如果有且距離大于10cm,則調(diào)用run1函數(shù)慢速前進(jìn),而如果距離小于10cm則調(diào)用spin_left函數(shù)左轉(zhuǎn),以此實(shí)現(xiàn)避障。其次當(dāng)前方20cm無障礙物時(shí),通過光電傳感器檢測黑線,如果兩塊RPR220傳感器都檢測不到黑線,則保持前進(jìn),如果左尋跡傳感器檢測到信號,則代表小車向右偏離軌道,此時(shí)調(diào)用函數(shù)向左轉(zhuǎn)并點(diǎn)亮左led小燈提示偏離軌跡,直到信號消失,如果右尋跡傳感器檢測到信號,則代表小車向左偏離軌道,此時(shí)調(diào)用函數(shù)向右轉(zhuǎn)并點(diǎn)亮右led小燈提示偏離軌跡,直到信號消失。基于Arduino實(shí)現(xiàn)尋跡避障的功能,功能在Arduino-IDE中實(shí)現(xiàn):
void setup()
{
Serial.begin(9600);初始化電機(jī)驅(qū)動IO為輸出方式初始化超聲波引腳
pinMode(Echo,INPUT);定義超聲波輸入腳
pinMode(Trig,OUTPUT);定義超聲波輸出腳
pinMode(Left_motor_go,OUTPUT);
pinMode(Left_motor_back,OUTPUT);
pinMode(Right_motor_go,OUTPUT);
pinMode(Right_motor_back,OUTPUT);
pinMode(key,INPUT);定義按鍵接口為輸入接口
pinMode(beep,OUTPUT);
pinMode(SensorRight,INPUT);定義右循跡紅外傳感器為輸入
pinMode(SensorLeft,INPUT);定義左循跡紅外傳感器為輸入
digitalWrite(key,HIGH);
digitalWrite(beep,HIGH);
}
void Distance_test() 量出前方距離
{
digitalWrite(Trig,LOW);給觸發(fā)腳低電平
delayMicroseconds(2);
digitalWrite(Trig,HIGH);
delayMicroseconds(10);//10us
digitalWrite(Trig,LOW);持續(xù)給觸發(fā)腳低電
float Fdistance = pulseIn(Echo,HIGH);讀取高電平時(shí)間
Fdistance= Fdistance/58;
Serial.print("Distance:");輸出距離
Serial.println(Fdistance);顯示距離
Distance = Fdistance;
}
void loop()
{
while(1)
{
SR = digitalRead(SensorRight);
SL = digitalRead(SensorLeft);
Distance_test();
Serial.println( Distance);
if(Distance<=10)
{
spin_left(4);
}
else if(Distance<20&&Distance>10)
run1();
else
{
if (SL ==LOW&&SR== LOW)
run();//調(diào)用前進(jìn)函數(shù)
else if (SL == LOW & SR == HIGH)
right();
else if (SR == LOW & SL ==? HIGH)
left();
}
delay(200);
}
}
五、總結(jié)
Arduino在智能小車這方面的運(yùn)用只是這個(gè)領(lǐng)域方面的一小部分。尋跡和避障也只是一個(gè)基礎(chǔ)的功能。同時(shí)對于Arduino這一方面的前端研發(fā)還有更為強(qiáng)大的功能。我也相信通過Arduino的發(fā)展,能夠?qū)⑦@些功能實(shí)體化衍生到我們生活的各處。本文只是在Arduino的基礎(chǔ)之內(nèi),設(shè)計(jì)了一款綜合性功能的小車的應(yīng)用。旨在引起讀者對于這一領(lǐng)域的興趣。進(jìn)一步的去探索Arduino更多的功能。
參考文獻(xiàn):
[1]蔡睿妍.Arduino 的原理及應(yīng)用[J]電子設(shè)計(jì)工程,2012.20(16)155-157.
[2]趙建偉,班鈺,王義,等基于 Arduino 的智能小車的 控制系統(tǒng)設(shè)計(jì)[J].兵工自動化,2015,34(5):74-76.96.
作者簡介:李云飛(2000年— ) ,男,漢族,四川省成都市人,學(xué)生,研究方向:物聯(lián)網(wǎng)智能應(yīng)用。