だいぶ前回更新から間が空いてしまいました。原因を考えてみたのですが、「作品として仕上げたもの全ての解説」を書こうとして、気合が入りすぎてしまっていました。その場合、勢いで書ききらないと文章量が膨大になって下書きのまま眠りについてしまいます。
今回は初心に帰って「シリアルサーボLX-15Dの動かし方」に絞って記事を書こうと思います。
思えばこのブログを始めた時もM5StickVからPWMサーボを動かす方法から書き始めていました。
目次
今回購入した製品
・LX-15D
DCモータの様に多回転するモードと角度指定できるモードがあるとのことで魅力に感じて購入しました。
www.switch-science.com
・サーボコントローラ
結果から言うとESP32系で直接動かせたため不要でしたが、サーボのID設定等は簡単にできます。
www.switch-science.com
・安定化電源
サーボが6~8.4V駆動です。LiPoバッテリはあるのですが毎回充電するのも面倒でずっとほしいと思っていたので購入しました。
OutPutボタンがあるものを選んでみました。
www.amazon.co.jp
PCからサーボドライバを使って動かす方法
最初にPCソフトウェアからサーボモータ1個を動かしてみました。 資料はこちらからDLできます。
https://www.hiwonder.com/store/learn/26.html
もし基板を接続したのみの状態でブザー音が鳴る場合は供給電圧不足を疑ってみてください。
基板のVCC+、VCC-に6~8.4Vを供給する必要があります。
この電圧が曲者で、LiPoの2セルであればちょうどその範囲なのですが、ACアダプタだと5Vや9Vの単位が多いです。
そのため今回は途中から安定化電源を供給して8Vを供給しています。
単体の動作テスト
起動後タブを切り替えてServo Testにします。 この際複数台サーボを繋がない様にご注意ください。 右下でDCモータモードと角度指定モードを切り替えて動かすことができます。動作の様子です。
シリアルサーボを初めて動かしてみた
— パスコンパス (@pscmps) 2021年6月9日
PWMサーボと違って角度制御も多回転も両方できるのがとても新鮮 pic.twitter.com/40voDMjgAq
IDの指定
シリアルサーボにはデフォルトでID1が指定されています。
そのため、複数接続してGeneral ModeでID1の角度を指定しても全てのサーボが同期して動いてしまいます。
各々のサーボを動かすためにはIDを変更する必要があります。PCソフトウェアを使用するとIDの変更が簡単にできました。
Servo TestタブでID入力後、Applyを押すとIDの書き換えができます。
M5StickCで動かす方法
GitHubに「ESP32なら単線で動くよ」というサンプルを見つけたので方向転換してそれをお借りして動かしました。 M5StickC以外にもESP32のスイッチサイエンスの基板でも動作確認しています。
https://github.com/madhephaestus/lx16a-servo
こちらのExample内のlx16aOneWireESPExampleをそのままお借りして動作の確認をしました。 最初からこれを見つけられれば良かったのですが、苦労したところは何か役立つかもしれないので最後にメモを残します。。
配線ですが、ESP32やM5StickCのG0をサーボのシリアルピンに接続し、1kオームの抵抗で3.3Vへ繋ぎます。 GNDを共通にして、6~8.4Vをサーボの電源ピンに接続します。
うわー!
— パスコンパス (@pscmps) 2021年6月20日
やっとESP32でLX-15D動いた!!!
M5StickCでもいけるかも?
lx16aOneWireESPExamplehttps://t.co/iyELZScos6 pic.twitter.com/wGSiIlFbhn
できた!!#M5StickC pic.twitter.com/gU3dtzy9bo
— パスコンパス (@pscmps) 2021年6月20日
サーボのピン配置はこちらを参考にしました。(ピン以外の回路はこの記事のESP32向けの配線とは異なるのでご注意ください。) github.com
サーボドライバ基板周りで苦しんだ話
サーボドライバにArduinoからシリアル通信で動かすサンプルもあったのですが、結果から言うとうまく動かせませんでした。原因を深く見れてはいないです。
ハマりどころとしてはサーボドライバ基板へのボーレートは9600でサーボと直接つなぐ場合のボーレートは115200ということがあります。長いことサーボ直接送信用のサンプルを使ってサーボドライバ基板へコマンドを送信してエラーになって苦しんでいました。
また、サーボ直接コマンド送信する場合は3ステートバッファという外部回路が必要と教えていただきました。このコメントを参考に誤りに気が付くことができました。沖川さん(https://twitter.com/zoukeibaka)、本当にありがとうございました。
Arduino互換でLX-224(通信仕様がほぼ同じ)を動かしたことがあります。
— 沖川 豊(小川) (@zoukeibaka) 2021年6月19日
対象のサーボはTXとRXが共有なので3ステートバッファが必要だと思うのですが繋いでますか?
また、UNOのHardwareSerialは基板上でUSB-シリアル変換に繋がっているので3ステートバッファによる切り替えは難しいかもしれません。
シリアル通信は普段printfで数値を見るくらいしか使っていなかったのでコマンドの内容を一つ一つ確認したり、チェックサムがあっているか確認したりするのはなかなか楽しかったです。
まとめ
LX-15Dに関して日本語でまとめているページは現状であまり見つからなかった(私調べ)のでどなたかのお役に立ったら幸いです。
ESPで手軽に動くことが分かったのでちょっと使ってみようと思います。読んでくださり、ありがとうございました。