Arduino 智能小車實作-雙舵機移動的測試程式

我使用了兩個舵機 (MG995) +雲台放置於小車前方,目的是裝上如超聲波感測器後,可以讓其上下、左右移動。
雙舵機移動測試

目前已把兩個舵機含雲台給裝上小車上了,同時也把超聲波感測模組給鎖上雲台支架上,這樣看起來像雙機器人眼睛。
雙舵機移動測試

現在先把兩個舵機的測試程式寫好,至於超聲波模組的測試程式則留待另一篇討論。

舵機控制的程式相當簡單,因為 Arduino 已內建 函式庫,已經把較低階以脈衝訊號控制角度運轉的指令包裹 (wrap)成只用 write() 較高階的指令,並帶入角度 (0~180) 的整數參數即可控制舵機往所指定的角度移動。

舵機有三條電源線,一般棕色為接地、紅色為電線線;還有一條橘色則為訊號線。在 Arduino 擴展板上連接任一編號的 GVS 接腳即可。本例兩個舵機是連接編號為 4與5 的接腳組。

再來注意的是,MG995 舵機的轉向角度為 180度,但實際連接到小車後可移動角度因與其它裝置會碰觸到,所以需要經過調整,往往會小於 180度。本例控制左右的舵機把角度控制在 0~160 度;控制上下的舵機把角度控制在 0~125 度。

測試程式參考如下:

#include <Servo.h>
 
Servo servoLR;    // 控制左右的舵機變數
Servo servoTD;    // 控制上下的舵機變數
 
int pos = 0;    // variable to store the servo position
 
void setup()
{
  servoLR.attach(4);
  servoTD.attach(5);  
}
 
void loop()
{
  // 測試舵機往左移動
  for(pos = 0; pos < 160; pos += 1)  // goes from 0 degrees to 180 degrees
  {                                  // in steps of 1 degree
    servoLR.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  delay(4000); 
 
  // 測試舵機往右移動  
  for(pos = 160; pos>=0; pos-=1)     // goes from 180 degrees to 0 degrees
  {                                
    servoLR.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  delay(4000);
 
  // 測試舵機往上移動  
  for(pos = 0; pos < 125; pos += 1)  // goes from 0 degrees to 180 degrees
  {                                  // in steps of 1 degree
    servoTD.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  delay(4000);
 
  // 測試舵機往下移動  
  for(pos = 125; pos>=0; pos-=1)     // goes from 180 degrees to 0 degrees
  {                                
    servoTD.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  delay(4000);  
}

照例我仍放了一段測試可以左右與上下移動的舵機測試影片:

文章導覽

   

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *