前言:什麼是 Servo 伺服馬達(舵機)?
在 Arduino 創客與機器人實作中,伺服馬達(Servo Motor,常稱為舵機) 是實現精密角度控制的核心元件。舉凡機器手臂關節、智慧門鎖、遙控車轉向機構或機械開關,都能看到它的身影。
其中,SG90 伺服馬達 因體積小巧、價格親民、驅動簡單,成為新手入門學習微控制器馬達控制的最佳選擇。
一、 SG90 伺服馬達工作原理與 PWM 控制
伺服馬達內部包含了 DC 微型馬達、減速齒輪組、電位器(位置感測器)與控制電路板。
伺服馬達的角度旋轉是透過 PWM(脈衝寬度調製)信號 來實現的:
標準 PWM 信號週期: 固定為 20 ms(50 Hz)。
高電位脈寬(Pulse Width): 理論脈寬約在
1 ms(0度)至2 ms(180度)之間;實際市售 SG90 馬達的脈寬通常在0.5 ms至2.5 ms之間對應0° ~ 180°角度。
⚠️ 注意: 不同品牌或批次的伺服馬達,對於相同 PWM 信號反應的角度可能略有偏差。
二、 選購須知:180度標準舵機 vs 360度連續旋轉舵機
在購買 SG90 或 MG995 伺服馬達時,請特別留意規格標示:
180度標準伺服馬達(Standard Servo):
特點: 可精準控制旋轉角度(0° 到 180°)。
適用情境: 機器手臂、機械關節、門鎖開關、機械開閉裝置。
360度連續旋轉伺服馬達(Continuous Rotation Servo):
特點: 無法控制固定角度,而是控制旋轉方向與速度(如:1500µs 停止、大於 1500µs 正轉、小於 1500µs 反轉)。
適用情境: 自走車輪子驅動、輪式機器人。
💡 本篇教學以最常見的 180度標準 SG90 伺服馬達 進行實作範例。
三、 實驗材料與電路接線圖
Arduino 開發板供電能力有限。若專案中需要同時驅動 1 個以上 或高負載(如 MG995 金屬齒輪馬達) 的伺服馬達,建議搭配外接電源(如 5V 變壓器)或馬達擴充板,避免 Arduino 因電流過大而重啟。
🛠️ 所需材料清單
Arduino Uno R3 開發板 × 1
SG90 180度伺服馬達 × 1
USB 數據傳輸線 × 1
實驗麵包板與杜邦線 × 若干
🛍️ 還沒有硬體材料嗎? 推薦購買:米羅科技 – Arduino 程式學習爆款套件組( 一次帶走開發板、感測器與馬達模組)
🔌 引腳接線對照表 (Pin Mapping)
SG90 伺服馬達通常帶有 3 根不同顏色的控制線:
四、 Arduino Servo.h 控制程式範例
Arduino 官方內建了便利的 <Servo.h> 函式庫,讓我們不需要手動寫複雜的 PWM 脈衝時間計算,就能直接透過角度數值(0 到 180)控制馬達!
💻 完整程式碼:伺服馬達 0°~180° 來回掃描
/*
* 【Arduino入門教學】第16篇:控制 SG90 Servo 伺服馬達
* 發佈單位:米羅科技文創學院
* 說明:使用 Servo.h 函式庫控制 SG90 伺服馬達從 0度 平滑轉動至 180度,再轉回 0度
*/
#include <Servo.h> // 引用 Arduino 官方伺服馬達控制函式庫
Servo myservo; // 建立 Servo 物件(一個物件代表一顆馬達,Arduino Uno 最多支援 12 個 Servo 物件)
int pos = 0; // 建立變數,用於儲存馬達目標角度位置
void setup() {
myservo.attach(9); // 將 Servo 物件綁定至 Arduino 的 Pin 9 數位腳位
}
void loop() {
// 步驟一:從 0 度順暢旋轉到 180 度,每次增加 1 度
for (pos = 0; pos <= 180; pos += 1) {
myservo.write(pos); // 告知伺服馬達旋轉至 pos 角度
delay(15); // 等待 15 毫秒讓馬達運轉到達指定位置
}
// 步驟二:從 180 度逆向旋轉回 0 度,每次減少 1 度
for (pos = 180; pos >= 0; pos -= 1) {
myservo.write(pos); // 告知伺服馬達旋轉至 pos 角度
delay(15); // 等待 15 毫秒讓馬達運轉到達指定位置
}
}五、 程式邏輯解析與重點提醒
#include <Servo.h>:引用官方庫後,系統會自動在背景處理 20ms 定時脈衝。myservo.attach(Pin):將指定的 PWM 腳位設定為伺服馬達訊號輸出腳。myservo.write(angle):傳入 0~180 的整數角度即可命令馬達轉至該角度。為什麼要加上
delay(15)? 伺服馬達轉動需要實體機械運作時間,給予微小的延遲(例如 15ms)可以讓馬達轉動更加平滑,避免發出咔咔聲或抖動。
六、 常見問題與除錯 (FAQ)
Q1: 為什麼上傳程式後,伺服馬達會不斷抖動或發出「卡卡」聲?
解答: 這通常是供電不足所致。當馬達啟動瞬間電流過大時,Arduino 的 5V 腳位電壓會被拉低(Brown-out),導致 Arduino 開發板不斷重啟。解決方法是為伺服馬達提供獨立的 5V 電源(請記得將外接電源的 GND 與 Arduino 的 GND 相連共地)。
Q2: 為什麼馬達轉到 0 度或 180 度極限時會卡住抖動?
解答: 部分便宜的 SG90 馬達物理機械結構極限可能只有 5°~175°。遇到這種情況,可以在程式中把界線稍微縮小(例如
pos設定在10至170之間)。


