サーボモーター入門

これは株式会社ACCESS Advent Calendar 2019 15日目の記事です。
(当日投稿に間に合いませんでした。。）

ACCESS Advent Calendarに似合わず、ハードウェアの「サーボモーター」の話です。
本記事は「入門」記事です。浅く話ですので、御了承ください。

サーボモーター
==========

サーボモーターというのは、こんなやつです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38555/ac05c552-8be7-0418-397a-b368674c191e.png)
（[出典](https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Servomotor_01.jpg)）

ロボット、ラジコンなどに使います。通常のDCモーターと違って、以下の機能があります。

* ギアを内蔵
* 指示した確度（位置）・電流・トルクを目指して動作する機構
* （一部のサーボ）現在の確度・電流・トルクの取得

ようは、タミヤの以下のようなギア付きモーターに、センサーが付いていて、Arduinoなどのマイコンボードから、指定した位置（または電流・トルク）に動かすことができるものと思うと良いと思います。

<a href="https://www.amazon.co.jp/gp/product/B002R0DQD4/ref=as_li_ss_il?ie=UTF8&hvadid=256014915522&hvpos=1o3&hvnetw=g&hvrand=12217997710432082925&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009274&hvtargid=pla-441603150368&psc=1&th=1&psc=1&linkCode=li2&tag=ikeyasuki-22&linkId=656691ed106714827f06ea960f953680&language=ja_JP" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B002R0DQD4&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=ikeyasuki-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=ikeyasuki-22&language=ja_JP&l=li2&o=9&a=B002R0DQD4" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

聞いただけでも色々使えると思いませんか？

例えば、こういった歩行ロボットはサーボモーターの塊です。全ての関節がサーボでできていて、それを連結して、歩行が実現できます。
もしこれをサーボモーターを使わずに作ったら、全ての間接に[ロータリーエンコーダ](https://ja.wikipedia.org/wiki/%E3%83%AD%E3%83%BC%E3%82%BF%E3%83%AA%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%80)をつける必要があり、工作がとても大変になります

<a href="https://www.amazon.co.jp/%E3%83%B4%E3%82%A4%E3%82%B9%E3%83%88%E3%83%B3-%E4%BA%8C%E8%B6%B3%E6%AD%A9%E8%A1%8C%E3%83%AD%E3%83%9C%E3%83%83%E3%83%88-Robovie-nano-%EF%BC%88%E7%B5%84%E7%AB%8B%E3%82%AD%E3%83%83%E3%83%88%E7%89%88%EF%BC%89-%E3%83%A9%E3%82%B8%E3%82%B3%E3%83%B3/dp/B002QYYYDW/ref=as_li_ss_il?ref_=fsclp_pl_dp_9&linkCode=li2&tag=ikeyasuki-22&linkId=8a525cf8ebe32b2e21ebefcd9c702e4b&language=ja_JP" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B002QYYYDW&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=ikeyasuki-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=ikeyasuki-22&language=ja_JP&l=li2&o=9&a=B002QYYYDW" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

用語
====

サーボの用語説明をします。

### サーボホーン・サーボアーム

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38555/ac05c552-8be7-0418-397a-b368674c191e.png)

上記で白い部分を**サーボホーン**と言います。サーボアームと言ったりもします。形は色々ありますが、単に、サーボモーターの軸に取り付けるジョイントが、サーボホーンです。

<a href="https://www.amazon.co.jp/Futuba-MG995-MG996R-MG946-%E3%82%B7%E3%83%AB%E3%83%90%E3%83%BC/dp/B01ALCX7C4/ref=as_li_ss_il?_encoding=UTF8&pd_rd_i=B01ALCX7C4&pd_rd_r=a23b7cb8-b610-4d0d-937c-e837cbc58683&pd_rd_w=rEdW2&pd_rd_wg=A43RI&pf_rd_p=1585d594-d9d0-474b-8a4e-69eca1566911&pf_rd_r=TX8N75F2B9TK4R2VWNBK&psc=1&refRID=TX8N75F2B9TK4R2VWNBK&linkCode=li2&tag=ikeyasuki-22&linkId=14f74772055a8c545e85c945ff979d9a&language=ja_JP" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B01ALCX7C4&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=ikeyasuki-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=ikeyasuki-22&language=ja_JP&l=li2&o=9&a=B01ALCX7C4" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

<a href="https://www.amazon.co.jp/%E3%82%BF%E3%83%9F%E3%83%A4-TRF%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E3%82%A2%E3%83%AB%E3%83%9F%E3%83%80%E3%82%A4%E3%83%AC%E3%82%AF%E3%83%88-TAMIYA-42248/dp/B00CAUME20/ref=as_li_ss_il?s=hobby&ie=UTF8&qid=1576394524&sr=1-15&linkCode=li2&tag=ikeyasuki-22&linkId=c374b7150adaaaaa8f4b55a31c7d2ba6&language=ja_JP" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B00CAUME20&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=ikeyasuki-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=ikeyasuki-22&language=ja_JP&l=li2&o=9&a=B00CAUME20" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

<a href="https://www.amazon.co.jp/%E5%8F%8C%E8%91%89%E9%9B%BB%E5%AD%90%E5%B7%A5%E6%A5%AD-Futaba-Denshi-BS0134-%E3%82%B5%E3%83%BC%E3%83%9C%E3%83%9B%E3%83%BC%E3%83%B3/dp/B000UZB4SM/ref=as_li_ss_il?s=hobby&ie=UTF8&qid=1576394684&sr=1-26&linkCode=li2&tag=ikeyasuki-22&linkId=1cb65f2b37409ef093ade0cc7c95304b&language=ja_JP" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B000UZB4SM&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=ikeyasuki-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=ikeyasuki-22&language=ja_JP&l=li2&o=9&a=B000UZB4SM" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

### ブラケット・サーボマウント

サーボを取り付ける金具を**ブラケット**と言います。単に取り付け金具という意味で、**サーボマウント**あるいは、単に**マウント**とも言います
以下のような形が典型的です。

<a href="https://www.amazon.co.jp/DS3115-%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB%E3%83%AD%E3%83%9C%E3%83%83%E3%83%88%E3%83%A2%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%A2%E3%83%BC%E3%83%A0%E7%94%A8%E3%82%B5%E3%83%BC%E3%83%9C%E3%80%81-Dreamerfire-%E3%83%95%E3%83%AB%E3%83%A1%E3%82%BF%E3%83%AB%E3%82%AE%E3%82%A2U%E5%9E%8B%E3%83%96%E3%83%A9%E3%82%B1%E3%83%83%E3%83%88%E4%BB%98%E3%81%8D-%E3%83%AD%E3%83%9C%E3%83%83%E3%83%88%E3%82%A2%E3%83%BC%E3%83%A0/dp/B07QZWBK9S/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=%E3%83%96%E3%83%A9%E3%82%B1%E3%83%83%E3%83%88&qid=1576394739&s=hobby&sr=1-2&linkCode=li2&tag=ikeyasuki-22&linkId=dfc73dfda59566087f6cb658dcd55d73&language=ja_JP" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B07QZWBK9S&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=ikeyasuki-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=ikeyasuki-22&language=ja_JP&l=li2&o=9&a=B07QZWBK9S" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

どのように繋ぐのかは[この動画](https://www.youtube.com/watch?v=DE97ZNXfI1s&feature=emb_logo)を見るとイメージできると思います。

以下のように単なる固定金具の場合もあります

<a href="https://www.amazon.co.jp/gazechimp-2%C3%97%E3%83%96%E3%83%A9%E3%83%83%E3%82%AFPTZ%E3%82%B5%E3%83%BC%E3%83%9C%E3%83%96%E3%83%A9%E3%82%B1%E3%83%83%E3%83%88%E3%80%81%E5%A4%9A%E6%A9%9F%E8%83%BD%E3%82%B9%E3%83%86%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%82%AE%E3%82%A2%E3%83%96%E3%83%A9%E3%82%B1%E3%83%83%E3%83%88995%E3%82%B5%E3%83%BC%E3%83%9C%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B5%E3%83%AA%E3%83%BCDIY%E3%83%AD%E3%83%9C%E3%83%83%E3%83%88%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%882-28%C3%971-46%C3%971%E3%82%A4%E3%83%B3%E3%83%81/dp/B07V2VGN1J/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=%E3%83%96%E3%83%A9%E3%82%B1%E3%83%83%E3%83%88&qid=1576394899&rnid=2277722051&s=hobby&sr=1-16&linkCode=li2&tag=ikeyasuki-22&linkId=095b3e04c22b641fcd9af73fc49fc97e&language=ja_JP" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B07V2VGN1J&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=ikeyasuki-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=ikeyasuki-22&language=ja_JP&l=li2&o=9&a=B07V2VGN1J" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

制御方法
======

制御方法は、大きく2つあります。
1つは、PWM制御で、古典的な手法です。これは、単に、制御値を送る事しかできません。
2つ目は、シリアル、または、TTL、メーカーによっては、ICSなどと言われる手法です。こちらは、メーカーが決めた信号をシリアルで送ると、そのようにサーボが動くタイプです。双方向で、サーボの状態の取得もできるタイプが多いです。


## PWM制御

Arduinoで、[標準のServoライブラリ](https://www.arduino.cc/en/reference/servo)を使うとこの制御になります。

詳しくは説明しませんが、DCモーターの制御でよく使う[PWM](https://ja.wikipedia.org/wiki/%E3%83%91%E3%83%AB%E3%82%B9%E5%B9%85%E5%A4%89%E8%AA%BF)の波長の長さを変える事で、制御値を送ります。

以下に詳しい説明があります。
https://monoist.atmarkit.co.jp/mn/articles/1605/12/news007.html

## シリアル、TTL、ICS

メーカーが決めた信号をシリアルで送ると、そのようにサーボが動くタイプです。双方向で、サーボの状態の取得もできるタイプが多いです。
Futabaと近藤科学を見てみます。

### Futaba

Futabaはラジコンパーツの老舗です。
RS304MDというサーボが安価で使い勝手が良いです。

<a href="https://www.amazon.co.jp/%E5%8F%8C%E8%91%89%E9%9B%BB%E5%AD%90%E5%B7%A5%E6%A5%AD-ROBOT-RS304MDFF-FUTABA-00400021-1/dp/B004IJCPXY/ref=as_li_ss_il?ie=UTF8&linkCode=li2&tag=ikeyasuki-22&linkId=8497a6cc1dad44819545efe767ed3e2d&language=ja_JP" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B004IJCPXY&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=ikeyasuki-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=ikeyasuki-22&language=ja_JP&l=li2&o=9&a=B004IJCPXY" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

以下のサイトのPDFを見るとコマンドが分かります。

http://www.futaba.co.jp/robot/command_type_servos/rs304md

以下のようなバイナリをTTLで送るとサーボが動きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38555/0e6c610c-a860-6f24-8151-8ffaae89f171.png)

上記のように、コマンドには、IDをふることができます。
そのため、複数のモーターを繋いで、制御が可能です。
基本的にマニュアルに書いてるとおり、コマンドを送れば動きます

なお、Futabaは、データの取り出しには、TTLを半二重にする回路を組む必要があります。
以下に詳しいです。

https://www.slideshare.net/lipoyang/gr-77226923

制御のプログラムを簡単にPyhtonで書きました。（動作は一部しか確認していません。）
https://gist.github.com/ikeyasu/64a4847dea67220491289ac5f4d03f49

### 近藤科学

近藤科学も安いサーボがあります。
KRS-3301です。

<a href="https://www.amazon.co.jp/KONDO-%E3%83%AD%E3%83%9C%E3%83%83%E3%83%88%E7%94%A8%E3%82%B5%E3%83%BC%E3%83%9C%E3%83%A2%E3%83%BC%E3%82%BF%E3%83%BC-KRS-3301-ICS/dp/B077YK4HM4/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=KRS-3301&qid=1576396024&s=hobby&sr=1-1&linkCode=li2&tag=ikeyasuki-22&linkId=7d31b1db27f4e85da96bbbacbbfcb2a0&language=ja_JP" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B077YK4HM4&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=ikeyasuki-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=ikeyasuki-22&language=ja_JP&l=li2&o=9&a=B077YK4HM4" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

こちらは「デイジーチェーン」つまり、数珠つなぎをすることができる特徴があります。
そのため、多関節のロボットでは、配線がしやすいです

https://kondo-robot.com/faq/servomotor-use-method-machine-daisy-chain

近藤科学のコマンドはICSと呼びますが、以下で見ることができます。

http://kondo-robot.com/faq/ics3-5-explain

https://kondo-robot.com/robospot/html/

こちらは、接続には簡単な回路を組む必要がありますが、以下のような変換基板を使うと便利です。

https://www.switch-science.com/catalog/3464/

近藤科学の製品は近藤科学のWebShopに種類が豊富に揃っています。

https://kondo-robot.com/robospot/html/products/detail.php?product_id=1845