避障小車是一種智能設備,可以自動感知前方的障礙物,并通過朝另一個方向轉動來避開障礙物。該設計允許小車通過避免碰撞在未知環境中導航,這是任何自主移動小車的主要要求。避障小車的應用不受限制,現在大多數軍事組織都使用它,這有助于執行許多士兵無法完成的危險工作。
在本篇文章中,我們將使用Arduino和超聲波傳感器制作一個避障小車。這里,超聲波傳感器用于通過計算機器人和障礙物之間的距離來感測路徑中的障礙物。如果機器人發現任何障礙物,它會改變方向并繼續移動。
超聲波傳感器如何用于避免障礙物
在制作之前,了解超聲波傳感器的工作原理非常重要,因為這種傳感器在檢測障礙物方面起著重要作用。超聲波傳感器工作的基本原理是記錄傳感器在撞擊表面后傳輸超聲波束和接收超聲波束所需的時間。然后使用該公式計算距離。在本文中,使用了廣泛使用的HC-SR04超聲波傳感器。
因此,HC-SR04的Trig引腳高至少10 us。聲波束以8個40KHz的脈沖傳輸。
然后信號撞擊表面并返回并由HC-SR04的接收器Echo引腳捕獲。 Echo引腳在發送高電平時為高電平。
光束返回所用的時間保存在變量中,并使用如下所示的適當計算轉換為距離
距離=(時間x空氣中聲音的速度(343 m / s))/ 2
可輕松找到避免機器人的障礙物的組件。為了搭建底盤,可以使用任何玩具底盤或者可以定制。
需要的組件
● Arduino NANO或Uno開發板
● HC-SR04超聲波傳感器
● LM298N電機驅動器模塊
● 5V直流電動機
● 電池
● 車輪
● 機殼
● 跳線
電路原理圖
避障小車的Arduino編程
在本文末尾處將給出了完整程序。該程序將包括設置HC-SR04模塊并將信號輸出到電機引腳以相應地移動電機方向。此項目中不會使用任何庫。
首先在程序中定義HC-SR04的TRIG和ECHO引腳。在本文中,trig引腳連接到GPIO9,echo引腳連接到Arduino NANO的GPIO10。
int trigPin = 9; // trig pin of HC-SR04
int echoPin = 10; // Echo pin of HC-SR04
定義用于輸入LM298N電機驅動器模塊的引腳。 LM298N有4個數據輸入引腳,用于控制連接到它的電機方向。
int revleft4 = 4; //REVerse motion of Left motor
int fwdleft5 = 5; //ForWarD motion of Left motor
int revright6 = 6; //REVerse motion of Right motor
int fwdright7 = 7; //ForWarD motion of Right motor
LM298N電機驅動器模塊
在setup()函數中,定義使用的GPIO引腳的數據方向。四個電機引腳和Trig引腳設置為輸出,Echo引腳設置為輸入。
pinMode(revleft4, OUTPUT); // set Motor pins as output
pinMode(fwdleft5, OUTPUT);
pinMode(revright6, OUTPUT);
pinMode(fwdright7, OUTPUT);
pinMode(trigPin, OUTPUT); // set trig pin as output
pinMode(echoPin, INPUT); //set echo pin as input to capture reflected waves
在loop()函數中,從HC-SR04獲取距離并根據距離移動電機方向。距離將顯示機器人前方的物體距離。通過將超聲波束發射至10 us并在10us后接收來獲取距離。
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH); // send waves for 10 us
delayMicroseconds(10);
duration = pulseIn(echoPin, HIGH); // receive reflected waves
distance = duration / 58.2; // convert to distance
delay(10);
如果距離大于定義的距離意味著其路徑中沒有障礙物并且它將向前移動。
if (distance > 19)
{
digitalWrite(fwdright7, HIGH); // move forward
digitalWrite(revright6, LOW);
digitalWrite(fwdleft5, HIGH);
digitalWrite(revleft4, LOW);
}
如果距離小于規定的距離以避開障礙物意味著前方存在一些障礙物。因此,在這種情況下,機器人將停止一段時間并在此之后向后移動再次停止一段時間,然后轉向另一個方向。
if (distance < 18)
{
digitalWrite(fwdright7, LOW);//Stop
digitalWrite(revright6, LOW);
digitalWrite(fwdleft5, LOW);
digitalWrite(revleft4, LOW);
delay(500);
digitalWrite(fwdright7, LOW); //movebackword
digitalWrite(revright6, HIGH);
digitalWrite(fwdleft5, LOW);
digitalWrite(revleft4, HIGH);
delay(500);
digitalWrite(fwdright7, LOW);//Stop
digitalWrite(revright6, LOW);
digitalWrite(fwdleft5, LOW);
digitalWrite(revleft4, LOW);
delay(100);
digitalWrite(fwdright7, HIGH);
digitalWrite(revright6, LOW);
digitalWrite(revleft4, LOW);
digitalWrite(fwdleft5, LOW);
delay(500);
}
編輯:hfy
-
機器人
+關注
關注
213文章
29555瀏覽量
211904 -
超聲波傳感器
+關注
關注
18文章
602瀏覽量
36733 -
Arduino
+關注
關注
189文章
6493瀏覽量
190283
發布評論請先 登錄
評論