sg90-1

伺服馬達(Servo),對岸稱為舵機。常見於玩具、機器手臂、機器人等用途,一般型式的伺服馬達可以旋轉180度,而且可以被我們透過PWM精準的控制。Arduino Uno可以控制12個伺服馬達,而Arduino Mega則可以控制高達48個伺服馬達。伺服馬達款式型號非常多,本篇以最常見的SG90為例來進行介绍,但其實像MG995的使用基本是相同的。

SG90有3條線,分別是訊號(橘)、VCC(紅)、GND(褐),順序是固定的。這次我們把訊號線接到PIN 9,VCC接到5V,GND接到GND。

servo-2

絕大多數的情況,我們都會選擇使用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之間,就是你想控制的角度。真的很簡單,大家可以試試!