Arduino 以搖桿控制伺服器馬達

材料

  • Arduino UNO Rev3 x 1
  • MG90S 伺服器馬達 x 2


接線: 橙(DATA)、紅(5V)、棕(GND)

  • 雙軸按鍵搖桿 x 1 (只用到X, Y輸出)


接線: VCC(接Arduino 5V)、GND(接Arduino GND)

  • 連接線 x 數條

電路圖

Arduino 程式碼

#include <Servo.h> 
#include <Serial.h>
 
Servo servoX, servoY; 

const byte pinX = A0;
const byte pinY = A1;

int valX, posX;
int valY, posY;
 
void setup() 
{ 
  Serial.begin(9600);
  servoX.attach(8);
  servoY.attach(9);
} 
 
void loop() 
{ 
  valX = analogRead(pinX);
  valY = analogRead(pinY);
  
  posX = map(valX, 0, 1023, 0, 179);
  posY = map(valY, 0, 1023, 0, 179);

  /*  
  for (int xx = 0; xx < 180; xx++) {
    servoX.write(xx);
    delay(15);
  }
  */
  servoX.write(posX);
  servoY.write(posY);
  Serial.print(valX);
  Serial.print(", ");
  Serial.println(valY);
  Serial.println("");
  
  delay(15);                           // waits for the servo to get there 
} 

注意事項

  posX = map(valX, 0, 1023, 0, 179);
  posY = map(valY, 0, 1023, 0, 179);
  • 程式碼 map 函數內 1023 數值可依照實際搖桿輸出之類比最大 valX、valY 值替代。
  • 實作時發現其中有一顆伺服器馬達會發生顫抖現象。推敲原因是當搖桿歸回原點時,實際類比輸入值有飄移現象,導致進行輸入值0~1023對應轉化為0~179時,可能數值在servoX.write(89~91)之間飄移,致使伺服器馬達不斷動作而發生顫抖現象,可能要修改程式碼因應。