HiwonderのシリアルサーボをM5StickCで動かす

投稿者:

こんにちは。鹿島です。

5月に取り扱いを開始した、Hiwonderのシリアルサーボの紹介です。

今回はLX-15D シリアルバスサーボを使ってみます。

LX-15Dは本体部分が44x23x28 mmと小型にも関わらず、最大17 Kg・cmのトルクとフィードバック機能を持ったすごいやつです。それぞれのサーボにIDを振り当てることで、チェーン接続も可能です。シリアルサーボというと高価なイメージを持っている方も多いかと思いますが、このサーボは2,409円と比較的安価です。

そんなLX-15Dを、みんな大好きM5StickCからUIFlowを使い制御してみます。

必要な物


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を導入し、ブロックベースでコードを書いていきます。

https://flow.m5stack.com/

配線

3ピンJST型コネクタ付きジャンパワイヤを使ってブレッドボードに線を引き出し接続します。一般的な配線の色と違うので注意が必要です(赤:シリアル, 黒:Vcc, 黄:GND)。前述しましたが、この配線ではM5StickC→サーボの一方向の通信のみが可能です。サーボ→M5StickCの通信はできません。

コード①

二つのサーボを異なる速度で動かします。

m5fファイルは以下からダウンロードできます。

hiwonderSerialServo.m5f

動画①

output

コード②

このサーボはDCモータ機能(連続回転)にも対応しているため、普通のモータのようにも動かせます。

負数の処理を考える必要があるため、ややこしいですね。

こちらも以下からm5fファイルをダウンロードできます。

hiwonderSerialServo2.m5f

動画②

まとめ

M5StickCからHiwonderのシリアルサーボを制御してみました。今回は使用しませんでしたが、回路を組めばサーボからのフィードバックも可能です。そのうちHATにしてみたいですね。

シリアルサーボはPWM制御のサーボよりも複雑なプログラムが必要ですが、チェーン接続できる、フィードバック制御が可能など、利点も多いです。

皆様もHiwonderのシリアルサーボを使ってみてはいかがでしょうか?