Search Code

第25/31課:智能小車-3 使用紅外線感測器避開障礙物 | SunFounder Robojax

第25/31課:智能小車-3 使用紅外線感測器避開障礙物 | SunFounder Robojax

呢個項目將你嘅SunFounder 3合1 Arduino智能車改造成一部自動避障車輛。通過安裝兩個紅外線(IR)感測器——一個喺左邊,一個喺右邊——架車可以偵測路徑上嘅障礙物,並做出瞬間決定嚟轉彎避開佢哋。呢個係機械人技術嘅基本一步,教你點樣結合感測器輸入同摩打控制邏輯,創造一部有反應嘅自動駕駛機器。你喺度學到嘅原理可以應用喺好多現實世界嘅應用,包括:

  • 整一部機械人吸塵機,可以喺房間入面走動而唔會撞到傢俬。
  • 整一部跟線或者解迷宮機械人,用喺比賽或者教育項目。
  • 開發一部自動保安巡邏機械人,可以喺周邊巡邏並避開牆壁。
  • 設計一部智能玩具車,可以獨立玩而唔會卡住。

呢個指南直接建立喺之前嘅課程之上,你已經學過點樣控制架車嘅摩打同理解IR感測器點樣運作。喺呢度,我哋會結合呢啲技能嚟實現一個簡單但有效嘅避障演算法。

避障邏輯點樣運作

核心概念好簡單:架車用兩個IR感測器嚟檢查左邊同右邊有冇障礙物。每個感測器輸出一個數碼訊號:LOW(0)代表偵測到物件喺範圍內(大約20厘米),HIGH(1)代表路徑暢通。然後邏輯會根據感測器狀態決定架車嘅行動(喺影片02:35):

  • 左邊有障礙物,右邊暢通:架車向右轉嚟避開佢。
  • 右邊有障礙物,左邊暢通:架車向左轉。
  • 兩邊都有障礙物:架車向後退嚟逃離可能嘅死胡同。
  • 冇障礙物:架車向前行。

呢種反應式方法係有限狀態機嘅經典例子,架車嘅行為直接回應佢當前嘅感測器輸入。

Sunfounder-Smartcar-Obstacle-avoideance-1

硬件組件

要完成呢個項目,你需要以下組件,全部包括喺SunFounder 3合1 Arduino套件入面:

  • 1x SunFounder 3合1 Arduino智能車套件(或者同等零件)
  • 2x 紅外線避障感測器
  • 1x Arduino Uno(或者兼容板)
  • 1x 摩打驅動擴展板/板
  • 跳線

接線指南

正確嘅感測器對齊對呢個項目嚟講好重要。IR感測器必須向前同稍微向外對齊,因為佢哋會偵測架車兩側嘅障礙物(喺影片02:07)。以下接線圖顯示點樣將感測器連接到Arduino。請注意,導師用咗架車麵包板上嘅特定電源分配點,但連接到Arduino嘅接線先至係最重要。

Sunfounder-Smartcar-Obstacle-avoideance-wiring

接線連接如下(喺影片03:47):

  • 電源(VCC):將兩個IR感測器嘅VCC引腳連接到Arduino嘅5V輸出或者架車嘅電源軌。
  • 接地(GND):將兩個IR感測器嘅GND引腳連接到Arduino或者架車接地軌嘅共同接地。
  • 右邊感測器輸出(OUT):將右邊IR感測器嘅數碼輸出引腳連接到Arduino嘅數碼引腳7。
  • 左邊感測器輸出(OUT):將左邊IR感測器嘅數碼輸出引腳連接到Arduino嘅數碼引腳8。

左邊同右邊摩打嘅摩打驅動連接同之前摩打控制課程入面建立嘅一樣。

程式碼解釋

呢個項目嘅程式碼好直接。主程式可以喺文章下面下載。喺度,我哋會集中講你可以根據自己架車調整嘅用戶可配置部分。

const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;

const int rightIR = 7;
const int leftIR = 8;

呢啲行定義咗用於摩打驅動同IR感測器嘅引腳。摩打引腳(A_1BA_1AB_1BB_1A)控制兩個摩打嘅速度同方向。rightIRleftIR引腳係你連接感測器訊號線嘅位置。如果你用咗唔同嘅引腳,就要喺度改呢啲值。

int speed = 150;

呢個變數設定架車嘅基礎速度。數值可以由0到255,255係最大速度。150係一個好嘅學習起點,因為佢夠快嚟引起興趣,但又夠慢畀你有反應時間(喺影片07:10)。你可以調整呢個數值嚟令架車快啲或者慢啲。

其餘嘅程式碼定義咗loop()函數入面嘅邏輯。佢讀取左邊同右邊感應器嘅狀態,然後呼叫相應嘅移動函數(moveForward()moveBackward()backLeft()backRight())。呢啲函數係預先定義好嘅,用嚟控制摩打驅動器以達到想要嘅動作。導師喺之後嘅修改入面仲加咗一個stop()函數,用嚟喺避障動作之後暫停架車一段短時間,令到佢嘅移動更加有意識(喺影片10:29)。

現場項目示範

喺影片入面,導師首先用Serial Monitor示範邏輯。將一個盒擺近感應器,就可以睇到相應嘅訊息好似「Go Left」、「Go Right」或者「Go Backward」出現喺螢幕上,確認感應器讀數同邏輯係正確嘅(喺影片09:11)。

驗證咗邏輯之後,導師加咗一個關鍵嘅增強功能:一個stop()函數。呢個函數會令架車完全停低一段指定時間(例如1秒),喺佢執行轉彎或者倒車之後,防止急促嘅動作,同時畀架車重新評估周圍環境(喺影片10:29)。

最後,架車喺地下用一系列障礙物測試。影片顯示架車成功繞過啲盒,按需要轉左、轉右同倒車,搵到一條暢通嘅路徑,展示咗呢個避障演算法喺現實世界嘅應用(喺影片12:13)。

章節

  • [00:00] 用紅外線感應器做避障簡介
  • [01:24] 先決條件同項目概覽
  • [02:35] 避障邏輯點樣運作
  • [03:47] 接駁紅外線感應器同摩打
  • [05:40] 打開同解釋程式碼
  • [09:11] 用Serial Monitor測試邏輯
  • [10:29] 加入Stop函數令導航更順暢
  • [11:42] 測試Stop函數
  • [12:13] 喺地下做最終實際測試

圖片

Sunfounder-Smartcar-Obstacle-avoideance-1
Sunfounder-Smartcar-Obstacle-avoideance-1
Sunfounder-Smartcar-Obstacle-avoideance-wiring
Sunfounder-Smartcar-Obstacle-avoideance-wiring
894-Lesson 25: SunFounder's 3-in-1 Arduino kit Car-3 Smart Car Avoids Obstacle Using Infrared Sensors
語言: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

資源與參考資料

文件📁

Arduino 函式庫 (zip)