相關(guān)知識(shí)
常見的避障方式:
接觸式:通過觸碰開關(guān)來進(jìn)行判斷,經(jīng)常應(yīng)用在掃地機(jī)器人的擋板上。
非接觸式:使用接近傳感器實(shí)現(xiàn)功能,在沒有物理接觸的情況下檢測(cè)物體的運(yùn)動(dòng)/存在并將捕獲的信息傳遞為電信號(hào)的傳感器。在避障小車的應(yīng)用上,我們通常使用紅外接近傳感器或者超聲波傳感器。
超聲波原理: 本節(jié)課我們主要使用超聲波傳感器來實(shí)現(xiàn)避障功能,這里針對(duì)超聲波的原理再?gòu)?fù)習(xí)一下。
車輛避障功能設(shè)計(jì)模型:
電路搭建
所需材料
ArduinoUNO * 1
前兩節(jié)課的車輛結(jié)構(gòu) * 1
超聲波模塊 *1
杜邦線若干
電路接線
程序編寫
練習(xí)一:右轉(zhuǎn)避障
小車在前行的過程中,20cm以內(nèi)有障礙物,小車能自動(dòng)右轉(zhuǎn)避開,效果如下:
圖形化方式:
具體右轉(zhuǎn)時(shí)間可以根據(jù)實(shí)際情況進(jìn)行調(diào)整。
代碼方式:
/* 項(xiàng)目名稱:右轉(zhuǎn)避障車
* 項(xiàng)目時(shí)間:2022.04.02
* 項(xiàng)目作者: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;//設(shè)置2號(hào)數(shù)字引腳為觸發(fā)引腳
const int EchoPin = 13;//設(shè)置3號(hào)數(shù)字引腳為接收引腳
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號(hào)腳為輸出引腳
pinMode(EchoPin,INPUT);//13號(hào)腳為輸入狀態(tài)
}
void loop(){
digitalWrite(TrigPin,LOW);//先設(shè)置為低電平
delayMicroseconds(2);//持續(xù)2微秒
digitalWrite(TrigPin,HIGH);//設(shè)置為高電平
delayMicroseconds(10);//持續(xù)10微秒
digitalWrite(TrigPin,LOW);//再設(shè)置為低電平,這樣模擬出了脈沖信號(hào)
distance = pulseIn(EchoPin,HIGH)/58;//返回的是脈沖寬度/58得到實(shí)際距離
if (distance <= 20) {
Right();
delay(1000);
} else {
Forward();
}
}
練習(xí)二: 車輛自主避障
在前行的過程中,20cm以內(nèi)有障礙物,小車自動(dòng)繞開障礙物,然后繼續(xù)前行,效果如下:
圖形化方式:
延時(shí)時(shí)間數(shù)據(jù)需根據(jù)實(shí)際情況調(diào)試獲得。
代碼方式:
/* 項(xiàng)目名稱:自動(dòng)避障車
* 項(xiàng)目時(shí)間:2022.04.02
* 項(xiàng)目作者: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;//設(shè)置2號(hào)數(shù)字引腳為觸發(fā)引腳
const int EchoPin = 13;//設(shè)置3號(hào)數(shù)字引腳為接收引腳
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號(hào)腳為輸出引腳
pinMode(EchoPin,INPUT);//13號(hào)腳為輸入狀態(tài)
}
void loop(){
digitalWrite(TrigPin,LOW);//先設(shè)置為低電平
delayMicroseconds(2);//持續(xù)2微秒
digitalWrite(TrigPin,HIGH);//設(shè)置為高電平
delayMicroseconds(10);//持續(xù)10微秒
digitalWrite(TrigPin,LOW);//再設(shè)置為低電平,這樣模擬出了脈沖信號(hào)
distance = pulseIn(EchoPin,HIGH)/58;//返回的是脈沖寬度/58得到實(shí)際距離
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();
}
}
-
機(jī)器人
+關(guān)注
關(guān)注
213文章
29748瀏覽量
212896 -
電信號(hào)
+關(guān)注
關(guān)注
1文章
843瀏覽量
21125 -
超聲波傳感器
+關(guān)注
關(guān)注
18文章
610瀏覽量
36931 -
避障小車
+關(guān)注
關(guān)注
1文章
24瀏覽量
19247 -
Arduino
+關(guān)注
關(guān)注
190文章
6498瀏覽量
192185
發(fā)布評(píng)論請(qǐng)先 登錄
請(qǐng)問循跡避障當(dāng)中的四路循跡模塊與紅外尋光&避障模塊有什么區(qū)別?
基于51單片機(jī)的小車避障電路實(shí)現(xiàn)
基于Arduino單片機(jī)的避障小車機(jī)器人
Arduino平臺(tái)---帶舵機(jī)云臺(tái)超聲波避障實(shí)驗(yàn)資料下載
使用Arduino設(shè)計(jì)的智能小車自動(dòng)避障的接線說明

arduino nano避障機(jī)器人

如何制作與Arduino配合使用的避障機(jī)器人

使用Arduino的寵物狗機(jī)器人TOMY避障

基于Arduino的避障機(jī)器人汽車

基于Arduino UNO的避障機(jī)器人
如何使用Arduino Uno制作智能避障機(jī)器人

Arduino伺服電機(jī)避障機(jī)器人

評(píng)論