Semorphe

直流馬達

讓輪子轉起來,而且會倒車。 · ⏱ 約 30 分鐘

你會學到三件事

  1. 為什麼馬達不能直接接在板子的腳上
  2. 兩支腳決定方向,一支腳決定速度
  3. 這一課沒有新語法,它是第 1 課 + 第 2 課的組合

開始之前

接線(L298N 驅動板):IN1 接 5 號腳、IN2 接 6 號腳、 ENA 接 3 號腳(要有 ~ 的 PWM 腳)、馬達接 OUT1/OUT2、 驅動板另外接電池。

🟢 先把編輯器打開,跟著下面一起做:跟著做

一、⚠️ 馬達不能直接接板子

Arduino 一支腳最多送得出 40 毫安培, 而一顆小馬達啟動的瞬間要幾百到上千毫安培。

直接接的後果不是「轉不動」,是把那支腳燒掉。

所以中間要一塊驅動板:板子送出「訊號」,驅動板用電池的電推馬達。

Arduino  ──訊號──▶  L298N  ──大電流──▶  馬達
(腦)                (手)                (腿)
                        ▲
                      電池

⚠️ 驅動板和 Arduino 的 GND 要接在一起。 不接的話兩邊沒有共同的 「零點」,訊號會變得莫名其妙,而這是最難查的一種問題。

二、方向:兩支腳的四種組合

IN1 IN2 馬達
HIGH LOW 正轉
LOW HIGH 反轉
LOW LOW 停(滑行)
HIGH HIGH 停(煞車)

兩支腳的高低決定轉的方向:

1digitalWrite(5, HIGH);2digitalWrite(6, LOW);      // 正轉
5HIGH6LOW把腳位設成把腳位設成12

方向靠的是電流從哪一邊流到哪一邊,所以要兩支腳。

三、速度:PWM

速度用 analogWrite:

1analogWrite(3, 200);       // 0~255
3200把類比腳位輸出成1

和第 2 課的呼吸燈完全一樣,只是這次調的是轉速。

⚠️ 太小的值馬達不會轉,只會嗡嗡叫。 每顆馬達的「最低啟動值」不同,多半在 50~100 之間,要自己試。

四、組起來

照著打上這一段——正轉,中速:

1digitalWrite(5, HIGH);2digitalWrite(6, LOW);3analogWrite(3, 200);4delay(2000);5digitalWrite(5, LOW);6digitalWrite(6, HIGH);7delay(2000);
5HIGH6LOW320020005LOW6HIGH2000等待毫秒把腳位設成把腳位設成等待毫秒把類比腳位輸出成把腳位設成把腳位設成1234567

前進兩秒、後退兩秒。

⚠️ 直接從正轉切到反轉對馬達不好。 中間應該先停一下:

🔎 這一段是試一下——打了看結果就好,不要留在程式裡。

1analogWrite(3, 0);2delay(200);
30200等待毫秒把類比腳位輸出成12

完成的樣子

這一課的參考做法——程式碼每一行的號碼,就印在對應的那塊積木上。

1void setup() {2    pinMode(5, OUTPUT);3    pinMode(6, OUTPUT);4    pinMode(3, OUTPUT);5}6 7void loop() {8    digitalWrite(5, HIGH);9    digitalWrite(6, LOW);10    analogWrite(3, 200);11    delay(2000);12    digitalWrite(5, LOW);13    digitalWrite(6, HIGH);14    delay(2000);15}
5OUTPUT6OUTPUT3OUTPUT設定腳位為設定腳位為設定腳位為5HIGH6LOW320020005LOW6HIGH2000等待毫秒把腳位設成把腳位設成等待毫秒把類比腳位輸出成把腳位設成把腳位設成定義函式 回傳型別void(無回傳)loop定義函式 回傳型別void(無回傳)setup12738491011121314

換你了

把「正轉」「反轉」「停」各寫成一個函式,就像第 7 課那樣。

void forward(int speed) { ... }
void backward(int speed) { ... }
void halt() { ... }

然後 loop 就只剩幾行看得懂的話。這才是函式真正的用處: 把「怎麼做」藏起來,讓「做什麼」看得清楚。

到編輯器做這一題:練習:把正轉/反轉/停各寫成一個函式

做一個

兩顆馬達,一顆正轉一顆反轉,車子就會原地打轉。做出「原地轉一圈之後停下來」。

🔴 「一圈」是多久?這一題沒有辦法用算的,只能試,而那就是重點。 ⚠️ 電壓變低(電池用久了)之後,同一個時間轉的角度會不一樣。

到編輯器做這一題:做一個:原地轉一圈

這一課你做了什麼

如果卡住了

你看到 多半是因為
完全不動 驅動板沒接電池,或 ENA 那支腳沒送 PWM
只有嗡嗡聲 PWM 值太小,推不動
方向反了 把馬達那兩條線對調(或把 IN1/IN2 對調)
行為莫名其妙 兩邊的 GND 沒接在一起
Arduino 一直重開 馬達從板子取電了。要用外接電源
在編輯器打開這一課 →