DXSHIELDはDynamixelシリーズと通信するためのI/F(RS-485・TTL)をArduinoに増設するシールドです。両I/Fのコネクタに電源を分配する機能も合わせ持ちます。
また、DXSHIELDのI/Fで通信できるデバイスであれば、Dynamixel以外のサーボモータにも適用できます。
※本製品は半田付け作業を要求します。
※旧バージョンのBTE074に対してジャンパの追加やI/F部分のモジュール化などの仕様変更がなされています。
型式等 | 数量 | 備考 |
本体 | 1 | E133C |
I/F変換ボード | 1 | TTL2DXIF |
電源コネクタキット | 1式 | ハウジング JST VHR-2N x1 コンタクト JST SVH-21T-P1.1 x2 ベース付ポスト JST B2P-VH-B x1 ジャック CUI PJ-047AH x1 |
シールド用ピンソケット | 1式 | 6P x1, 8P x2, 10P x1 |
ジャンパ | 3個 |
品番 | BTE074B | |
PCBリビジョン | E133C (2層) | |
動作温度範囲 | 0~60℃ 結露なきこと | |
外形寸法 | 約52x53mm | |
重量 | ||
電源 | CN1/CN12:DC6~24V (Dynamixelが要求する電源) 内部ロジック:DC5V±5% (Arduinoより供給) | |
コネクタ等 | JST B4B-EH x5 JST B3B-EH x5 | |
各I/F仕様 | TTL2DXIFに準拠 |
Pin No. | Name | Used in DXSHIELD |
1 | IO8 | yes |
2 | IO9 | yes |
3 | IO10/SS | no |
4 | IO11/MOSI | no |
5 | IO12/MISO | no |
6 | IO13/SCK | no |
7 | GND | yes |
8 | AREF | no |
9 | AD4/SDA | no |
10 | AD5/SCL | no |
Pin No. | Name | Used in DXSHIELD |
1 | IO0/RX | yes |
2 | IO1/TX | yes |
3 | IO2 | no |
4 | IO3 | no |
5 | IO4 | no |
6 | IO5 | no |
7 | IO6 | no |
8 | IO7 | no |
Pin No. | Name | Used in DXSHIELD |
1 | - | no |
2 | IOREF | no |
3 | RESET | no |
4 | 3V3 | no |
5 | 5V | yes |
6 | GND | yes |
7 | GND | yes |
8 | Vin | yes |
Pin No. | Name | Used in DXSHIELD |
1 | AD0 | no |
2 | AD1 | no |
3 | AD2 | no |
4 | AD3 | no |
5 | AD4/SDA | no |
6 | AD5/SCL | no |
![]() | JP1をショートした状態でArduinoのVinから電源を供給してはならない。 CN2~CN11の電源がJP1を介してArduinoより供給されるため、使用デバイスの負荷条件によってはJP1等の許容電流を超え基板が損傷する。 |
![]() | JP1をショートした状態でCN1もしくはCN12とArduinoの外部電源に各々個別の電源を供給してはならない。 両電源が短絡するため、電源や負荷の条件によってはJP1や基板のみならず電源までが損傷する。 |
B2P-VH-Bを実装して使用。CN12を同時に実装する事はできない。
![]() | 電源の逆接続は電源回路の即時破壊・全損扱いとなる。 |
BPJ-047AHを実装して使用。CN1を同時に実装する事はできない。
端子番号 | 信号名 |
1 | GND |
2 | VDD |
3 | SIGNAL(BIDIRECTION) |
端子番号 | 信号名 |
1 | GND |
2 | VDD |
3 | RS-485 D+ |
4 | RS-485 D- |
I/F | Device Name |
TTL | Dynamixel AX・MX(TTL版)・XLシリーズ全般・XM(TTL版), DXMIO(TTL版), ToFセンサ(TTL版) |
RS-485 | Dynamixel DX・RX・EX・MX(RS-485版)・XM(RS-485版)・XH・PROシリーズ全般, UD3, UD3.5, UD4, USS3, DXMIO(RS-485版), ToFセンサ(RS-485版) |
要求される電源電圧と対応するプロトコルが同じであれば、I/Fを問わず同時に使用できます。
ここでは予めJP1~JP4に同梱のピンソケットが実装され、CN1ないしCN12には電源供給用のコネクタないしジャックが実装され、U1にTTL2DXIFが装着されているものとします。
半田付けを終えたらDXSHIELDをArduinoに装着します。
Arduinoの種類に依存する部分が多々ありますが、ここではDXSHIELDをArduino UNOに装着して使用する前提として3つのモードを説明します。
ArduinoのIO8・IO9ピンをソフトウェアシリアルで構成しDynamixelと通信するモードです。ArduinoのUSBシリアル通信機能(ハードウェアシリアル)はDynamixelの制御以外の目的に使用できます。
Arduinoには任意の端子をシリアル通信の送受信端子として使用するSoftwareSerialライブラリが用意されています。最大57600bps程度であれば概ね実用レベルです。
JP2とJP3はいずれもショートさせ、SW1を図の位置(SOFT)に切り替えます。
本設定によりArduinoのデジタル入出力端子のうちIO8とIO9をソフトウェアシリアル用の端子として使用するため、この2つの端子は他の目的で使用してはなりません。
また、Arduinoにユーザのスケッチを転送する際は、無条件に本モードに変更しておかないと転送に失敗します。
ArduinoのIO0・IO1ピンをハードウェアシリアル(Serial0)で構成しDynamixelと通信するモードです。ArduinoのIO0・IO1に接続されたUSBシリアル通信機能を犠牲にしても高速かつ安定した通信を要求する場合にの設定です。
予めソフトウェアシリアルモードにおいてライブラリによる制御の理解が得られ、スケッチの書き込み時以外にUSBシリアルによる通信を必要としない場合に本設定を選択します。
JP2とJP3はいずれもショートさせ、SW1を図の位置(HARD)に切り替えます。
本設定を行った場合は、自身のスケッチでSerialライブラリを使用してはなりません。また、IO0・IO1ピンとUSBシリアル通信機能は他の目的で使用する事ができません。
なお、スケッチをコンパイルして描き込む際は、本設定が電気的にUSBシリアル通信機能に影響を及ぼすため、その都度ソフトウェアシリアルモードに切り替える必要があります。
Arduinoに搭載されたUSBシリアル通信機能を用いてPCなどからDXSHIELDをDXHUBライクに直接使用するモードです。Dynamixelの内部パラメータの変更や制御をPCから行う場合は本設定を行います。
まずArduino IDEにてデフォルトで生成されるコード(コードとしては意味を持たない無限ループするだけのスケッチ)をコンパイルし、予めArduinoに書き込んでおきます。このほぼ空のスケッチはDigital I/Oやシリアル通信を使用しないため、PCとDynamixel間の通信を阻害しません。なお、これに該当する独自スケッチであればこの限りではありません。
void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: }
DXSHIELDをソフトウェアシリアルモードに設定してこの何もしないスケッチを書き込んだ後、USBパススルーモードにします。
JP2とJP3はいずれもショートさせ、SW1を図の位置(THROUGH)に切り替えます。
なお、ArduinoのUSBシリアルを担うマイコンに書き込まれているファームウェアの都合で、大きなデータを連続で送受信する事ができません。プロトコルV1を装備するDynamixelシリーズであれば概ね問題はありませんが、プロトコルV2を装備するDynamixelシリーズではコントロールテーブルの拡大に伴いこの問題が露見します。
また、ArduinoのUSBシリアルとRoboPlusとの相性もよろしくないので、本モードを積極的に使用する事は推奨しません。
DXSHIELDをUSBパススルーに設定にする事で、Dynamixelのコントロールテーブルの状態をモニタしたりパラメータの変更や動作確認を簡便に行うソフトウェアであるDynamixel Configuratorが利用できます。
公開されているバージョンはWindows版のみとなります。
Dynamixel Configuratorの詳細はこちらにて。
またROBOTIS社提供のRoboPlus 1.0とRoboPlus 2.0が一部使用できます。
一部というのは、ArduinoのUSBシリアル通信機能は過度なトラフィックがかかるとデータがドロップするのと、RoboPlusにおいて検索を行わせている最中にボーレートの切り替えが発生するとArduinoが再起動する場合がある事がわかっていますので、USBパススルーモードでのRoboPlusの使用は推奨できません。
DXSHIELDをUSBパススルーにする事で、Dynamixel Libraryを併用してシリアル通信やプロトコルを意識せずにPCから制御する事ができます。
詳細はDYNAMIXEL Protocol 1.0 LibraryとDYNAMIXEL Protocol 2.0 Libraryにて。
なお、ArduinoのUSBシリアル通信機能は過度なトラフィックがかかるとデータがドロップするため、運用には予め十分な検証を行っておくべきです。
DXSHIELDをソフトウェアシリアルもしくはハードウェアシリアルモードに設定した場合、ArduinoのスケッチからDynamixelを制御するためのライブラリが利用できます。
PC版DYNAMIXEL Protocol 1.0/2.0 Libraryと同様にプロトコルやシリアル通信を意識せずともコントロールテーブルへの読み書きが行えますが、Arduino版は一部機能を限定したサブセット版となります。
DXLIBのインストールは、ArduinoのIDEの「スケッチ→ライブラリのインクルード→.ZIP形式のライブラリをインストール...」メニューを使用してダウンロードしたZIPファイルを選択するだけです。
インストールが完了すると、ユーザーフォルダ配下に「Arduino/libraries/dxlib」が作られ、ライブラリのソースといくつかのサンプルプログラムがその中に展開されます。詳しくはサンプルプログラムとライブラリのソースを参照して下さい。
DXLIB v1.2以降で使用できるヘッダファイルとAPIは以下の通りです。
#include <dxlib.h> DXLIB dxif (true); // select software serial void setup() { dxif.begin (57600); }
#include <dx2lib.h> DX2LIB dxif (true); // select software serial void setup() { dxif.begin (57600); }
#include <dx2lib.h> // dxifの名前でDynamixel Protocol V.2 Libraryをインスタンス化 // ソフトウェアシリアルモードで使用 DX2LIB dxif(true);
// 生成されたdxifを57143bpsで初期化 void setup() { dxif.begin (57143); }
// ID=1へPingインストラクションパケットを送信 dxif.TxPacket (1, 0x01, NULL, 0);
uint8_t buf[10], id, err; uint16_t len; // ID=1へPingインストラクションパケットを送信 dxif.TxPacket (1, 0x01, NULL, 0); // ステータスパケットを受信 dxif.RxPacket (buf, sizeof (buf), &id, &len, &err)
// ID=1のAX-12のLEDを取得 uint8_t led; dxif.ReadByteData (1, 25, &led, NULL);
// ID=1のAX-12からPresentPositionを取得 uint16_t ppos; dxif.ReadWordData (id, 36, &ppos, NULL);
// ID=1のAX-12のLEDを点灯 uint8_t err; dxif.WriteByteData (id, 25, 1, &err);
// ID=1のAX-12のGoalPositionを511に変更 dxif.WriteWordData (id, 30, 511, NULL);
// ID=1~5の5個のAX-12のLEDへ点滅を指令 uint8_t ids={1,2,3,4,5}; uint16_t leds={1,1,1,1,1}; dxif.WriteSyncByteData (ids, 30, leds, 5);
// ID=1~5の5個のAX-12に個別のGoalPositionを指令 uint8_t ids={1,2,3,4,5}; uint16_t poss={100,200,300,400,500}; dxif.WriteSyncWordData (ids, 30, ppos, 5);
また、Arduino IDEのバージョンによっては「SoftwareSerial.h: No such file or directory」のコンパイルエラーが発生しますので、その場合は自信のスケッチの先頭に以下の1行を挿入してコンパイルします。
#include <SoftwareSerial.h>
Serial0を利用する限りUNOと同様の運用になります。MEGAに備わっているSerial1~Serial3のハードウェアシリアルポートを利用する際は以下に従います。
DXLIB dxif (false, &Serial3); DX2LIB dxif (false, &Serial3);
MEGAの仕様上IO8がソフトウェアシリアルとして使用する事ができないため、UNOで想定するソフトウェアシリアルモードで運用する事ができません。それでもソフトウェアシリアルで使用する場合は、MEGAのハードウェアシリアルモードと同様にJP2-2とJP3-2を直接MEGAのソフトウェアシリアルとして利用できる任意の端子に直結します。
UNOのUSBパススルーモードと同様です。