第24/31課:智能車第二部分:前進、後退、左右轉同控制車速
呢堂課專注喺砌你部智能車嘅第二階段:用Arduino代碼控制佢嘅移動。雖然第一個項目可能已經令部車以基本方式郁動,但呢個指南教你點樣命令部車精準咁向前、向後、轉左、轉右同停低。你亦都會學識點樣控制佢嘅速度,令加速同減速更順暢。呢個係任何機械人項目嘅基本步驟,因為佢畀你基礎邏輯去創造更複雜嘅自主行為。
掌握呢啲移動控制會打開好多可能性。以下係呢啲知識嘅幾個實際應用:
- 循線機械人:用左轉同右轉功能令機械人保持喺軌道上。
- 避障車輛:編程部車向前移動、停低,同埋喺偵測到前面有物件嗰陣轉彎。
- 遙控探索:將呢啲命令同無線模組結合,喺屋企或者花園周圍揸部車。
- 自動送貨系統:整一個小型機械人,可以喺設定點之間移動,需要嗰陣停低同啟動。
硬件同組件
呢個項目係基於SunFounder 3合1 Arduino套件。除咗基本套件之外唔需要額外組件,但你需要連接四條額外電線去Arduino嚟控制摩打驅動器。基本組件包括:
- Arduino Uno(或兼容板)
- SunFounder智能車底盤連摩打
- 摩打驅動板(套件內包含)
- 跳線
- 車用電池盒
- USB線用嚟編程
接線指南
呢個項目嘅接線對控制每個摩打嘅方向好重要。影片解釋咗驅動板嘅四條摩打控制線連接去Arduino嘅第5、6、9同10針腳。呢啲針腳特別在於佢哋支援脈寬調變(PWM),呢個對速度控制好重要。
喺影片入面,導師用黃色同藍色線以特定順序連接佢哋,如下圖所示。
影片中提到一個重要嘅安全提示:用USB編程Arduino嗰陣要斷開車嘅電池電源(紅色線去5V,黑色線去GND)。咁可以防止USB埠過載而可能關機。
代碼解釋
呢堂課嘅代碼結構容易修改同理解。控制部車嘅關鍵在於程式開頭嘅針腳定義。如果你決定用Arduino上唔同嘅針腳,你可以更改呢啲定義。
const int in1 = 5;
const int in2 = 6;
const int in3 = 9;
const int in4 = 10;
呢幾行定義咗連接去摩打驅動器輸入嘅Arduino針腳。in1同in2控制一個摩打,而in3同in4控制另一個。透過將呢啲針腳設為HIGH或LOW,你就可以控制每個摩打嘅旋轉方向。
為咗控制部車嘅速度,代碼用咗兩個自訂函數:moveForward(int speed)同moveBackwards(int speed)。呢啲函數接受一個0到255之間嘅整數值作為參數。0值會令摩打停止,而255就係最大速度。例如,要令部車以全速向前移動,你可以呼叫moveForward(255)。要令佢慢慢向後移動,你可以用moveBackwards(100)。
影片亦示範咗一個用for迴圈嘅「加速」同「減速」順序。呢個係實現順暢加速嘅強大技巧。
for(int i=0;i<=255;i+=5){
moveForward(i);
delay(100);
}
呢個迴圈由i等於0開始,每次加5,直到達到255。每次佢都會呼叫moveForward(i),逐漸增加部車嘅速度。delay(100)提供每個速度步驟100毫秒嘅暫停,令加速過程可見。一個類似嘅迴圈用遞減嘅i值嚟令部車減速。
現場項目示範
喺影片入面,導師分兩個主要階段示範呢個項目。首先,佢展示部車嘅基本移動。透過載入「move」代碼,部車執行一個預設順序:向前移動兩秒、停低、向後移動兩秒、停低、轉左、然後轉右。咁樣可以視覺上確認接線同邏輯係正確嘅。
第二個示範集中喺速度控制。導師載入「加速」程式碼,令車仔逐漸加速向前,直到達到最高速度,然後平穩噉減速至停低。佢跟住展示一個固定速度嘅版本,車仔以255向前移動,停低之後,再以較慢嘅速度100向後退,啲數值會打印到Serial Monitor度做驗證。
章節
- [00:00] 車仔移動控制簡介
- [01:44] 設定接線以進行程式碼控制
- [02:07] 示範向前同向後移動
- [03:18] 示範向左同向右轉彎
- [05:05] 將電線連接到Arduino引腳
- [07:00] 方向控制嘅程式碼解釋
- [11:44] 速度控制簡介
- [12:16] 速度漸變嘅程式碼解釋
- [14:45] 使用Serial Monitor做除錯
- [17:10] 速度控制嘅現場示範
- [19:45] 最後戶外測試同總結
/*
Lesson 24/31: Smart code speeds up
Get this code and watch video Download and resource page https://robojax.com/RJT607
YouTube video https://www.youtube.com/watch?v=QzcUig2L3dM
*/
const int in1 = 5;
const int in2 = 6;
const int in3 = 9;
const int in4 = 10;
void setup() {
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
Serial.begin(9600);
Serial.println("SunFounder Arduino Course");
Serial.println("Lesson 3: Speed up");
Serial.println("www.Robojax.com");
}
void loop() {
moveForward(255);
Serial.print("Forward at: ");
Serial.println(255);
delay(5000);//for 5 seconds
Serial.println("Stopped ");
moveForward(0);//stop the car
delay(2000);//for 2 seconds
moveBackwards(100);
Serial.print("Reverse at: ");
Serial.println(100);
delay(5000);//for 5 seconds
Serial.println("Stopped ");
moveForward(0);//stop the car
delay(2000);//for 2 seconds
}
void moveForward(int speed) {
analogWrite(in1, 0);
analogWrite(in2, speed);
analogWrite(in3, speed);
analogWrite(in4, 0);
}
void moveBackwards(int speed) {
analogWrite(in1, speed);
analogWrite(in2, 0);
analogWrite(in3, 0);
analogWrite(in4, speed);
}
/*
Lesson 24/31: Smart code speeds up (custom code)
Get this code and watch video Download and resource page https://robojax.com/RJT607
YouTube video https://www.youtube.com/watch?v=QzcUig2L3dM
*/
const int in1 = 5;
const int in2 = 6;
const int in3 = 9;
const int in4 = 10;
void setup() {
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
Serial.begin(9600);
Serial.println("SunFounder Arduino Course");
Serial.println("Lesson 3: Speed up");
Serial.println("www.Robojax.com");
}
void loop() {
Serial.println("Loop 1: Speeding Up");
for(int i=0;i<=255;i+=5){
moveForward(i);
Serial.print("i= ");
Serial.println(i);
delay(100);
}
Serial.println("Loop 2: Slowing down ");
for(int i=255;i>=0;i-=5){
moveForward(i);
Serial.print("i= ");
Serial.println(i);
delay(100);
}
}
void moveForward(int speed) {
analogWrite(in1, 0);
analogWrite(in2, speed);
analogWrite(in3, speed);
analogWrite(in4, 0);
}
Common Course Links
Common Course Files
你可能需要嘅嘢
-
亞馬遜5V DC motor on Amazonamzn.to
-
亞馬遜5V DC motor on eBayebay.us
-
亞馬遜SunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
亞馬遜
-
亞馬遜
-
亞馬遜
-
阿里巴巴速卖通5V DC motor on AliExpresss.click.aliexpress.com
資源與參考資料
-
文件记录Documentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
外部Purchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
文件📁
Arduino 函式庫 (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB