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