Semorphe

直流馬達

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

你會學到三件事

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

開始之前

接線(L298N 驅動板):IN15 號腳IN26 號腳ENA3 號腳(要有 ~ 的 PWM 腳)、馬達接 OUT1/OUT2、 驅動板另外接電池。

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

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

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

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

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

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

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

IN1 IN2 馬達
HIGH LOW 正轉
LOW HIGH 反轉
LOW LOW 停(滑行)
HIGH HIGH 停(煞車)
digitalWrite(5, HIGH);
digitalWrite(6, LOW);      // 正轉

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

三、速度:PWM

analogWrite(3, 200);       // 0~255

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

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

四、組起來

digitalWrite(5, HIGH);
digitalWrite(6, LOW);
analogWrite(3, 200);
delay(2000);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
delay(2000);

前進兩秒、後退兩秒。

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

analogWrite(3, 0);
delay(200);

完成的樣子

void setup() {
    pinMode(5, OUTPUT);
    pinMode(6, OUTPUT);
    pinMode(3, OUTPUT);
}

void loop() {
    digitalWrite(5, HIGH);
    digitalWrite(6, LOW);
    analogWrite(3, 200);
    delay(2000);
    digitalWrite(5, LOW);
    digitalWrite(6, HIGH);
    delay(2000);
}

換你了

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

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

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

這一課你做了什麼

如果卡住了

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