09

Arduino で 複数のサーボモータを同時に動かす

何って、単にこういうこと


20180512

Arduino本体にデジタルピン経由でボタンを二つ、I2CでPCA9685なる複数のサーボモータを制御するボードを介して3基のサーボモータを制御します。別に難しくもなんともないんですが、ソースコードをどこかに張り付けておきたいと思ったのでこんなエントリを書いている次第。

Keyestudio

最近中国は深センあたりのメーカーが元気いいらしいじゃないですか。まあ行ったことないんでよく知らないんですけど。まあArduinoはオープンなハードウェアなわけで、深センのメーカー何社からArduinoクローンが発売されています。叩き合っているのか何なのかわかりませんが、本体とそこらの入門本で使いそうなパーツをいろいろ取り揃えてパックにしたものスターターキットとして大変お安く販売されています。品質も詳しくないのでまあ高いといえるのかどうかわかりませんが、日曜工作くらいなら普通に買って不安がないくらいではあります。

で、動画に見える通り今回は Keyestudio ってとこのを使っています。黄色がかっこよかったので。しかも特に意味もなく環境モニタリングキットという、細かい電子部品の代わりにいろんなセンサーをまとめてパックにされたものを買っています。いずれ何かに使うでしょう。

(なぜかはてなのアマゾン商品紹介機能が使えないので直接アフィリンク張っておきます)

PCA9685

Arduinoから複数のサーボモータを使う場合にこういうのを使う必要がある(?)らしいです。特にArduino単体でやってみてできなかったので買った、というわけではなく、ネットで検索してたら出てきたので買ってみたというだけなのであれですが。

特に説明書も何もついてないんでどうするんだという感じなんですが、Amazonの商品ページに行くと接続例の回路図が商品画像の一部に載ってます。つまりその通り接続します。物理はそれでいいとしてソフトウェアのほうはどうするかというと、これもAmazonの商品ページ見るとわかるんですが、「Adafruit 16-Channel Servo Driverの互換品」と書かれています。なので Adarfuit のライブラリがそのまま使えます。Arduino IDEのスケッチメニューのライブラリをインクルード>ライブラリの管理 から Adafruit PWM で 検索すれば出てきます。あとはこのライブラリの使い方を適当にググりながら書けばよいという感じです。

最初付属の説明が何もなくてどうすればいいのかという状態だったので、いろいろ試行錯誤しましたが無駄でした。なので今後そんな人類が生まれてはいけないと思いここに書き記しておきます。

ソース

たいして難しくもないのですがサーボは可動可能範囲があるので、その範囲をどのくらいの値として指定する必要があるのかは製品によって違うらしいですね。なので手探りで割り出す必要がありそう。ちなみにこのソースに書いてあるのはほかの人が今回私が使用しているサーボモータと同じSG90で試したと思われる値をパクっています。

ArduinoでPCA9685を使って複数のサーボモータを回してみる