M5Stackで制御する！GWS社製360°連続回転サーボモータ「S35 STD」

GWS社製360°連続回転サーボモータ「S35 STD」の制御方法を解説します。
「S35 STD」は、GWS社のロボティクス用サーボモーターで、360度、左右にエンドレスで回り続ける連続回転サーボモータです。パルス幅によりスピード調整可能で、1.5msで停止し、1.5msを中心にパルス幅を大きくすると左に回転し、パルス幅を短くすると右に回転します。パルス幅に応じてスピードが変化します。
<br>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21408/77bc7020-642b-9a14-95a5-42796193ffff.png)


# M5Stackを使った制御に挑戦！
構成は以下のとおりである。

* [M5StickC Plus](https://www.switch-science.com/products/6470)
* [HY4pServo](https://www.switch-science.com/products/6922)
* [360°連続回転サーボ](https://akizukidenshi.com/catalog/g/g108305/)


<br>
手元にあったデバイスが「M5StickC Plus」であったのでそちらを使用したが、基本的にはM5Stack系デバイスなら問題なく使用できる。

「HY4pServo」は、M5StackなどHY4pコネクタ（いわゆるGrove互換コネクタ）、市販のサーボモータに接続することが出来る基板である。M5Stackなどに直接ピンを刺してサーボモータを制御することも可能であるが、汎用ケーブルをそのまま使用してサーボモータに接続できる点や、バイパスコンデンサが搭載されているので、デバイス側の電源安定化のメリットなどがある。



# 360°連続回転サーボモータ「S35 STD」の仕様とは？
メーカーの製品サイトからデータシートを入手して仕様を確認するのが一般的かと思うが、どうやらこちららしいが、制御方法がいまいち分からない。

https://www.gwsus.com/english/product/servo/robotic.htm

<br>
そこで、GWS社製360°連続回転サーボモータ「S35 STD」を販売しているオンラインショップのサイトなどから仕様を把握する。こちらより、電源電圧／スピード／トルクなどの情報を得ることができる。制御方法は、他の多くのサーボモータと同じでPWM信号で制御できそうだ。ただし、具体的にどういったパラメータで制御すれば良いかなどの情報を知ることが出来ない。

* [「秋月電子」：GWS 360°連続回転サーボ(ローテーションサーボ) S35 STD (GWSV0008A)](https://akizukidenshi.com/catalog/g/g108305/)
* [「共立エレショップ」：【販売終了】ロボット用サーボモーター▲航空便不可▲/S35 STD](https://akizukidenshi.com/catalog/g/g108305/)
* [「Pololu」：GWS S35 STD Continuous Rotation Servo](https://akizukidenshi.com/catalog/g/g108305/)
* [「デジットBlog」：ぐるぐる回るサーボモータGWSの「S35 STD」が入荷！](http://blog.digit-parts.com/archives/51875549.html)


# 360°連続回転サーボモータの具体的な制御方法を知るために更に進める調査
GWS社製360°連続回転サーボモータ「S35 STD」を制御したい。メーカーや販売代理店の情報のほか、一般的なウェブサイトの情報を含めて、更に調査を進める。








公式なデータシートなどではないが、Qiitaに記載されていた[『ESP8266(ESPr Developer)とMilkcocoaとローテーショナルサーボで簡易ラジコン』](https://qiita.com/yuji_miyano/items/240a1f34a83ce160649f) の記事が参考になる。

この記事では、実際に「S35 STD」を制御したプログラムが公開されている。
ArduinoIDEで開発をしているようで、サンプルコードが掲載されているが、その中で、以下のコメントを確認できた。

```
  // サーボ出力 1.5ms(停止)を中心に、1.0ms~2.0msのパルス幅で動く。パルス幅によって速度が変わる
```

1.5msecで停止することに関しては、「デジットBlog」と同じであり、おそらく探している情報のヒントになる可能性が高く、更にこちらのコメントでは、「1.0ms～2.0msのパルス幅で動く」と記載されており、重要な情報となりそうだ。

整理すると以下となる。

* モータ停止：1.5msecパルスで停止
* 動作範囲：1.0msec～2.0msecのパルス幅で制御

# UIFlowの「Servo Unit」の機能を使う！
ここまでの情報を踏まえて、UIFlowで用意されている「Servo Unit」の機能がそのまま使えそうなことが分かる。おそらく、こちらの書き込み間隔を設定することで制御可能で、「S35 STD」では、1000～2000msecを設定することで、生回転／逆回転の制御が可能なことが判明した。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21408/88bb9258-7d33-d8a2-a66e-a778b238dfb7.png)

実際に、UIFlowで試してみることで、制御可能なことも確認できた。

# GWS社製360°連続回転サーボモータ「S35 STD」の制御の先に見えてきた現実！


今回は、[M5Stack Japan Creativity Contest 2024](https://www.switch-science.com/pages/m5stack-japan-creativity-contest-2024)に応募するため、360°連続回転サーボモータを使用したいと思って、手元にあった「S35 STD」を使用した。締切間近で手元にある部材でなんとか作品を完成させる必要があり、GWS社製360°連続回転サーボモータ「S35 STD」を採用することとした。

なので、モーターとしては、M5Stack社が販売してる[Servo Kit 360°](https://www.switch-science.com/products/6479)でも良かったのだが、それが手元になかったため、GWS社製360°連続回転サーボモータ「S35 STD」を使用することにした。
一旦、それぞれの仕様を整理する。

* GWS社製360°連続回転サーボモータS35 STDの回転速度：4.8Vで0.15秒／60°、6.0Vで0.13秒/60°
* M5Stack社製Servo Kit 360°の回転速度：4.8Vで0.10秒／60°、6.0Vで0.9秒/60°

<br>
コンテストに応募した作品のモータとしては、回転スピードが高く、トルクはそれほど必要ではない作品であった。そのため、手元に部品の有無の問題がなければ、素直にM5Stack社が販売している「Servo Kit 360°」を使用することが良いことも分かった(笑)

作品は完成しているが、タイミングを見て、サーボモータを変更することにする(笑)

また、1000～2000msecのパルス幅で制御自体は出来ており、おそらく最大回転速度まで出ていそうな感じではあるが、その設定値自体の根拠がまだ明確ではないという課題も残っている。

# デジタル回転混色独楽
👇こちらがM5Stack Japan Creativity Contest 2024に応募した作品

https://protopedia.net/prototype/5769

<br>

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21408/c6175f07-f676-80af-33ea-62d1adf90149.png)

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21408/71e7f607-b0f1-e779-23f8-2ff2849ff238.png)