2015年3月4日 星期三

使用可變電阻控制伺服馬達

實驗目的                 來源按我
練習用可變電阻控制伺服馬達(Servo motor)的旋轉角度。
image
材料
  • 麵包板 x 1
  • Arduino 主板 x 1
  • 伺服馬達(Servo Motor) x 1
  • 10k 可變電阻 x 1
  • 單心線 x N

接線
伺服馬達有三條線,電源(紅線)、接地(黑線),以及訊號線。
image
  • 把伺服馬達紅線接到 +5v,黑線接到 GND,訊號線接到 pin 9
  • 可變電阻中間腳位接到類比輸入(Analog Input) pin 0,剩下的兩支腳位,一支接到 5V,另外一支接到 GND
image
電路圖
image
程式碼
RC 伺服馬達(Radio Controlled Servo Motor) 大部份是透過 PWM (Pulse Width Modulation, 脈波寬度調變)來控制,Arduino 裏內建了 Servo Library 讓事情變得很簡單,就算你對 PWM 不熟,也可以很輕鬆地控制伺服馬達。底下的程式碼示範 Servo Library 的使用方法(Servo.pde):

01  // 引用 Servo Library
02  #include <Servo.h>
03
04  // 建立一個 Servo 物件
05  Servo myservo;
06 // 旋轉角度
07  int value = 0;
08
09  void setup()
10  {
11  myservo.attach(9);    // Servo 接在 pin 9
12  }
13
14  void loop()
15 {
16  if (value == 0)
17  value = 180;
18  else
19  value = 0;
20
21  // 叫 Servo 旋轉角度:
22  // myservo.write(0) 是叫 Servo 旋轉到 0 度的位置
23  // myservo.write(180) 是叫 Servo 旋轉到 180 度的位置
24  myservo.write(value);
25  delay(1500);
26  } 
程式說明:
  • L2: 引用 Servo library
  • L5: 利用 Servo 類別建立 myservo 物件
  • L24: 要控制 Servo 旋轉角度,只要呼叫 Servo 的 write() 並傳入指定的角度就可以了,例如 myservo.write(180) 是控制 Servo 轉到 180 度,myservo.write(120) 是控制 Servo 轉到 120 度。
使用可變電阻控制伺服馬達(PotServo.pde):

01  // 使用可變電阻控制 Servo 的旋轉角度
02  // by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
03
04  // 引用 Servo Library
05  #include <Servo.h>
06
07 // 建立一個 Servo 物件
08  Servo myservo;
09
10  // 可變電阻接在 Analog pin 0
11  int potpin = 0;
12 // 儲存旋轉角度的變數
13  int val;
14
15  void setup()
16 {
17 myservo.attach(9); // Servo 接在 pin 9
18 }
19
20  void loop()
21 {
22  val = analogRead(potpin); // 讀取可變電阻(數值介於 0 到 1023)
23  val = map(val, 0, 1023, 0, 179); // 把 0 - 1023 的數值按比例縮放為 0 - 180 的數值
24  myservo.write(val); // 設定 Servo 旋轉角度
25  delay(15); // 等待 Servo 旋轉指定的位置
26 }

程式說明:
  • L22: 讀取可變電阻並將讀到的數值(介於 0 到 0123)儲存在 val 變數中
  • L23: 0 到 1023 的數值必須經過數值轉換,依比例轉為 0 到 180 的數值,因為我們的伺服馬達只能在 0 到 180 度之間旋轉。範例程式利用 map() 函式將 0 – 1023 的值對應到 0 -179。
  • L24: 根據讀到的可變電阻值控制 Servo 轉到指定的角度
範例照片/影片連結


延伸閱讀

沒有留言:

張貼留言