ArduinoUNO で Futaba RS304MDのIDを変更して動かす。
前回フタバサーボのRS304MDを動かしたが、これはIDが初期設定で1となっていることが前提だった。しかし、ID1しか動かせないのではコマンドサーボを使う必要がない。なので、今回はID設定を変更して動かしてみる。
まず、RS304MDの設定ツールというものは双葉電子工業のHPにサンプルプログラムの形で公開されている。ダウンロードして解凍すると、中にソースコードと実行形式のファイルがあるのでそれを使えばサーボモータの各種設定ができる。接続するツールはRS485-USB変換器(RSC-U485)のソフトだが、RS304MDを接続する際は信号線のプラス側だけを接続することで通信を行う。
しかし、私がRSC-U485を持っていないので今回はArduinoからIDを変更してROM保存を行うプログラムを書いてみる。
目次
IDを変更する通信
まずフタバのコマンドサーボでIDを変更するには3段階の処理が必要。まず、IDを変更するコマンドを送信する。このコマンドを送ったら即座にIDが変更されるがRAMに保存されているだけなので、電源をOFFしたらIDは元に戻ってしまう。そのため、RAMに書き込んだら次にROMに書き込む処理が必要。ROMに書込みが終了したら最後に、サーボモータを再起動するコマンドを送信する。この工程を踏むことで正常にIDを変更することができる。
ID設定を255にするとすべてのサーボに対して指令を与えるので、IDを変更したいサーボに設定されているIDがわからないときは指令IDを255にするとIDを変更できる。
RAMのIDを変更する
IDを変更するコマンドは下の通り。SumはIDからDataまでのすべてをXORで計算した結果。
パケット構成 | 値 |
---|---|
Header | FA AF h |
ID | 変更したいサーボの現在のID |
Flag | 0x00 |
Address | 0x04 |
Length | 0x01 |
Count | 0x01 |
Data | 変更したいサーボの変更後のID |
Sum | 送信データの確認用のチェックサム |
RAMの変数をROMに書込む
RAMの変数をROMに書込むコマンドは下の通り。SumはIDからDataまでのすべてをXORで計算した結果。
一括してROMに書き込むのでID以外の変数を変更していた場合のその変数も保存されてしまうので要注意。 また、ROM保存中に電源がきれるとROMの値が消えてしまい最悪動かなくなる可能性があるらしいのでこの点も注意したほうが良い。
パケット構成 | 値 |
---|---|
Header | FA AF h |
ID | ROM保存したいサーボのID |
Flag | 0x40 |
Address | 0xFF |
Length | 0x00 |
Count | 0x00 |
Sum | 送信データの確認用のチェックサム |
サーボモータを再起動する
サーボモータを再起動するコマンドは下の通り。SumはIDからDataまでのすべてをXORで計算した結果。
パケット構成 | 値 |
---|---|
Header | FA AF h |
ID | ROM保存したいサーボのID |
Flag | 0x20 |
Address | 0xFF |
Length | 0x00 |
Count | 0x00 |
Sum | 送信データの確認用のチェックサム |
IDを変更した動作
IDを変更するスケッチを書きこんだArduinoUNOでRS304MDを動作させた様子を下に示す。
リセットする前はID1で設定されているが、リセットボタンを押すとsetup関数でIDを変更するので動作角度が大きくなっていることからIDが正常に変更されたことがわかる。
ArduinoUNOのスケッチ
今回作成したArduinoスケッチを下に示す。これ以上長くなったらGithubで公開したほうが良さそう。
!動作の確認はしていますが、試す場合は自己責任でお願いします。!