Hiwonder製サーボ無限回転化! Arduinoで簡単コントロール

まとめると…
便利で使いやすい無限回転サーボですが、その種類は意外と限られてしまいます。そこで比較的入手しやすいHiwonder製サーボモータを無限回転化する方法についてまとめました!
シリアル通信(UART)のできるArduinoなどのボードがあれば、簡単に無限回転化できます。
無限回転サーボとは
無限回転サーボとは角度を制御できる通常のサーボモータとは異なり、回転方向と速度のみを指定できるサーボモータです。その分角度の制限がなく、車輪など一定方向に回り続ける機構にも採用することができます。連続回転サーボと呼ばれることもあります。
また通常のDCモータなどを利用するものに比べ管理、操作がサーボモータ単体で成立するため扱いやすいのも特徴です。
このように無限回転サーボは非常に便利なのですが、無限回転サーボとして提供されているサーボモータはあまり多くありません。通常のサーボを改造して無限回転化するなどの方法も存在しますが、なかなか手間と技術が必要になってしまいます。
Hiwonder製サーボモータと無限回転化できるもの
一方でHiwonder製サーボモータのうち、簡単に無限回転化できるものがあります。Hiwonder製サーボモータにはPWMサーボとシリアルバスサーボという二種類があります。このうち今回取り上げるのはシリアルバスサーボの方です。例えば以下の製品があてはまります。
Hiwonder LX-1501: https://www.hiwonder.com/collections/bus-servo/products/lx-1501
https://www.switch-science.com/products/7135
Hiwonder LX-224: https://www.hiwonder.com/collections/bus-servo/products/lx-224

Hiwonderのシリアルバスサーボであれば他も同様に動作するようですので、以下の商品も当てはまるかと思います(未検証)。
Hiwonder LX-225: https://www.hiwonder.com/products/lx-225
Hiwonder HTS-35H: https://www.hiwonder.com/collections/bus-servo/products/hts-35h
こうしたシリアルバスサーボであれば、設定ひとつで簡単に無限回転化できます。
Hiwonder Serial Bus Servo Controllerと専用ソフトウェアを使うと簡単にサーボモータの設定や操作ができます。ところが専用ソフトウェアでは複数個のサーボモータを無限回転化することができないようで(2025/6/17現在、Bus Servo Control V3.0)、車輪などに複数個使いたい場合は非常に困ります。
Hiwonder Serial Bus Servo Controller: https://www.hiwonder.com/products/serial-bus-servo-controller
https://www.switch-science.com/products/7128
しかし、こうした専用コントローラ、ソフトウェアを利用しなくてもHiwonder製のシリアルバスサーボモータは簡単に制御できますし、自由に無限回転化することが可能です。その方法について見ていきましょう!
回路構成
今回は制御するためのボードとしてArduino Uno R4 Minimaを想定します。このほかにもシリアル通信(UART)が可能なものなら利用可能です。またサーボモータにはLX-1501を想定しますがほかのものでも同様です。図2のように接続します。


LX-1501のVINには7.4vの電源を接続します。今回は3.7vの14500リチウムイオン電池を直列で2本使用しました。Arduino側にも別途電源を供給します。こちらはモバイルバッテリなど一般的なものでかまいません。LX-1501のGNDにはArduino, 電源側両方のGNDを接続し、SIG(信号線)にはシリアル通信におけるTX、Arduino Uno R4 Minimaではデジタルピン1に接続します。
サーボモータとの接続にはJST PHコネクタが使われています。付属のケーブルや下記のようなコネクタを利用して接続します。
またLX-1501, LX-224などのサーボモータはデイジーチェーン接続が可能なので、複数個サーボモータを接続したい場合はすでにArduinoなどのコントロールボードと接続済みのサーボモータから直接接続して増やしていくことが可能です(図4)。

以降、実際の利用の流れは次のようになります。
- 1) ID番号の変更と割り当て
- 2) サーボモータを動作させる
1)ID番号の変更と割り当て
HiWonderのシリアルバスサーボにはIDが割り当てられています。この仕組みにより特定のサーボそれぞれに別々の動きを指示することができます。デフォルトではID1が割当たっているようなので、まずは必要に応じてこれを変更します。
2)サーボモータを動作させる
次にサーボモータに信号を送り動作させます。指定したID番号のサーボモータの動作を変えることができるので、どのサーボモータも好きな方向に回転させることができます。今回は無限回転を扱いますが、通常の角度制御と併用することも可能です。
プログラム
それではプログラムを見ていきましょう。まずはID番号の変更からです。Arduinoスケッチとして用意します。
HiWonder公式から提供されているソースコードのうち、”include.h“と”SerialServo.h“を利用します。用意したスケッチと同じディレクトリにこの二つのファイルを加えます。(上記ページにはhttps://www.hiwonder.com/→Tutorials→Servo&Servo Controller→Hiwonder Serial Bus Servo→Download All→LX-1501 Serial Bus Servo→1. Tutorial→2. Bus Servo Secondary Development→1. Arduino Developmentからたどり着きます。(2025/06/17現在))
include.hには定数、SerialServo.hには関数が定義されています。
このIDを変更するプログラムを用意します。プログラム(Arduinoスケッチ)は以下のようになります。接続するサーボは1つのみにしてください。
#include "include.h"
#include "SerialServo.h"
void setup() {
Serial1.begin(115200);
delay(1000);
int oldID = 1;
int newID = 2;
LobotSerialServoSetID(Serial1, oldID, newID);
}
void loop() {
}
oldIDが現在のID、newIDが変更するIDになります。ID変更に用いる関数はLobotSerialServoSetIDです。
サーボモータとArduinoを接続した状態でこのプログラムを実行するとIDが変更されるはずです。必要に応じてnewIDの部分の数字を変更してください。
ここまでできたら、もう一つスケッチを作成します。サーボモータを実際に動かしてみましょう。
#include "include.h"
#include "SerialServo.h"
int speed = 700;
int wait = 3000;
int ServoID = 2;
void setup() {
Serial1.begin(115200);
delay(1000);
}
void loop() {
LobotSerialServoSetMode(Serial1, ServoID, 1, speed);
delay(wait);
LobotSerialServoSetMode(Serial1, ServoID, 1, 0);///stop rotation
delay(1000);
LobotSerialServoSetMode(Serial1, ServoID, 1, -speed);
delay(wait);
LobotSerialServoSetMode(Serial1, ServoID, 1, 0);///stop rotation
delay(1000);
}
通常の角度制御の場合はLobotSerialServoMoveという関数を利用するのですが、無限回転サーボとして用いる場合はLobotSerialServoSetModeを利用します。LobotSerialServoSetModeでは第1引数がHardwareSerialなのでArduinoのHardwareSerialを、第2引数に制御するサーボIDをとります。第3引数はモード指定で、0で角度制御、1でモーターモードになります。今回は無限回転サーボとして用いたいので1を入れます。第4引数は回転速度になります。-1000~1000の値をとり、負の値のときは逆回転となります。上記のサンプルプログラムでは正転、停止、逆転、停止の順でモータが回転します。
ID番号を振り分けてやればそれぞれに回転を指定してやることが可能なので、ロボットの車輪などにも用いることが可能です。また角度指定と同時に利用することもできるので、車輪と通常の角度サーボをすべてデイジーチェーン接続し、役割ごとに異なる動きをさせることも可能です。