相關知識
常見的避障方式:
接觸式:通過觸碰開關來進行判斷,經常應用在掃地機器人的擋板上。
非接觸式:使用接近傳感器實現功能,在沒有物理接觸的情況下檢測物體的運動/存在并將捕獲的信息傳遞為電信號的傳感器。在避障小車的應用上,我們通常使用紅外接近傳感器或者超聲波傳感器。
超聲波原理: 本節課我們主要使用超聲波傳感器來實現避障功能,這里針對超聲波的原理再復習一下。
車輛避障功能設計模型:
電路搭建
所需材料
ArduinoUNO * 1
前兩節課的車輛結構 * 1
超聲波模塊 *1
杜邦線若干
電路接線
程序編寫
練習一:右轉避障
小車在前行的過程中,20cm以內有障礙物,小車能自動右轉避開,效果如下:
圖形化方式:
具體右轉時間可以根據實際情況進行調整。
代碼方式:
/* 項目名稱:右轉避障車
* 項目時間:2022.04.02
* 項目作者:MRX
*/
int IN1 = 2; // IN1 connected to pin 4
int IN2 = 4;
int ENA = 3;
int IN3 = 6; // IN3 connected to pin 6
int IN4 = 7;
int ENB = 5;
int value = 255; // the duty cycle
const int TrigPin = 12;//設置2號數字引腳為觸發引腳
const int EchoPin = 13;//設置3號數字引腳為接收引腳
int distance = 0;
void Forward() {
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA,value);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
analogWrite(ENB,value);
}
void Back() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
analogWrite(ENA,value);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,value);
}
void Right() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
analogWrite(ENA,value);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,0);
}
void Left() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
analogWrite(ENA,0);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,value);
}
void Stop() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
analogWrite(ENA,0);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
analogWrite(ENB,0);
}
void setup(){
Serial.begin(9600);
for (int i = 4;i <= 10;i++){
pinMode(i, OUTPUT);
}
pinMode(TrigPin,OUTPUT);//12號腳為輸出引腳
pinMode(EchoPin,INPUT);//13號腳為輸入狀態
}
void loop(){
digitalWrite(TrigPin,LOW);//先設置為低電平
delayMicroseconds(2);//持續2微秒
digitalWrite(TrigPin,HIGH);//設置為高電平
delayMicroseconds(10);//持續10微秒
digitalWrite(TrigPin,LOW);//再設置為低電平,這樣模擬出了脈沖信號
distance = pulseIn(EchoPin,HIGH)/58;//返回的是脈沖寬度/58得到實際距離
if (distance <= 20) {
Right();
delay(1000);
} else {
Forward();
}
}
練習二: 車輛自主避障
在前行的過程中,20cm以內有障礙物,小車自動繞開障礙物,然后繼續前行,效果如下:
圖形化方式:
延時時間數據需根據實際情況調試獲得。
代碼方式:
/* 項目名稱:自動避障車
* 項目時間:2022.04.02
* 項目作者:MRX
*/
int IN1 = 2; // IN1 connected to pin 4
int IN2 = 4;
int ENA = 3;
int IN3 = 6; // IN3 connected to pin 6
int IN4 = 7;
int ENB = 5;
int value = 255; // the duty cycle
const int TrigPin = 12;//設置2號數字引腳為觸發引腳
const int EchoPin = 13;//設置3號數字引腳為接收引腳
int distance = 0;
int flag = 1;
void Forward() {
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA,value);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
analogWrite(ENB,value);
}
void Back() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
analogWrite(ENA,value);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,value);
}
void Right() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
analogWrite(ENA,value);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,0);
}
void Left() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
analogWrite(ENA,0);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,value);
}
void Stop() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
analogWrite(ENA,0);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
analogWrite(ENB,0);
}
void setup(){
Serial.begin(9600);
for (int i = 4;i <= 10;i++){
pinMode(i, OUTPUT);
}
pinMode(TrigPin,OUTPUT);//12號腳為輸出引腳
pinMode(EchoPin,INPUT);//13號腳為輸入狀態
}
void loop(){
digitalWrite(TrigPin,LOW);//先設置為低電平
delayMicroseconds(2);//持續2微秒
digitalWrite(TrigPin,HIGH);//設置為高電平
delayMicroseconds(10);//持續10微秒
digitalWrite(TrigPin,LOW);//再設置為低電平,這樣模擬出了脈沖信號
distance = pulseIn(EchoPin,HIGH)/58;//返回的是脈沖寬度/58得到實際距離
if (distance <= 20) {
if (flag == 1) {
Right();
delay(500);
flag = flag + 1;
} else if (flag == 2) {
Left();
delay(500);
Forward();
delay(500);
Stop();
while(true);
}
} else {
Forward();
}
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
機器人
+關注
關注
210文章
28231瀏覽量
206614 -
電信號
+關注
關注
1文章
795瀏覽量
20542 -
超聲波傳感器
+關注
關注
18文章
578瀏覽量
35904 -
避障小車
+關注
關注
1文章
24瀏覽量
19017 -
Arduino
+關注
關注
187文章
6464瀏覽量
186676
發布評論請先 登錄
相關推薦
請問循跡避障當中的四路循跡模塊與紅外尋光&避障模塊有什么區別?
`本人在做arduino尋光避障小車,其中用到的兩個模塊——四路循跡與紅外尋光&避障模塊在網上查完后感覺都是通過一個紅外發送器發送信
發表于 02-01 10:53
基于Arduino單片機的避障小車機器人
本文簡要介紹了一種基于Arduino新型集成開發環境的超聲波避障小車的工作原理,包括對小車的結構、傳感器、執行元件、Arduino單片機軟件編程及試驗結果的介紹。
發表于 11-29 15:50
?14次下載
基于Arduino UNO的避障機器人
本方案是一個基于 Arduino UNO 的避障機器人。障礙物檢測和避免可以被認為是設計移動機器人的核心問題。避障機器人是一種智能機器人,可
發表于 12-22 14:49
?1次下載
評論