« 「週刊 ロボゼロ」 第2号(3)ボディフレーム取付け&小ネタ集(4) | トップページ | Arduinoでロボゼロのサーボを動かしてみよう!(3) »

Arduinoでロボゼロのサーボを動かしてみよう!(2)

ロボゼロ第2号に付いてきたサーボテスターはPWM方式であることから、Arduinoでロボゼロのテスターを作ってみよう!ということであれこれやっていますが、

前回

というタイトルで、Arduinoを使ってPWM方式でロボゼロのサーボを動かしてみましたが、

今回
から

  • 第2回:Arduinoでロボゼロのサーボを動かしてみよう!

というタイトルに変更して、何回かに分けて書きたいと思います。

今回の目的は、第2号に付いてきたサーボテスターと同じ挙動を示す「コマンド方式のサーボテスター」をArduinoで作る!ですhappy01paper※自己責任において行って下さい。

用意するもの

  • RS306MD(壊しても後悔しないもの):ロボゼロ第3号1990円
  • Arduino(壊しても後悔しないもの):2000円〜3000円いろんな物がある
  • Arduinoと繋ぐUSBケーブル
  • ArduinoとRS306MDを繋ぐジャンパワイヤ
  • Arduino IDE

RS306MDのコマンド方式について

one特徴

  • PWM方式とコマンド方式に対応し、自動的に切り替わる
  • コマンド方式により、双方向通信が可能で、サーボの状況のフィードバックが得られる。

two通信

  • レート:115200bps(工場出荷) 9600, 14400, 19200, 28800, 38400, 57600, 76800, 115200, 153600, 230400bpsに対応
  • データビット:8bit
  • パリティ:なし
  • ストップビット:1bit
  • フロー制御:なし
  • 通信プロトコル:非同期半二重

threeパケットの種類

  • ショートパケット:ひとつのサーボに対して送る場合
  • ロングパケット:複数のサーボに送る場合
  • リターンパケット:サーボから返信されてくるパケット

fourショートパケットの構成

  • Header(2byte): 0xFAAF
  • ID(1):サーボのID サーボに割り振った1〜127のID番号 ※工場出荷時のIDは1、※255で全IDのサーボ
  • Flag(1):bit6:ROMへの書き込み,bit5:サーボの再起動,bit4:工場出荷時に,bit3-0:リターンパケットのアドレス指定
  • Address(1):サーボのメモリーのアドレス
  • Length(1):Dataのバイト数
  • Count(1):サーボの数
  • Data(可変):送信するデータ(メモリーに書き込むデータ)
  • Sum(1):チェックサム(=誤り検出)。IDからDataまでをXORした値

Arduinoのシリアル通信について

oneシリアル通信
ArduinoボードはSerialという名前で参照される1組のシリアルポート(RXとTX)を持っています(デジタルポートの0と1番)。その通信速度は、300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200bpsが使えます。

twoSoftSerial/NewSoftSerialの通信
デジタルポートの0と1番は、コンピュータとのデータの通信に(も)使われているポートである為、このポートを使うことがふさわしくない場合もあります。このような場合は、SoftSerialまたはNewSoftSerialというライブラリーを使うことで0と1番以外のポートが使えるようになり、0と1番をコンピュータとのやりとりに使えるようになります。しかし、SoftSerialの通信速度は9600bps程度、NewSoftSerialの速度は57600bps程度である為、ロボゼロのRS306MDの場合、初期値の115200bpsを変更しなくてはいけなくなります。これに関しては次回以降に書きたいと思います。

ArduinoとRS306MDを繋げる
ジャンパワイヤで以下の図の用に配線して下さい。

20110308144012_2

Arduinoのスケッチ(プログラミング)
Arduinoの基本的な使い方については他のサイトなどにお任せするとして、コマンド方式で動かす為には、サーボのトルクをオンにして、目標の回転角度を設定することによって動かすことができます。先に述べた「ショートパケットの構成」に従って、それぞれのパケットを作ります。

oneトルクON/OFF(RAM=24H)
ON=01H/OFF=00H
FAAF 01 00 24 01 01 01 24

two目標の角度へサーボを動かす(RAM=1EH)
単位=0.1度
例123度→1230→04CEH
FAAF 01 00 1E 02 01 CE 04 D6

threeスケッチ(-144〜144度の回転を繰り返す)

//-------------------------------------

//トルクON
byte trqOn[] = {0xFA, 0xAF, 0x01, 0x00, 0x24, 0x01, 0x01, 0x01, 0x24};
//時計回り144度
byte cw144[] = {0xFA, 0xAF, 0x01, 0x00, 0x1E, 0x02, 0x01, 0xA0, 0x05, 0xB9};
//反時計回り144度
byte ccw144[] = {0xFA, 0xAF, 0x01, 0x00, 0x1E, 0x02, 0x01, 0x60, 0xFA, 0x86};

void setup() {
 
Serial.begin(115200); //115200bpsでポートを開く
 
delay(500); //0.5秒待つ
 
Serial.write(trqOn,9); //トルクON
}

void loop() {
 
delay(2000); //2秒待つ
 Serial.write(cw144,10); //144度まで回転
 delay(2000); //2秒待つ
 Serial.write(ccw144,10); //-144度まで回転
}

//-------------------------------------

fourスケッチをArduinoにアップロード
上記スケッチをArduino IDEにコピペし、Arduinoにアップロードします。

さて、ちゃんと回転してくれたでしょうかsign02happy01paper

----------------

----------------
にほんブログ村 科学ブログ ロボットへ
にほんブログ村

|

« 「週刊 ロボゼロ」 第2号(3)ボディフレーム取付け&小ネタ集(4) | トップページ | Arduinoでロボゼロのサーボを動かしてみよう!(3) »

Arduino / Processing」カテゴリの記事

週刊 ロボゼロ」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/221673/51065129

この記事へのトラックバック一覧です: Arduinoでロボゼロのサーボを動かしてみよう!(2):

« 「週刊 ロボゼロ」 第2号(3)ボディフレーム取付け&小ネタ集(4) | トップページ | Arduinoでロボゼロのサーボを動かしてみよう!(3) »