こんにちは。鹿島です。
5月に取り扱いを開始した、Hiwonderのシリアルサーボの紹介です。
今回はLX-15D シリアルバスサーボを使ってみます。
LX-15Dは本体部分が44x23x28 mmと小型にも関わらず、最大17 Kg・cmのトルクとフィードバック機能を持ったすごいやつです。それぞれのサーボにIDを振り当てることで、チェーン接続も可能です。シリアルサーボというと高価なイメージを持っている方も多いかと思いますが、このサーボは2,409円と比較的安価です。
そんなLX-15Dを、みんな大好きM5StickCからUIFlowを使い制御してみます。
必要な物
- HiWonder シリアルバスサーボコントローラ/テスター
- HiWonder LX-15D シリアルバスサーボ 17kg/240°/フィードバック付き/DCモーター機能付き
- ACアダプター 6V/3.8A(ACコード付)
- 端子台出力のDCジャック
- M5StickC
- 3ピンJST型コネクタ付きジャンパワイヤ
- 適当なジャンパワイヤ
Windowsソフトウェアから動かす
まずは動作確認として、サーボコントローラにサーボを接続し、Hiwonderから提供されているWindowsソフトから操作してみます。
サーボ用の電源を接続する
電源にはACアダプタを使用します。サーボの動作電圧は6〜8.4 Vなので、スイッチサイエンスで扱っているACアダプタだと、6V/3.8Aが使えます。
DCジャックから引き出した電源をサーボコントローラのターミナルブロックに接続します。
サーボコントローラの電源スイッチを入れるとLEDが点灯します。電源が繋がっていない場合や、電圧が不足している場合はブザー音が鳴り響きます。
サーボをサーボコントローラに接続する
サーボ付属のケーブルで、サーボとサーボコントローラを接続します。いくつか繋ぐ場所がありますが、どこでも大丈夫です。後述するサーボIDを設定するため、接続するサーボは1つだけです。
また、このコネクタはいわゆるPHコネクタのようです。
Windowsソフトのインストール
ここ(GoogleDriveですが公式配布場所です)にあるBus Servo Terminal V2.3をダウンロードし、インストールします。なぜか途中文字化けしていますが、左を選択すれば進みます。
CH341のUSBドライバが入っていない場合はそれもインストールする必要があります。
自分は普段Macを使用しているので、Paralells Desktop上のWindows10にインストールしました。なお、Mac版と思わしきソフトウェアがApp Storeからダウンロード出来ますが、自分の環境では動作しませんでした。残念。
サーボコントローラをPCにUSB接続
Bus Servo Terminalを起動し、付属のUSB-MicroケーブルでPCに接続します。認識されれば画面右上のランプが緑になります。
サーボIDの設定
複数のサーボを接続する場合は各サーボに別々のIDを振り当てる必要があります。一つずつコントローラに接続し、Servo Testタブから設定します。
左上のIDを被らないように変更し(0~253)、下のApplyでサーボに反映させます。この画面では、各サーボの電圧、電流、温度の取得も可能です。LEDが鬱陶しいと思う人はLED ControlをOFFにしましょう。
動かす
複数のサーボをチェーン接続したら、General Modeタブから動かせます。
サーボの連続した動作を「アクション」としてコントローラに保存することも出来ますが、ここでは説明は省きます。
USBコントローラを試す
サーボコントローラにはUSB端子があり、コントローラを接続できます。ただし、HiWonderが販売しているPS2風コントローラは無線タイプのもので技適が取れていないため、残念ながら国内では販売できません。
マニュアルを見る限りでは、前述のWindowsソフトでアクションを設定し、それが各ボタンに振り分けられるようです。
試しに有線のLogicool製コントローラを繋いでみましたが、動きませんでした。XInputモードだと全く反応無しでした。DirectInputモードだと、ボタンを押すごとにブザーが鳴って反応はしているもの、アクションは実行されません。
USBコントローラのプロトコルが違うのか、アクションの設定が間違っているのかは不明です。
M5StickCからの制御方法
本題です。
ArduinoやM5などのマイコンボードから制御する場合、サーボとの接続方法は2種類あります。サーボコントローラを使うか使わないかです。
①シリアルバスサーボコントローラを経由してサーボに接続する
画像のつなぎ方になります。
サーボコントローラ<->マイコンの通信プロトコルはSerial Bus Servo > LX-224 Bus Servo > Attachment (Secondary decelopment)
にあるLSC Series Servo Controller Communication Protocol V1.2に記載されています。なぜかBus Servo Controllerの方にないので注意です。
サンプルコードはBus Servo Controller > Appendix (secondary development) > arduino development
にあるこれです。
②シリアルサーボとマイコンのシリアルを直接接続する
サーボコントローラを介さずに直接接続するやり方です。この場合、電源は別から取る必要があります。
Arduinoの場合は、9 VほどのACアダプタをArduinoに接続して、VINピンから電源を取るのが楽そうですね。
サーボ<->マイコンの通信プロトコルはSerial Bus Servo > LX-224 Bus Servo
にあるHiwonder Bus Servo Communication Protocolに記載されています。
Hiwonderのシリアル線は1線しかないので、TXとRXを共用しています。双方向にやりとりする場合は、Hiwonder Bus Servo Communication Protocol記載の以下のような回路を組む必要があります。
マイコン->シリアルサーボの単方向であれば、TXだけをシリアル線に繋げば良いです。
サンプルコードはBus Servo Controller > Bus Servo Communication Routines
にあるこれらです。
M5StickCから制御する
②の方法でM5StickCと接続し、制御してみます。
M5StickCにはUIFlowを導入し、ブロックベースでコードを書いていきます。
配線
3ピンJST型コネクタ付きジャンパワイヤを使ってブレッドボードに線を引き出し接続します。一般的な配線の色と違うので注意が必要です(赤:シリアル, 黒:Vcc, 黄:GND)。前述しましたが、この配線ではM5StickC→サーボの一方向の通信のみが可能です。サーボ→M5StickCの通信はできません。
コード①
二つのサーボを異なる速度で動かします。
m5fファイルは以下からダウンロードできます。
動画①
コード②
このサーボはDCモータ機能(連続回転)にも対応しているため、普通のモータのようにも動かせます。
負数の処理を考える必要があるため、ややこしいですね。
こちらも以下からm5fファイルをダウンロードできます。
動画②
まとめ
M5StickCからHiwonderのシリアルサーボを制御してみました。今回は使用しませんでしたが、回路を組めばサーボからのフィードバックも可能です。そのうちHATにしてみたいですね。
シリアルサーボはPWM制御のサーボよりも複雑なプログラムが必要ですが、チェーン接続できる、フィードバック制御が可能など、利点も多いです。
皆様もHiwonderのシリアルサーボを使ってみてはいかがでしょうか?