實驗目的 來源按我
練習用可變電阻控制伺服馬達(Servo motor)的旋轉角度。
材料
- 麵包板 x 1
- Arduino 主板 x 1
- 伺服馬達(Servo Motor) x 1
- 10k 可變電阻 x 1
- 單心線 x N
接線
伺服馬達有三條線,電源(紅線)、接地(黑線),以及訊號線。
- 把伺服馬達紅線接到 +5v,黑線接到 GND,訊號線接到 pin 9
- 可變電阻中間腳位接到類比輸入(Analog Input) pin 0,剩下的兩支腳位,一支接到 5V,另外一支接到 GND
電路圖
程式碼
RC 伺服馬達(Radio Controlled Servo Motor) 大部份是透過 PWM (Pulse Width Modulation, 脈波寬度調變)來控制,Arduino 裏內建了 Servo Library 讓事情變得很簡單,就算你對 PWM 不熟,也可以很輕鬆地控制伺服馬達。底下的程式碼示範 Servo Library 的使用方法(Servo.pde):
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 轉到指定的角度
範例照片/影片連結
請參考 makezine.com 做的這個影片,影片除了示範伺服馬達的控制外,也講解了線路的接法以及程式碼:
沒有留言:
張貼留言