實驗目的
練習用可變電阻控制伺服馬達(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):
程式說明:
- L2: 引用 Servo library
- L5: 利用 Servo 類別建立 myservo 物件
- L24: 要控制 Servo 旋轉角度,只要呼叫 Servo 的 write() 並傳入指定的角度就可以了,例如 myservo.write(180) 是控制 Servo 轉到 180 度,myservo.write(120) 是控制 Servo 轉到 120 度。
使用可變電阻控制伺服馬達(PotServo.pde):
程式說明:
- L22: 讀取可變電阻並將讀到的數值(介於 0 到 0123)儲存在 val 變數中
- L23: 0 到 1023 的數值必須經過數值轉換,依比例轉為 0 到 180 的數值,因為我們的伺服馬達只能在 0 到 180 度之間旋轉。範例程式利用 map() 函式將 0 – 1023 的值對應到 0 -179。
- L24: 根據讀到的可變電阻值控制 Servo 轉到指定的角度
範例照片/影片
請參考 makezine.com 做的這個影片,影片除了示範伺服馬達的控制外,也講解了線路的接法以及程式碼:
coopermaa你好~~~
回覆刪除我是你網誌的讀者~Sven
請問,如果要控制servo旋轉的角速度
需要用那些函式或是參數來調整呢?
謝謝
請問Cooper有沒有這方面的經驗呢?
回覆刪除我在網路上搜尋還沒找到servo控速度的方式@@
一般 180 度的 servo 可以控制旋轉的速度嗎?
回覆刪除這我不清楚,上次看這篇的說明是 360 度的 servo 才能控制速度:
http://arduino.cc/en/Reference/ServoWrite
BTW, 你用的是哪一種 servo?
Tower Pro SG91R
回覆刪除http://goods.ruten.com.tw/item/show?21012186149779
我這就不曉得了,我只玩過 180 度的 servo
回覆刪除你有沒試過下列:
myservo.write(0);
myservo.write(180);
myservo.write(90);
用這幾種方式測試,結果分別是什麼?
有阿~~~~這指令就是我驅動servo定位的指令~~
回覆刪除結果就是最左邊~正中間 最右邊~~~
servo 只能定位?
回覆刪除所以 SG91R 這顆不是 360 度的 servo?
對阿~~這個是180度的~~~
回覆刪除請問Cooper, 有辦法查自己問過那些問題嗎??
因為我之前都是點你頁面右邊的Recent Comments
現在想要回去複習....
又不知道跑到哪了 XDDDDD
照這篇的說法,好像只有 360 度的 servo 才能控制速度:
回覆刪除http://arduino.cc/en/Reference/ServoWrite
沒辦法查耶!我也覺得很困擾...sorry
坦白說,Google blogger 內建的留言板並不是很理想,不曉得有沒有比較好用的外掛~~
想請問一下~我是新手!!UNO接上servo後 com就會跳掉,是哪裡出了問題嗎?
回覆刪除@Ei-Design
回覆刪除"接上 servo 後 com 就會亂掉" 是什麼狀況?
就是會讀不到port(com),會做動一下,然後就停止了!!
回覆刪除是接上 servo 就會這樣嗎?
回覆刪除其它程式可以正常跑嗎?
如果是的話,有可能是電源問題,建議額外供電給 servo
請問一下,我用uno+ ethernet shiled + servo,利用telnet server 讓使用者用telnet的client去控制servo.
回覆刪除但是只要使用myservo.attach(9);ethernet就會ping 不到.
請問會是哪裡有問題?
謝謝.
Hi, 你說 "只要使用myservo.attach(9);ethernet就會ping 不到.",那不加這行就 ping 得到嗎?
回覆刪除http://www.youtube.com/watch?v=kPDrnYKGsh4
回覆刪除您好COOPER,我照著上面的第一段語法控制伺服馬達,但是馬達卻會亂抖動,不知道您是否知道原因呢?
可能是供電的問題,建議伺服馬達另外供電,不要共用 Arduino 的電
回覆刪除想問老師,我不用servo motor,改為3v至4.5vdc motor.可以嗎?還需要注意?
回覆刪除可以的
回覆刪除建議用 L293D 或 L298 控制直流馬達:
http://gcyrobot.blogspot.tw/2011/05/arduino-h-bridgel293d.html
thankyou
回覆刪除