How can we help you today?
【制動】舵機 MG995/SG90s | ServoMotor
簡介
伺服馬達(又稱舵機)就像是機器人的「關節」,它能根據指令精確地旋轉並固定在特定角度,而不像一般馬達只能無休止地轉動。在現實生活中,這種精準控制技術無處不在:從自動門的開關機制、遙控飛機的機翼轉動,到監視器的鏡頭掃描,甚至是工廠裡的機械手臂抓取動作。透過控制馬達的角度,機器人便能實現如擺頭偵測、抓取物體或調整方向等細膩的物理動作。
在機器人專案中,角度控制是實現互動功能的關鍵。dual2s 函式庫針對常見的 MG995 與 SG90s 伺服馬達進行了驅動優化,讓開發者只需透過簡單的角度指令(0° 至 180°),即可精確驅動硬體。本範例展示了如何宣告多組伺服馬達物件、設定物理轉向限制,以及執行基礎的角度定位運動。
硬體規格與連接
- MG995 (大舵機):具備金屬齒輪與高扭力,適合用於支撐重量或需要強力抓取的地方。
- SG90s (小舵機):體積輕小、反應快,適合用於感測器擺頭或輕量化機構。
- 硬體腳位:
dual2s控制板預留了專用腳位:- G18:
DUAL2S_HW::MG18 - G19:
DUAL2S_HW::MG19 - G2:可作為第三組舵機擴充(需注意與 WS2812B 共用情形)。
- G18:
核心功能說明
- 安全初始化
begin(): 為了防止機構因過度旋轉而損壞(卡死或撞擊),begin()函式允許設定三個關鍵參數:- 最小/最大角度限制:限制馬達實際運行的物理範圍(如 10°~170°)。
- 預設位置:開機瞬間馬達會立即移動到的安全初始位置,避免不可預期的動作。
- 精確角度寫入
write():- 指令方式:直接輸入目標角度(例如
s18.write(90)代表轉向中位)。 - 執行邏輯:函式庫會將角度自動轉換為底層 ESP32 的 PWM 信號寬度(通常為 500μs 至 2500μs)。
- 指令方式:直接輸入目標角度(例如
開發重點建議
- 等待時間 (Delay):伺服馬達從一個角度轉到另一個角度需要物理時間。在程式中更新角度後,務必配合足夠的
delay(),以確保馬達有足夠時間到達指定位置。 - 電源供應:MG995 等大電流馬達在啟動瞬間會消耗較多電力。若使用多組舵機,請確保
dual2s的電池電量充足,避免電壓驟降導致 ESP32 重啟。 - 機構防護:在使用
write()之前,建議先手動測試馬達旋轉範圍,並透過begin()設定正確的物理限位,以保護馬達齒輪與連桿機構。
dual2s控制器與環境
AI學伴
互動(1):基於函數庫 – dual2s
互動(2):基於範例程式
👉 你也可以在dual2s函數庫(./example/basic)中找到此範例程式。
/*=====================================================================================
yesio.net / 2026.03.12 / by nick
# Filename:05_ServoMotor.ino
# Function:伺服馬達(MG995/SG90s)之使用範例,
Examples of dual2S's application in Servo Motor(MG995/SG90s).
# Toolchain & Libs:ESP32 Arduino Core v3.3.5 (ESP-IDF v5.1), dual2s
======================================================================================*/
#include "dual2s.h"
//支援MG995大扭矩伺服馬達, GPIO 18, 19, 2
//物件宣告使用內建namespace, 也可以直接填入指定GPIO腳位號
ServoMotor s18(DUAL2S_HW::MG18);
ServoMotor s19(DUAL2S_HW::MG19);
void setup() {
// 初始化並設定物理限制 0~180 度
// 參數順序:最小限制、最大限制、開機預設角度
s18.begin(0, 180, 180);
s19.begin(0, 180, 90);
delay(1000);
}
void loop() {
s18.write(10); // 設定目標角度
s19.write(0);
delay(1500); // 等待 1 秒讓舵機轉到位
s18.write(170);
s19.write(90);
delay(1500);
while(1);
}
