2012年5月13日 星期日

Page 3 - 利用 Arduino 控制2顆伺服馬達

Page 3 - 利用 Arduino 控制2顆伺服馬達 
             (Control  2  servo  motors  with  an Arduino )

利用 Arduino 控制一顆伺服馬達,很容易,
在官方網站,甚至隨意搜尋都能找到 sample  code 

但同時控制兩顆轉向不同位置,似乎就是很多人頭痛的問題

在單晶片領域中,要同時控制兩顆馬達轉向不同位置,
可以利用軟體方法,也可以利用硬體方法

詳細的內容請上 Arduino 官方網站,點選左上方 playground 進入,
並於左側選單中點選 Interfacing With Hardware,
接著在網頁中搜尋: Servos  ,將會有更多控制多顆伺服馬達的說明


在此我們提供利用 Servo.h 與副程式的軟體方法
來達成同時控制兩顆伺服馬達的需求,source  code 如下:
#include <Servo.h>

Servo servoLeft;          // 宣告左邊伺服馬達
Servo servoRight;         // 宣告右邊伺服馬達

void setup() { 
  servoLeft.attach(10);  // 將 Pin 10 指定為左邊伺服馬達
  servoRight.attach(9);  // 將 Pin  9 指定為右邊伺服馬達
} 

void loop() {       
  initial();        // 馬達位置歸零
  delay(2000);      // 執行後停止兩秒
  
  same_degree();    // 左右伺服馬達同樣各轉30度        
  delay(2000);      // 執行後停止兩秒
  
    initial();        // 馬達位置歸零
  delay(2000);      // 執行後停止兩秒
  
  dif_degree();     // 左伺服馬達轉30度,右伺服馬達轉150度
  delay(2000);      // 執行後停止兩秒
}

/* 以下為副程式宣告 */

void initial(){
  servoLeft.write(0);
  servoRight.write(0);
}

void same_degree() {
  servoLeft.write(30);
  servoRight.write(30);
}

void dif_degree() {
  servoLeft.write(30);
  servoRight.write(150);
}

以上為完整的程式碼


#include <Servo.h>
程式一開始,我們就先宣告引入 Servo.h 檔,
這樣後續的伺服馬達功能宣告、控制,我們才可以正常使用。


Servo servoLeft;          // 宣告左邊伺服馬達
Servo servoRight;         // 宣告右邊伺服馬達
引入 Servo.h 檔後,我們就可以 Servo 宣告左右伺服馬達變數


完成以上步驟後,就只需要按照  Page 2 中提到的程式架構進行功能撰寫,
如此一來伺服馬達就可以依照指定角度進行旋轉了。



以下影片是 Arduino 經由本文中的程式同時控制兩顆馬達同時轉向30度;
與單顆轉向30度,另一顆轉向150度的範例影片。
影片中的紅色板子,是利基科技的教育學習板,
本實驗僅利用教育學習板上的麵包板,並無額外利用其他控制器。:




透過以上的程式與影片說明,希望能讓你學習到如何控制兩顆伺服馬達,
做出更多有趣的作品!


Marcus.

7 則留言:

  1. 請問您是使用連續旋轉伺服馬達嗎

    回覆刪除
    回覆
    1. 您好,是的,影片中所使用的是兩顆連續旋轉的伺服馬達。

      刪除
  2. 您好!
    想請問:
    我使用連續旋轉的伺服馬達,
    但他不是旋轉30度後停止兩秒,而是旋轉兩秒再換下一步,
    怎麼會不一樣呢? 謝謝!

    回覆刪除
  3. servoLeft.write(30);
    servoRight.write(30);
    启动转动的时候程序执行是不是会有10微秒的前后延迟?而并不是同时

    回覆刪除
  4. 請問如何將程式停止

    回覆刪除
    回覆
    1. 沒有辦法停
      只能把電線拔掉(連接電腦的USB線)

      刪除
  5. 請問有辦法同時控制兩顆馬達同時轉一樣的角度嗎

    回覆刪除