避障小車是一種智能設(shè)備,可以自動(dòng)感知前方的障礙物,并通過朝另一個(gè)方向轉(zhuǎn)動(dòng)來避開障礙物。該設(shè)計(jì)允許小車通過避免碰撞在未知環(huán)境中導(dǎo)航,這是任何自主移動(dòng)小車的主要要求。避障小車的應(yīng)用不受限制,現(xiàn)在大多數(shù)軍事組織都使用它,這有助于執(zhí)行許多士兵無法完成的危險(xiǎn)工作。
在本篇文章中,我們將使用Arduino和超聲波傳感器制作一個(gè)避障小車。這里,超聲波傳感器用于通過計(jì)算機(jī)器人和障礙物之間的距離來感測(cè)路徑中的障礙物。如果機(jī)器人發(fā)現(xiàn)任何障礙物,它會(huì)改變方向并繼續(xù)移動(dòng)。
超聲波傳感器如何用于避免障礙物
在制作之前,了解超聲波傳感器的工作原理非常重要,因?yàn)檫@種傳感器在檢測(cè)障礙物方面起著重要作用。超聲波傳感器工作的基本原理是記錄傳感器在撞擊表面后傳輸超聲波束和接收超聲波束所需的時(shí)間。然后使用該公式計(jì)算距離。在本文中,使用了廣泛使用的HC-SR04超聲波傳感器。
因此,HC-SR04的Trig引腳高至少10 us。聲波束以8個(gè)40KHz的脈沖傳輸。
然后信號(hào)撞擊表面并返回并由HC-SR04的接收器Echo引腳捕獲。 Echo引腳在發(fā)送高電平時(shí)為高電平。
光束返回所用的時(shí)間保存在變量中,并使用如下所示的適當(dāng)計(jì)算轉(zhuǎn)換為距離
距離=(時(shí)間x空氣中聲音的速度(343 m / s))/ 2
可輕松找到避免機(jī)器人的障礙物的組件。為了搭建底盤,可以使用任何玩具底盤或者可以定制。
需要的組件
● Arduino NANO或Uno開發(fā)板
● HC-SR04超聲波傳感器
● LM298N電機(jī)驅(qū)動(dòng)器模塊
● 5V直流電動(dòng)機(jī)
● 電池
● 車輪
● 機(jī)殼
● 跳線
電路原理圖
避障小車的Arduino編程
在本文末尾處將給出了完整程序。該程序?qū)ㄔO(shè)置HC-SR04模塊并將信號(hào)輸出到電機(jī)引腳以相應(yīng)地移動(dòng)電機(jī)方向。此項(xiàng)目中不會(huì)使用任何庫。
首先在程序中定義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電機(jī)驅(qū)動(dòng)器模塊的引腳。 LM298N有4個(gè)數(shù)據(jù)輸入引腳,用于控制連接到它的電機(jī)方向。
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電機(jī)驅(qū)動(dòng)器模塊
在setup()函數(shù)中,定義使用的GPIO引腳的數(shù)據(jù)方向。四個(gè)電機(jī)引腳和Trig引腳設(shè)置為輸出,Echo引腳設(shè)置為輸入。
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()函數(shù)中,從HC-SR04獲取距離并根據(jù)距離移動(dòng)電機(jī)方向。距離將顯示機(jī)器人前方的物體距離。通過將超聲波束發(fā)射至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);
如果距離大于定義的距離意味著其路徑中沒有障礙物并且它將向前移動(dòng)。
if (distance > 19)
{
digitalWrite(fwdright7, HIGH); // move forward
digitalWrite(revright6, LOW);
digitalWrite(fwdleft5, HIGH);
digitalWrite(revleft4, LOW);
}
如果距離小于規(guī)定的距離以避開障礙物意味著前方存在一些障礙物。因此,在這種情況下,機(jī)器人將停止一段時(shí)間并在此之后向后移動(dòng)再次停止一段時(shí)間,然后轉(zhuǎn)向另一個(gè)方向。
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
-
機(jī)器人
+關(guān)注
關(guān)注
213文章
29748瀏覽量
212895 -
超聲波傳感器
+關(guān)注
關(guān)注
18文章
610瀏覽量
36931 -
Arduino
+關(guān)注
關(guān)注
190文章
6498瀏覽量
192185
發(fā)布評(píng)論請(qǐng)先 登錄
微型超聲波傳感器:小身軀里的探測(cè)革命,開啟智能感知新維度

英飛凌發(fā)布基于MEMS的超聲波傳感器單芯片解決方案
超聲波傳感器的工作原理與應(yīng)用
超聲波傳感器的種類原理與設(shè)計(jì)應(yīng)用的注意要點(diǎn)

倍加福發(fā)布USi-industry超聲波傳感器系統(tǒng)
安森美(onsemi)的超聲波傳感器解決方案的未來趨勢(shì)和創(chuàng)新
工業(yè)自動(dòng)化的核心:超聲波傳感器
Sonair推出用于機(jī)器人避障的3D超聲波傳感器
典型的超聲波傳感器及其應(yīng)用領(lǐng)域
超聲波傳感器是模擬還是數(shù)字
超聲波傳感器輸出的是什么信號(hào)
電應(yīng)普傳感器?|?窖井水位監(jiān)測(cè)超聲波傳感器應(yīng)用方案

超聲波傳感器的工作原理解析
第七章-V1.5 STM32超聲波測(cè)距STM32F103C8t6超聲波避障小車 超聲波避障模塊 STM32超聲波測(cè)距

評(píng)論