
學習目標 : 認識faya雙軸伺服馬達模組的功能及使用方式
學習時間 : 45min
示範模組 : (1) faya brcickNano
(2) faya雙軸伺服馬達模組
(3) faya搖桿模組
工具 : (1) 樂高積木(相容)
====================功能介紹====================
faya雙軸伺服馬達模組利用2顆伺服馬達組合而成,伺服馬達型號SG-90,它將直流馬達、齒輪箱、與控制電路包在一藍色塑膠盒裡,並引出電源、地和控制腳位,只要使用符合規則的控制信號,就能夠操作連接齒輪上方控制柄的角度,範圍可達180度。

faya雙軸伺服馬達模組分成3大部分,上方的雲台區、中間的伺服馬達區(2顆)和下方的模組板,由於體積較大,買來後需要自行組裝下方的模組板,大家可以參考隨盒的組裝說明書,或從這邊下載! 比較需要注意的地方就是訊號/電源/地的接線部分,分別為橘色/紅色/棕色,請依序和面板上的 M / VCC / GND 相連
faya雙軸伺服馬達模組的面板如下所示,模組擁有兩個輸入埠,YM1和XM2,分別用來控制M1馬達(Y軸)和M2馬達(X軸),輸入埠的訊號格式為PWM訊號,我們會在原理知識介紹。
- 當輸入符合規則的PWM訊號到YM1埠時,可控制M1上方馬達
- 當輸入符合規則的PWM訊號到YM1埠時,可控制M2下方馬達

接下來介紹使用指令,Arduino內建了伺服馬達(Servo)的函示庫,透過寫好的函示,只要幾行指令就能夠精準地控制伺服馬達,以下介紹本範例中用到的函示
- #include<Servo.h>;
- Servo 物件名稱;
(例) 當建構物件名稱為"fayaServoYM1時",需宣告:
Servo fayaServoYM1;
- 物件名稱.attach(pin,min,max);
物件名稱: 程式開頭以建構的物件名稱
pin : 連接此伺服的腳位,一定要指定PWM腳,如3、5、6、9、10、11
(例) 當指定pin5連接到物件名稱為"fayaServoYM1",需宣告
fayaServoYM1.attach(5);
- 物件名稱.write(angle);
物件名稱: 程式開頭以建構的物件名稱
angle : 旋轉角度(0~180)
(例) 當要設定物件名稱為"fayaServoYM1"旋轉角度為100度時,需宣告
fayaServoYM1.write(100);
====================原理知識====================
以下解釋提供給有需要知道背後原理的人:
faya雙軸伺服馬達電路圖如下所示,除了外加電容和bead抗電源雜訊,其餘部分剩下電源、地和兩個馬達的訊號線,位於模組上的輸入埠 YM1、XM2。

伺服馬達SG90透過PWM脈波訊號來控制轉動位置,訊號的頻率為50Hz,也就是20ms的脈波寬度,透過脈波寬度的改變,就能改變馬達最後停止位置。

從datasheet可以得知控制角度為180度 (-90 ~ 0 ~ 90),欲從最左邊的-90度到最右邊的90度,相對的脈波寬度約為 (1ms ~1.5ms ~ 2ms)。

=====================範例實作====================
了解模組功能(原理)後,我們用以下範例來展示模組的功能:
目標:
(1) 左右移動搖桿時,伺服馬達左右擺動
(2) 上下移動搖桿時,伺服馬達逆順轉動
接線:
(1) 電源線連接
如下圖所示,連接的說明請看這篇文章 或簡易版。
(2) 訊號線連接
Arduino_5 ===> 雙軸伺服馬達模組_YM1
Arduino_6 ===> 串列七段顯示模組_XM2
Arduino_A5 ===> 搖桿模組_VRX
Arduino_A4 ===> 搖桿模組_VRY
範例程式:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 2017/9/4 | |
// Faya-Nugget 範例程式 (TwoAxisServo_1.ino) | |
// 單元: 模組介紹:faya雙軸伺服馬達模組 | |
// 網址: https://fayalab.blogspot.com/2017/08/2axisServo.html | |
// 目標: (1) 左右移動搖桿時,伺服馬達左右擺動 | |
// (2) 上下移動搖桿時,伺服馬達上下轉動 | |
// 接線: Arduino ==> faya模組 | |
// 5 ==> YM1 (雙軸伺服馬達模組) | |
// 6 ==> XM2 (雙軸伺服馬達模組) | |
// A5 ==> VRX (搖桿模組) | |
// A4 ==> VRY (搖桿模組) | |
#define YM1 5 // YM1連到5腳 | |
#define XM2 6 // XM2連到6腳 | |
#define VRX A5 // VRX連到A5腳 | |
#define VRY A4 // VRY連到A4腳 | |
#include <Servo.h> //使用伺服馬達函示庫 | |
Servo fayaServoYM1; // 建構servo物件 : ServoYM1 (控制上方伺服馬達) | |
Servo fayaServoXM2; // 建構servo物件 : ServoXM2 (控制下方伺服馬達) | |
int val_VRX, val_VRY; // 搖桿X-Y埠的讀取變數 | |
void setup() | |
{ | |
fayaServoYM1.attach(YM1); // 伺服馬達YM1連接第5腳 | |
fayaServoXM2.attach(XM2); // 伺服馬達XM2連接第6腳 | |
pinMode(VRX, INPUT); // A5為輸入腳位,偵測VRX值 | |
pinMode(VRY, INPUT); // A4為輸入腳位,偵測VRY值 | |
} | |
void loop() | |
{ | |
val_VRX = analogRead(VRX); // 讀取搖桿VRX電壓 (0~1023) | |
val_VRX = map(val_VRX,0,1023, 0,180); // 將讀取值對應到 (0~180) | |
fayaServoYM1.write(val_VRX); // 利用對應值控制驅動角度 | |
val_VRY = analogRead(VRY); // 讀取搖桿VRY電壓 (0~1023) | |
val_VRY = map(val_VRY,0,1023, 0,180); // 將讀取值對應到 (0~180) | |
fayaServoXM2.write(val_VRY); // 利用對應值控制驅動角度 | |
delay(100); | |
} |
備注:
- L34~L39 : 搖桿的X-Y軸讀取到的電壓值(0~1024),轉化成0~180的角度位置
- L26~L27 : 網路上有些文章在討論SG90伺服馬達的校正,由於Servo函示預設的脈衝寬度範圍是544到2400µs,但SG90是500到2400us,我們可以將此兩行程式修改成以下,再比較結果。
fayaServoYM1.attach(YM1,500,2400);
fayaServoXM2.attach(XM2,500,2400);
-L40 : 延遲讓馬達有時間能夠反應,太長的話,反應會不靈敏,太短的話,會反應不過來,大家可試試看!
範例結果:
討論:
faya雙軸伺服馬達模組,搭配了樂高雲台後,可在雲台上安裝不同的faya電子積塊,發揮大家的想像力,例如人體紅外線模組,追蹤人的位置,例如網路攝影機加上無線模組,就能夠做遠端要控和監控了!
有時間時,我們也來做做這些有趣的應用!
歡迎大家到我們的FB留言板討論!
====================================
fayalab 粉絲團
FB本篇留言版
沒有留言:
張貼留言