Arduinoによるロビ2スタンドの制御
2017年8月3日
9月1日改訂
10月10日改訂
ロビに続いてロビ2をやっています。
8号でスタンドが完成しました。
今回はArduinoを使ってスタンドを動かしてみます。
まずロビ2のサーボモーターですがトルクなどサーボの性能が異なっていますがを基本的にはロビのサーボと変わっていません。
サーボを動かすコマンド等は同じでロビのプログラムでロビ2のサーボモーターを動かせると思います。
大きく違っているのはロビのサーボではPWMで制御できたのサーボは対応していないようです。
PWM制御というのは信号線のバルス幅に応じてサーボの角度を変える機能ですがロビでは使われていない機能でなくなっても影響はありません。
Arduinoとのサーボの接続方法について説明します。
今回はロビの時に作ったコネクターケーブルとロビのサーボケーブルを使って接続しました。
しかしロビとロビ2のサーボコネクターの形状およびピンのピッチが違うためロビ2のサーボとロビのサーボケーブルの共用は推奨されませんのでやられる方は自己責任で行ってください。
ロビ2のサーボケーブルを入手して途中で切断してArduinoに接続する方法が望ましいと思われます。
サーボケーブルのVCC(赤)をArduinoの5VにGND(黒)をArduinoのGNDに接続します。
サーボケーブルの信号線(黄)をArduinoのDIGITAL 1(TXT)に接続します。
Arduinoの電源は5Vを供給します。
スタンドのバッテリィーケースでも動きますがUBSでPCにつないでもそのバスパワー(PCからUSBケーブルで供給)でサーボを動かす事ができます。
ロビのサーボは次のコマンドで動かす事ができます。
コマンドはArduinoのシリアルピン(DIGITAL 1)からサーボの信号線に115200BPSで送信します。
まずサーボに対してトルクオンのコマンドを送ります。
0xFA, 0xAF, ID, 0x00, 0x24, 0x01, 0x01, 0x01, SUM
IDはサーボIDで動かすサーボのIDを指定します(0xFFを指定するとすべてのサーボが対象)
SUMはチェックサムで送信するバイトの全て(先頭2バイトとSUMを除く)の排他的論理和(XOR)を計算する。
サーボを動かす時は次のサーボに対して移動時間のコマンドを送ります。
0xFA, 0xAF, ID, 0x00, 0x1E, 0x04, 0x01, データ1, データ2, データ3, データ4, SUM
IDはサーボIDで動かすサーボのIDを指定します(0xFFを指定するとすべてのサーボが対象)
データ1はサーボの角度の下8ビットでサーボの角度は実際の角度の10倍を指定する(90.5度の場合は905)
データ2はサーボの角度の上8ビットでマイナスの場合は0ビット目が1となる
データ3はサーボの移動時間の下8ビットでサーボの移動時間は実際の秒数の100倍を指定する(1.23秒の場合は123)
データ4はサーボの移動時間の上8ビット
SUMはチェックサムで送信するバイトの全て(先頭2バイトとSUMを除く)の排他的論理和(XOR)を計算する。
サンプルスケッチは下のURLからダウンロードできます。
stand_sketch.zip
sevo_test.ino 首を左右に振る
guru_guru.ino 首をグルグル回す一発芸
test_board.ino 5つのボタンで首を動かす 1:右を向く 2:左を向く 3:正面を向く4:首を1回振る 5:首を2回振る
right_arm_test_board.ino ロビ2の右腕のサーボテスト サーボID17,18 リセットボタンで動作(Arduino起動時)
head_arm_test.ino ロビ2スタンドの頭と両腕のサーボテスト サーボID1,17,18,20,21 リセットボタンで動作(Arduino起動時)
実際に動かした動画です。
なお組み立てガイドに記載されている以外の事を行うとサーボへの影響を及ぼす可能性があるのであくまでも自己責任という事でお願いします。
目次に戻る