0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Arduino篇—車輛的避障功能

冬至子 ? 來源:X的創(chuàng)客課堂 ? 作者:MRXY ? 2023-11-02 11:27 ? 次閱讀

相關(guān)知識

常見的避障方式:

接觸式:通過觸碰開關(guān)來進(jìn)行判斷,經(jīng)常應(yīng)用在掃地機(jī)器人的擋板上。

非接觸式:使用接近傳感器實(shí)現(xiàn)功能,在沒有物理接觸的情況下檢測物體的運(yùn)動/存在并將捕獲的信息傳遞為電信號的傳感器。在避障小車的應(yīng)用上,我們通常使用紅外接近傳感器或者超聲波傳感器。

超聲波原理: 本節(jié)課我們主要使用超聲波傳感器來實(shí)現(xiàn)避障功能,這里針對超聲波的原理再復(fù)習(xí)一下。

圖片

車輛避障功能設(shè)計(jì)模型:

圖片

電路搭建

所需材料

ArduinoUNO * 1
前兩節(jié)課的車輛結(jié)構(gòu) * 1
超聲波模塊 *1
杜邦線若干

電路接線

圖片

程序編寫

練習(xí)一:右轉(zhuǎn)避障

小車在前行的過程中,20cm以內(nèi)有障礙物,小車能自動右轉(zhuǎn)避開,效果如下:

圖片

圖形化方式:

具體右轉(zhuǎn)時間可以根據(jù)實(shí)際情況進(jìn)行調(diào)整。

圖片

代碼方式:

/* 項(xiàng)目名稱:右轉(zhuǎn)避障車
 * 項(xiàng)目時間: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號數(shù)字引腳為觸發(fā)引腳
const int EchoPin = 13;//設(shè)置3號數(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號腳為輸出引腳
  pinMode(EchoPin,INPUT);//13號腳為輸入狀態(tài)
}

void loop(){
  digitalWrite(TrigPin,LOW);//先設(shè)置為低電平
  delayMicroseconds(2);//持續(xù)2微秒
  digitalWrite(TrigPin,HIGH);//設(shè)置為高電平
  delayMicroseconds(10);//持續(xù)10微秒
  digitalWrite(TrigPin,LOW);//再設(shè)置為低電平,這樣模擬出了脈沖信號
  distance = pulseIn(EchoPin,HIGH)/58;//返回的是脈沖寬度/58得到實(shí)際距離
  if (distance <= 20) {
    Right();
    delay(1000);
  } else {
    Forward();
  }
}

練習(xí)二: 車輛自主避障

在前行的過程中,20cm以內(nèi)有障礙物,小車自動繞開障礙物,然后繼續(xù)前行,效果如下:

圖片

圖形化方式:

延時時間數(shù)據(jù)需根據(jù)實(shí)際情況調(diào)試獲得。

圖片

代碼方式:

/* 項(xiàng)目名稱:自動避障車
 * 項(xiàng)目時間: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號數(shù)字引腳為觸發(fā)引腳
const int EchoPin = 13;//設(shè)置3號數(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號腳為輸出引腳
  pinMode(EchoPin,INPUT);//13號腳為輸入狀態(tài)
}

void loop(){
  digitalWrite(TrigPin,LOW);//先設(shè)置為低電平
  delayMicroseconds(2);//持續(xù)2微秒
  digitalWrite(TrigPin,HIGH);//設(shè)置為高電平
  delayMicroseconds(10);//持續(xù)10微秒
  digitalWrite(TrigPin,LOW);//再設(shè)置為低電平,這樣模擬出了脈沖信號
  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();
  }
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 機(jī)器人
    +關(guān)注

    關(guān)注

    210

    文章

    27839

    瀏覽量

    204596
  • 電信號
    +關(guān)注

    關(guān)注

    1

    文章

    731

    瀏覽量

    20430
  • 超聲波傳感器
    +關(guān)注

    關(guān)注

    18

    文章

    570

    瀏覽量

    35796
  • 避障小車
    +關(guān)注

    關(guān)注

    1

    文章

    24

    瀏覽量

    18976
  • Arduino
    +關(guān)注

    關(guān)注

    187

    文章

    6453

    瀏覽量

    185927
收藏 人收藏

    評論

    相關(guān)推薦

    請問循跡當(dāng)中的四路循跡模塊與紅外尋光&模塊有什么區(qū)別?

    `本人在做arduino尋光小車,其中用到的兩個模塊——四路循跡與紅外尋光&模塊在網(wǎng)上查完后感覺都是通過一個紅外發(fā)送器發(fā)送信
    發(fā)表于 02-01 10:53

    arduino版的自動小車程序

    自動小車 arduino版的自動小車,自己寫的程序
    發(fā)表于 11-24 15:24 ?0次下載

    基于51單片機(jī)的小車電路實(shí)現(xiàn)

    介紹模型小車自適應(yīng)行駛和的一個實(shí)例,通過超聲波傳感器感知車輛行駛 環(huán)境,實(shí)現(xiàn)小車的自適應(yīng)巡航、
    發(fā)表于 03-24 16:50 ?31次下載

    基于Arduino單片機(jī)的小車機(jī)器人

    本文簡要介紹了一種基于Arduino新型集成開發(fā)環(huán)境的超聲波小車的工作原理,包括對小車的結(jié)構(gòu)、傳感器、執(zhí)行元件、Arduino單片機(jī)軟件編程及試驗(yàn)結(jié)果的介紹。
    發(fā)表于 11-29 15:50 ?14次下載

    Arduino平臺---帶舵機(jī)云臺超聲波實(shí)驗(yàn)資料下載

    Arduino平臺---帶舵機(jī)云臺超聲波實(shí)驗(yàn)資料
    發(fā)表于 02-27 14:21 ?19次下載

    使用Arduino設(shè)計(jì)的智能小車自動的接線說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用Arduino設(shè)計(jì)的智能小車自動的接線說明。
    發(fā)表于 11-22 08:00 ?18次下載
    使用<b class='flag-5'>Arduino</b>設(shè)計(jì)的智能小車自動<b class='flag-5'>避</b><b class='flag-5'>障</b>的接線說明

    arduino nano機(jī)器人

    電子發(fā)燒友網(wǎng)站提供《arduino nano機(jī)器人.zip》資料免費(fèi)下載
    發(fā)表于 07-19 09:46 ?9次下載
    <b class='flag-5'>arduino</b> nano<b class='flag-5'>避</b><b class='flag-5'>障</b>機(jī)器人

    Arduino機(jī)器人

    電子發(fā)燒友網(wǎng)站提供《Arduino機(jī)器人.zip》資料免費(fèi)下載
    發(fā)表于 08-18 10:20 ?3次下載
    <b class='flag-5'>Arduino</b>機(jī)器人<b class='flag-5'>避</b><b class='flag-5'>障</b>

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

    電子發(fā)燒友網(wǎng)站提供《如何制作與Arduino配合使用的機(jī)器人.zip》資料免費(fèi)下載
    發(fā)表于 10-31 11:36 ?3次下載
    如何制作與<b class='flag-5'>Arduino</b>配合使用的<b class='flag-5'>避</b><b class='flag-5'>障</b>機(jī)器人

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

    電子發(fā)燒友網(wǎng)站提供《使用Arduino的寵物狗機(jī)器人TOMY.zip》資料免費(fèi)下載
    發(fā)表于 10-28 09:32 ?4次下載
    使用<b class='flag-5'>Arduino</b>的寵物狗機(jī)器人TOMY<b class='flag-5'>避</b><b class='flag-5'>障</b>

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

    電子發(fā)燒友網(wǎng)站提供《基于Arduino機(jī)器人汽車.zip》資料免費(fèi)下載
    發(fā)表于 10-31 09:54 ?5次下載
    基于<b class='flag-5'>Arduino</b>的<b class='flag-5'>避</b><b class='flag-5'>障</b>機(jī)器人汽車

    Arduino車開源分享

    電子發(fā)燒友網(wǎng)站提供《Arduino車開源分享.zip》資料免費(fèi)下載
    發(fā)表于 11-25 11:51 ?6次下載
    <b class='flag-5'>Arduino</b><b class='flag-5'>避</b><b class='flag-5'>障</b>車開源分享

    基于Arduino UNO的機(jī)器人

    本方案是一個基于 Arduino UNO 的機(jī)器人。障礙物檢測和避免可以被認(rèn)為是設(shè)計(jì)移動機(jī)器人的核心問題。機(jī)器人是一種智能機(jī)器人,可
    發(fā)表于 12-22 14:49 ?1次下載

    如何使用Arduino Uno制作智能機(jī)器人

    電子發(fā)燒友網(wǎng)站提供《如何使用Arduino Uno制作智能機(jī)器人.zip》資料免費(fèi)下載
    發(fā)表于 12-26 10:41 ?3次下載
    如何使用<b class='flag-5'>Arduino</b> Uno制作智能<b class='flag-5'>避</b><b class='flag-5'>障</b>機(jī)器人

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

    電子發(fā)燒友網(wǎng)站提供《Arduino伺服電機(jī)機(jī)器人.zip》資料免費(fèi)下載
    發(fā)表于 06-29 14:38 ?0次下載
    <b class='flag-5'>Arduino</b>伺服電機(jī)<b class='flag-5'>避</b><b class='flag-5'>障</b>機(jī)器人