第30/31課:SunFounder Arduino套件嘅智能車進行Car-8線追蹤 | Robojax
呢個指南會帶你逐步了解點樣用SunFounder 3合1 Arduino套件整一部跟線智能車。
呢個項目喺影片入面示範咗,用紅外線循線模組偵測白色表面上嘅黑線,再控制兩個摩打令架車保持喺軌道上。呢個係一個基礎機械人項目,教你點樣讀取感應器、條件邏輯同摩打控制。喺現實世界嘅價值好大——佢係倉庫入面自動導引車(AGV)、跟住房間邊緣行嘅機械人吸塵機,同埋用嚟學習自動導航嘅教育平台嘅基礎。除咗基本組裝之外,你可以將呢個概念用喺以下方面:

- 整一部可以喺迷宮或者軌道上沿預設路徑行嘅簡單機械人。
- 為小型辦公室或者實驗室整一部自動送貨車。
- 為學校科學項目或者比賽開發一部跟線機械人。
- 為工業輸送帶整一個根據位置分類物品嘅原型系統。
硬件同零件
呢個項目嘅核心係循線模組,佢用一對紅外線(IR)發射器同接收器。以下係主要零件嘅詳細介紹:
- 循線模組(TCRT5000):呢個感應器會發出紅外線光,然後量度反射嘅強度。模組入面有個LM393比較器,將模擬信號轉換成數碼HIGH或者LOW輸出。
- 智能車底盤連摩打:SunFounder套件包括一個車架,上面有兩個齒輪摩打,由Arduino控制嚟轉向架車。
- Arduino板:成個操作嘅「大腦」,負責讀取感應器同向摩打發送指令。
- 摩打驅動器(喺車嘅擴展板上):呢個電路令Arduino嘅低功率引腳可以控制電流較大嘅摩打。
接線指南
循線模組嘅接線好簡單。影片入面示範咗以下嘅連接方式(喺影片04:04):
- 循線模組VCC(中間引腳):連接到Arduino嘅5V引腳。
- 循線模組GND(左邊引腳):連接到Arduino嘅GND引腳。
- 循線模組OUT(右邊引腳):連接到Arduino嘅數碼引腳2。
摩打就連接去車嘅擴展板上嘅摩打驅動器。喺程式入面,右摩打由引腳5同6控制,左摩打由引腳9同10控制,好似影片示範咁(喺影片12:28)。
程式碼解釋
程式碼嘅設計係讀取循線模組嘅數碼信號,然後相應咁控制摩打。以下係主要可以俾用家設定嘅部分:
const int in1 = 5; // in1、2用嚟控制右摩打
const int in2 = 6;
const int in3 = 9; // in3、4用嚟控制左摩打
const int in4 = 10;
const int lineTrack = 2;
- 摩打引腳(in1、in2、in3、in4):呢啲常數定義咗邊啲Arduino引腳連接去摩打驅動器。如果你嘅接線唔同,就要改呢啲數值嚟配合你嘅設定。
- 循線模組引腳(lineTrack):呢個定義咗連接去感應器信號輸出嘅數碼引腳。程式碼會讀取呢個引腳嚟判斷感應器係咪喺黑色或者白色表面上。
喺主循環入面,你可以調整speed變數嚟控制架車嘅轉彎速度。數值範圍由0到255,數值越高架車轉彎越快。
int speed = 150;//0到255
邏輯好簡單:如果感應器讀到HIGH(黑線),架車就向左轉;否則就向右轉。自訂函數moveLeft()同moveRight()控制摩打嚟實現呢個效果。例如,要向左轉,右摩打轉動而左摩打停止,令架車原地轉向。呢個行為喺影片入面有詳細解釋(喺影片10:39)。
將循線模組放喺黑線上。同時調整靈敏度。
現場項目示範
影片最後有跟線車嘅現場示範(喺影片13:13)。架車放喺一條黑色軌道上,感應器直接放喺線上面。當架車移動時,感應器偵測到黑線同白色背景,向摩打發送信號嚟調整方向。示範顯示架車成功行完一個完整圓圈,證明咗簡單嘅左右修正邏輯好有效。
章節
- [00:00] 線追蹤簡介
- [01:09] 線追蹤模組嘅運作原理
- [04:04] 接駁線追蹤模組
- [04:23] 用序列監視器測試感應器
- [07:27] 理解循線邏輯
- [09:08] 循線車嘅程式碼
- [11:37] 循線車示範
- [13:13] 喺黑色賽道上面嘅實地測試
/*
this is code for the tutorial: Lesson 30/31: Car-8 Line Tracking by Smart Car from SunFounder Arduino Kit
YouTube video: https://www.youtube.com/watch?v=Cp2rD5RkYug
Get the code from: 📚⬇️ Download and resource page https://robojax.com/RJT613
www.robojax.com
*/
const int in1 = 5; // in1,2 for right motor
const int in2 = 6;
const int in3 = 9; // in3,4 for left motor
const int in4 = 10;
const int lineTrack = 2;
void setup() {
Serial.begin(9600);
//motor
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
//line track
pinMode(lineTrack, INPUT);
}
void loop() {
int speed = 150;//0 to 255
int lineColor = digitalRead(lineTrack); // 0:white 1:black
// Serial.println(lineColor); //print on the serial monitor
if (lineColor) {
Serial.print("Black ");
moveLeft(speed);
} else {
Serial.print("White ");
moveRight(speed);
}
}
void moveLeft(int speed) {
Serial.println("LEFT");
analogWrite(in1, 0);
analogWrite(in2, speed);
analogWrite(in3, 0);
analogWrite(in4, 0);
}
void moveRight(int speed) {
Serial.println("RIGHT");
analogWrite(in1, 0);
analogWrite(in2, 0);
analogWrite(in3, speed);
analogWrite(in4, 0);
}
Common Course Links
Common Course Files
資源與參考資料
暫時冇資源。
文件📁
冇文件可用。