Basic Tutorial for Arduino, 入門篇

【Arduino入門教學】第20篇:28BYJ48 步進馬達 + ULN2003 驅動板(減速比計算、接線圖與 Stepper 函式庫正反轉範例)

Arduino Uno 連接 28BYJ48 步進馬達與 ULN2003 驅動板接線圖,包含 IN1~IN4 (Pin 11-8) 與 5V GND 電源對照

前言:什麼是 28BYJ48 步進馬達與 ULN2003 驅動板?

在 Arduino 自動化專案(如自動窗簾、遙控雲台、3D 列印機與機械手臂)中,直流馬達(DC Motor)只能持續旋轉卻無法精確控制角度。

28BYJ48 減速步進馬達(Stepper Motor) 能將電脈衝訊號轉化為角位移,每次給予一個脈衝訊號,馬達就會旋轉一個固定的角度。搭配 ULN2003 達林頓陣列驅動板(Darlington Transistor Array),不僅能放大電流驅動馬達,板上的 4 顆 LED 燈還能直觀顯示目前的相序狀態!

一、 28BYJ48 步進馬達規格與核心數學計算

1. 28BYJ48 關鍵規格說明

  • 工作電壓: 5V DC

  • 相數與線數: 5 線 4 相(5-Wire 4-Phase)

  • 內建齒輪減速比:1 : 64

  • 原始步距角(Stride Angle): (四相八拍模式下)

2. 馬達旋轉一圈需要多少步?(關鍵計算)

28BYJ48 內部為減速馬達,齒輪組的實際減速比約為 1:64:

  • 四相半步(Half-step, 8 拍)模式:

    一圈步數

  • 四相全步(Full-step, 4 拍,Stepper.h 預設模式):

    一圈步數

二、 實驗材料與電路接線圖

🛠️ 所需材料清單

  • Arduino Uno R3 開發板 × 1

  • 28BYJ48 步進馬達(5V DC) × 1

  • ULN2003 步進馬達驅動板 × 1

  • 杜邦線 × 6 根

🛍️ 準備好你的硬體工具了嗎? 推薦選購:米羅科技 – Arduino 程式學習爆款套件組(包含 28BYJ48 馬達、ULN2003 驅動板與豐富驅動專案模組)

👍爆款推薦:程式學習套件組 

購買網址:shop.mirotek.com.tw

🔌 電路接線圖與腳位對照表 (Pin Mapping)

依據實物圖片,接線分為 控制訊號線電源供電線 兩大部分:

Arduino Uno 連接 ULN2003 步進馬達驅動板腳位對照圖:Pin 11-8 對應 IN1-IN4、5V/GND 供電及 28BYJ48 步進馬達 5 Pin 插座連接示意

詳細引腳連接對照表

ULN2003 驅動板腳位線材顏色(示意圖)Arduino Uno 連接腳位功能說明
IN1綠色線Pin 11相序控制 A 訊號輸入
IN2藍色線Pin 10相序控制 B 訊號輸入
IN3黃色線Pin 9相序控制 C 訊號輸入
IN4橘色線Pin 8相序控制 D 訊號輸入
5-12V (+)紅色線5V驅動板電源正極
GND (-)黑色線GND驅動板電源負極(接地)

💡 接線小提示:

馬達端的 5 色排線(藍、粉、黃、橘、紅)有防呆設計,直接插入 ULN2003 驅動板右側的白色專用插座即可。

三、 Arduino 步進馬達程式範例(配合圖中腳位)

由於圖片中的 IN1~IN4 分別接在 Pin 11、10、9、8,搭配 Stepper.h 函式庫時,腳位宣告順序需對應為 (11, 9, 10, 8)才能完美實現順暢旋轉!

安裝 Stepper 程式庫:

本次試驗使用arduino直接驅動步進驅動器,需安裝 Stepper 函式庫。

  • 在 Arduino 整合環境功能表點選 草稿碼 / 匯入程式庫 / 管理程式庫
  • 在右上方搜尋框輸入「 Stepper 」,下方會列出所有符合條件的程式庫,不同程式庫使用的程式碼並不相同。此處點   選「 Stepper」,該項目右下角會出現「安裝」鈕,按「安裝」鈕開始安裝。

💻 完整程式碼

/*
 * 【Arduino入門教學】第20篇:28BYJ48步進馬達 + ULN2003驅動板
 * 發佈單位:米羅科技文創學院
 * 說明:依據實際配線圖控制 28BYJ48 步進馬達進行正反轉旋轉
 */

#include <Stepper.h>  // 引用 Arduino 內建步進馬達函式庫

// 全步模式下旋轉一圈所需的步數 (2048 步)
const int STEPS_PER_REV = 2048;

// 初始化 Stepper 物件:Stepper(一圈步數, Pin_IN1, Pin_IN3, Pin_IN2, Pin_IN4)
// 依據圖中接線 (IN1:Pin11, IN2:Pin10, IN3:Pin9, IN4:Pin8)
// 腳位順序設定為:(11, 9, 10, 8)
Stepper myStepper(STEPS_PER_REV, 11, 9, 10, 8);

void setup() {
  Serial.begin(9600);
  
  // 設定馬達轉速為 10 RPM (轉/分)
  myStepper.setSpeed(10);
  
  Serial.println("【Mirotek】28BYJ48 步進馬達測試開始...");
}

void loop() {
  // 1. 順時針旋轉一圈
  Serial.println("正轉 1 圈中...");
  myStepper.step(STEPS_PER_REV);
  delay(1000);

  // 2. 逆時針旋轉一圈
  Serial.println("反轉 1 圈中...");
  myStepper.step(-STEPS_PER_REV);
  delay(1000);
}

四、 常用 Stepper.h 語法與調速解析

語法指令功能說明
Stepper(steps, pin1, pin3, pin2, pin4)建立步進馬達物件,指定一圈步數與控制腳位。
myStepper.setSpeed(rpm)設定馬達轉速(RPM,每分鐘轉數)。建議設定
myStepper.step(steps)驅動馬達轉動指定的步數。正數為順時針,負數為逆時針。

五、 常見問題與除錯 (FAQ)

Q1: 馬達發出「嗡嗡聲」劇烈抖動,但軸心完全不會轉動?

解答:

  1. 腳位宣告順序錯誤: 請檢查程式中 Stepper 的腳位宣告順序是否為 (8, 10, 9, 11),如果寫成 (8, 9, 10, 11),相序切換順序會錯亂導致馬達原地震動。

  2. 轉速設定太高: 28BYJ48 帶有減速齒輪,極限轉速約在 15~18 RPM。若 setSpeed 設定超過 20,馬達會因為追不上頻率而失步(Stall)。

  3. 供電不足: 請確認 ULN2003 的 VCC 是否有提供穩定的 5V 電源。

Q2: 馬達停止轉動後,ULN2003 驅動板和馬達感覺發熱正常嗎?

解答: Stepper.h 在執行完 step() 後,最後一個觸發的腳位會持續維持高電位供電(鎖定轉矩 Hold Torque),因此會有電流持續通過並產生發熱。若長時間不用,可在程式中將 IN1~IN4 腳位全部寫入 LOW 以省電並降低溫度。

🔗 延伸閱讀與推薦課程

 

相關文章