2017年11月18日 星期六

小型兩軸伺服馬達 (舵機) 雲台 (Pan-Tilt Kit) 動作展示

網頁最後修改時間:2019/05/08

這篇網頁主要用影片來展示組裝之後的雲台動作。

經由影片中程式的設定,可以自由設定適當的水平 (Pan) 和垂直(Tilt)伺服馬達旋轉的三個角度值,用來做雙軸同動的展示。

2019/05/08 新增兩個學習套件的展示影片:
  • 手機控制雲台的水平(左右)與垂直(上下)轉動;
  • 雲台跟隨和自穩的運動控制;
*********************************************************************************
*********************************************************************************

【雲台組裝注意事項】

此組雲台 DIY 套件的組裝說明,可參考下面 YouTube 影片中的介紹。


影片中未提及,個人提出幾個較重要的組裝注意事項:

/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 伺服馬達一定要歸中再組裝:

此組套件中的伺服馬達出貨之前,都會特地再進行測試,並且將轉軸旋轉至中間的位置 (當然不是用手轉),所以在拿到套件後,就可直接進行組裝。

/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 雲台底座的方向可自由選擇:

網頁中所使用的雲台底座方向與影片中的差了 180 度 (但其實沒什麼關係,方向變換只需要鬆開一顆螺絲即可) 視組裝與之後要安裝的位置去選擇就可以。

/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 雲台的組裝初始位置:

由於伺服馬達出貨的時候,轉軸是在中間的位置,因此組裝也必須要讓平台就是處在中間的位置再進行組裝 (位置可參考網頁最上面的照片),可避免受限于硬體限制,軟體指令無法達到適當的角度值。

【PWM 的 duty (佔空比) 限制】

套件中的伺服馬達是一般 RC 遙控常用的類型,RC 遙控中 PWM 的 pulse width 範圍一般設定為 1000 - 2000 µs / 20ms,依伺服馬達內部設定對應到不同的角度轉動。

打開 Arduino IDE,點擊選單中的 "File/Examples/Server/Sweep" 這個範例程式,編譯後上傳到 Arduino 開發板 (接腳使用 <D9> )

/* Sweep
 by BARRAGAN <http://barraganstudio.com>
 This example code is in the public domain.

 modified 8 Nov 2013
 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Sweep
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

int pos = 0;    // variable to store the servo position

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() {
  for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
}

動作之後你(妳)會發現,伺服馬達沒有所謂 0 - 180 度到 180 - 0 度的轉動變化,而是0 - 90 度到 90 - 0 度,WHY... WHY... tell me WHY !

這就要回歸到 Servo 這個函式庫內部。預設的 Servo 的 pulse width 範圍等於 1000 - 2000 µs,所對應的角度等於 0 - 180 度,對應到賣場這組伺服馬達就是 0 - 180 = 0 - 90,所以輸出的角度值並不是我們要的 !

「那麼,要怎麼改呢?」

很簡單,修改掉預設的 pulse width 最小與最大的輸出範圍就可以;但這個範圍不是隨便設的,不對的設定有可能會損壞伺服馬達,所以使用前必須要自己確定清楚這個範圍是可用的。

若是使用賣場的套件,直接套用下面的設定值即可。


/* Sweep
 by BARRAGAN <http://barraganstudio.com>
 This example code is in the public domain.

 modified 8 Nov 2013
 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Sweep
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

int pos = 0;    // variable to store the servo position

void setup() {
  myservo.attach(9, 700, 2400);  // attaches the servo on pin 9 to the servo object
}

void loop() {
  for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
}

【測試注意事項】

以 Arduino 開發板為例。程式上傳之後,不要直接使用 USB 的電源供電驅動伺服馬達,請使用外接電源;要不,伺服馬達不是不會轉動,就是會產生異常動作。

【兩軸雲台動作展示】

下面影片使用賣場的雲台 DIY 套件作展示。任選一組水平方向最小與最大的旋轉角度值,以及垂直上下最小與最大的旋轉角度值,進行雙軸同動。因為使用的指令就是上面範例提及的那些個,所以就不再額外贅述!


【學習套件展示影片】




【結論】

這組雲台除了組裝需要花一些功夫之外,操作與動作都很容易實現,只需要注意上面所提及的部分,相信就能發揮最大的功用 !

Happy DIY  ^_^


<< 部落格相關文章 >>


沒有留言:

張貼留言

留言屬名為"Unknown"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!

發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?

不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !