[Arduino範例] SG90 Servo伺服馬達
伺服馬達(Servo),對岸稱為舵機。常見於玩具、機器手臂、機器人等用途,一般型式的伺服馬達可以旋轉180度,而且可以被我們透過PWM精準的控制。Arduino Uno可以控制12個伺服馬達,而Arduino Mega則可以控制高達48個伺服馬達。伺服馬達款式型號非常多,本篇以最常見的SG90為例來進行介绍,但其實像MG995的使用基本是相同的。
SG90有3條線,分別是訊號(橘)、VCC(紅)、GND(褐),順序是固定的。這次我們把訊號線接到PIN 9,VCC接到5V,GND接到GND。
絕大多數的情況,我們都會選擇使用Arduino IDE內建的Servo函式庫來控制伺服馬達,雖然是透過PWM來控制伺服馬達,但不表示一定要用有PWM的腳位哦!但這個函式庫有個小小問題,就是除了Mega板以外,像是在Uno板上,會停用D9以及D10的PWM功能,也就是這兩個腳位使用analogWrite()時會出問題。如果是在Mega板上就換成了D11與D12。
參考官方說明:
https://www.arduino.cc/en/reference/servo
順便一提的,單顆伺服馬達在運作時,所需電流大約是300mA,所以如果你需要2顆以上的伺服馬達同時運作,這樣就要外接高電流的變壓器來供電囉,不然就會經常出現抖動的情況。
我們先來寫一個非常簡單的例子:先讓伺服馬達歸零,也就是回到0度,停1秒,再轉到90度,再停一秒,再轉到180度,然後再轉回90度、0度。
程式很簡單,只有幾行,但只要寫完,你基本上就已經學會怎麼控制伺服馬達了。
#include <Servo.h> //載入函式庫,這是內建的,不用安裝
Servo myservo; // 建立SERVO物件
void setup() {
myservo.attach(9); // 設定要將伺服馬達接到哪一個PIN腳
}
void loop() {
myservo.write(0); //旋轉到0度,就是一般所說的歸零
delay(1000);
myservo.write(90); //旋轉到90度
delay(1000);
myservo.write(180); //旋轉到180度
delay(1000);
myservo.write(90);
delay(1000);
}
首先要設定伺服馬達要接到哪一個PIN腳,用這行:
myservo.attach(9);
代表我們要把這個伺服馬達接到PIN 9。然後就可以控制伺服馬達的角度了。
myservo.write(0);
write()的參數可以是0-180之間,就是你想控制的角度。真的很簡單,大家可以試試!