Arduino 倒立振子 3号機 |
改善及び変更点は、
①トランスミッションはバックラッシュの大きかった1,2号機を反省して、ギアードDCモーターにする。
②ジャイロセンサーは海外のネット上に資料が沢山あるMPU6050 を採用。
③モータードライバーは前回同様のL298Nとするが、完成品とする。(半田付けが面倒になってきました)
④プログラムはSAINSMART社のINSTABOTという倒立振子に使われているプログラムをベースにする。
まずはFritzingソフトで回路図の作成から始めます。つぎに機体の設計ですが、今回もDesignSparkの3DCADソフトで設計していきます。ずいぶん慣れてきました。
アクリル板は今回も「はざい屋ドットコム」さんにお願いすることにしました。
電子部品類は秋月電子、共立電子それにアマゾンにそれぞれ発注。一か所ではなかなか揃わないのが悩みです。
到着した順に加工、組み立てを進めていきます。
最後はプログラムです、今回は見よう見まねということにはせず、一行ずつ理解しながら進めていきたいので、ずいぶん大変な作業になりました、しかも参考にしているのがすべて英語なので、資料を読むのも大変ですが、YOUTUBEの動画での説明を聞き取るのに久しぶりに英語のヒアリングを真面目にやりました。お蔭で忘れかけていた英語にも大分慣れてきました。
本来は参考にさせていただいた関係先はリスとアップしておくべきなのでしょうが、あまりにも数が多くなるので割愛します。
大変でしたが完成したプログラムはなかなかのものです。今回新たにプログラムで採用したのは、ジャイロセンサの測定値をフィルタープログラムを使って平滑化したことです。多分、効果ありと思います。モーターの制御はPID制御で三つの係数をトライアンドエラーで決定するようにしています。この辺は遥か昔の学生時代に勉強した記憶のある分野です。
出来上がった機体とプログラムを試してみます。モーターの結線が間違っていた以外は問題なく作動を確認できました。
いよいよ倒立させてみますが、さっきの三つの係数はネットの情報で得られた値をとりあえず入れてみます。不安定ではありますが、なんなく倒立します。
ここからが実は大変な作業になって、満足する倒立状態を得られるまでに数日を要しました。結論は、車輪を地面から浮かせた状態で、機体を水平な状態に置きます。この状態でジャイロセンサーの角度値がゼロになるようにオフセット値を調整、次に角速度値がゼロになるようにオフセット値を調整します。両方がゼロになるように調整できたら、PIDの三つの係数を調整して安定した倒立状態を探します。倒立しても前後に移動する場合はモーターのオフセット値とジャイロの角度オフセット値を変更してみます。せっかく調整した角度オフセット値は大きく変更しないほうが良いかもしれません。
最終の倒立状態です、今回はさすがに安定した倒立状態です。
こうなると、人情としてリモコン操作で走行させてみたくなります。また、しばらくは暇つぶしの課題が出来ました。