ラズパイ日記...21日目...倒立振子立ち上がるのか

一通りの配線確認を行い、それなりにセンサーの値を読み取り、モーターも正転、逆転できるところまではきました。

本体を組み立てていきます。

まずは、ギヤボックス。ネジ位置が板とあわないので、カッターでちょっと切り欠きます。後ろにプラスチックの板でユニバーサルプレートをネジで挟んで両側止めます。ここがグラグラすると全体に波及するので、プラスドライバーとラジオペンチでしっかりとめます。

真ん中と上部に基板を引っ掛けるL字金具を取り付けます。基板は幅広ゴムで止めます。

微妙に配線がきついですが、何とかなりました。
 全体はこんな感じです。

上部は、ESP32と9軸センサーです。
 
DCモーターコントローラー。LEDは、PWM出力を明るさで確認できます。
ギヤボックス

背面はモーター駆動用の電池をゴムで取り付けます。
なんとか、全体的な形になりました。
再度配線を確認して、これまで個別のプログラムを 引っ付けて、センサーとモーターの動きを制御したいと思います。

さて、GW中に倒立するのか。

ラズパイ日記...20日目..DCモータコントロール

倒立振子実現のために、事前確認です。

DCモーターコントローラは、東芝製のTA7921Pを使用してます。
こちらに詳しく説明とサンプルがあります。
https://www.marutsu.co.jp/contents/shop/marutsu/mame/81.html

回転方向の制御に2線、回転速度の制御に1線を使用します。
ESP32側は、回転方向制御に1,0をそれぞれ出力してあげれば問題ありません。
回転制御は、アナログ出力はないのでPWM出力をアナログ出力とみなして制御します。
周波数は、500Hzから1kHzがいいようです。
デューティー比を0(0%)~1023(100%)まで変化させると擬似的にアナログ出力となります。
デューティー比は、0→1→10→100→500→1000と変化させた時のモータの動きです。

デューティ比0,1,10ではモーターは動きません。 PWM信号にLEDをつけてます。段々明るくなっている状況がわかると思います。

もう1個のモーターも配線を半田付けして、モーターコントローラと配線します。
反対側を見ながらコピーすればいいので簡単です。プログラムを反対側分も作成し、いざテスト。
うーん、新しく配線したモーターは、うんともすんとも動きません。反対側は問題なく回ってます。
再度、配線を見直しても間違ってません。
配線触ってると、モーター動き出しました。原因はここ。
モーターコントローラーのVCC線の剥き方が気持ち短くて、ブレッドボードと微妙に接触不良です。長めに剥いて配線しなおすと、左右同じように動くようになりました。

これで、左右のモータが動くようになりました。将来的な拡張を考えて左右個別にコントロール出来るようにしてあります。

あとは、これまでのセンサー読み出し、モーター駆動等の個別コードをまとめて、倒立できるようにプログラムの作成です。
基板に取り付けて、ようやく倒立実験です。GW中は楽しめそうです。

ラズパイ日記...19日目...9軸センサ(その3)

倒立振子のためにESP32をもう1個買いました。
あわせて片側6穴のブレッドボードも購入です。これで両側に配線が可能です。
左が新規購入した6穴、右がこれまで使ってた5穴です。5穴だとESP32の横幅が収まらずどちらかサイドのピンが使えなくなります。

 あとは、ArduinoIDEの新しいのは、シリアルデータをグラフにしてくれる機能があるようで、1.6.4から1.8.9にアップデートしました。
 
シリアルプロット試してみました。シリアルモニターからコマンド打って、シリアルにCSVデータが出力する状態でシリアルモニターをクローズして、シリアルプロットを立ち上げます。シリアルモニタとシリアルプロットは同時オープンできません。データ毎に色を変えてグラフにしてくれました。
加速度のx,y,z、ジャイロのx,y,xの6軸の状況です。センサをx方向とかy方向とか動かすと、それなりに反映されている感じです。

新規購入したESP32にもmicropythonを入れて、センサーを移し変えて配線をし直します。pythonコードもそのままコピーしてやれやれと思ったら、 センサ情報が出力されず、謎のエラーがでます。いろいろと確認したらI2CのSDA、SCLが逆になってました。
確認したつもりが、見直すと誤配線。配線は、少し間を置いて気分をリフレッシュしながら何度も要確認です。
モーター回路にも接続してモーター回ることを確認します。こちらは問題ありませんでした。
ということで、9軸センサとDCモータードライバーの配線は新しいESP32へ引越し終わりました。

センサーは、1方向の加速度とジャイロしか使わないので、x軸のみ加速度とジャイロ出力をグラフに出力して見てみます。

傾きが青線、加速度が赤線です。傾きにあわせて青線が動きます。早く動かすと赤線が上昇し、ゆっくり動かすと加速度は動きません。赤線は、微妙にオフセットされているので、これも補正しないとですね。
あとは、動かさなくても値が微妙に変化するので、感度を調整するか、制御ソフトで取捨選択するか考えないといけません。

ラズパイ日記...18日目...倒立振子始動

モーター系のお勉強ということで、倒立振子作ってみます。
 https://ja.wikipedia.org/wiki/%E5%80%92%E7%AB%8B%E6%8C%AF%E5%AD%90

DCモーターを9軸センサーの2軸を使って 制御します。
水曜日ポチッておいたのが届きました。

タミヤのダブルギヤセット(モーター2個付)や基板にタイヤ、
DCモーターの制御はTA7291Pで行います。
モーターの電源はエネループ(単3)×3がよろしいようです。エネループの単3は1本約1.2Vの出力です。モーター入力定格がMax3V、コントローラーの損失が約2Vあります。
エネループ1.2V×3→3.6Vでコントローラ損失が2Vということで、モーターは1.6V駆動となります。トルクが足りないときは、エネループ1本追加です。

先人の知恵としてこの辺のページが参考になります。
TA7921pの説明はこちら。
https://www.marutsu.co.jp/contents/shop/marutsu/mame/81.html
半日でつくる倒立振子というナイスな先人もいます。
https://www.instructables.com/id/%E5%8D%8A%E6%97%A5%E3%81%A7%E4%BD%9C%E3%82%8B%E5%80%92%E7%AB%8B%E6%8C%AF%E5%AD%90/

倒立振子の運動方程式とか状態方程式は、ググルと沢山出てきます。
制御工学実装の基本のようで、いろいろな制御方法があります。

まずは、モーター単体を回転させるべく、配線等を行います。
ESP32からは、3本必要です。
IO2   PWM出力 モータ速度コントロール
IO22   0,1出力(正転、逆転、ブレーキ)
IO23   0,1出力(正転、逆転、ブレーキ)

全体はこんな感じです。ESP32はもう1個買って専用にしないとだめですね。
 
DCモーターコントローラは、こんな感じです。配線はまだ片側だけです。
写真下側電源ラインにESP32からの5V(赤線)を、上側の電源ラインに電池からの線(オレンジ線)を接続して、電源を分離してます。GNDは共通です。
とりあえず勢いよくモーターが回ることを確認しました。
早すぎてわからないので、ギヤボックスを入れます。ギヤ比は114.7:1を選択しました。

正回転と逆回転を3回繰り返します。

とりあえず、今週はこの辺までにしておきます。

ラズパイ日記...17日目...9軸センサー(その2)

9軸センサーの続きです。
前回積み残しの地磁気センサ値をESP32へ読み込みます。
BMM050.pyというライブラリを読み込んで、I2Cアドレス0x19へアクセスすると読み出してくれます。
これで9軸読み出せることは確認できました。

センサー情報をWindowsの画面にリアルタイムでグラフ化してくれそうなソフトがありました。無料で使えそうです。
シリアルから送られてくるcsvテキストをグラフに書いてくれるようです。
http://www.lapis-semi.com/lazurite-jp/lazurite/1499.html

このソフトにあわせるように出力を整形します。

各行の最初に「STX」、終わりに「ETX」をつけるそうです。シリアルモニターで出力を確認してます。とりあえず加速度の3軸のみです。

 lazuriteGraphというので読み込みます。画面設定はこんな感じです。
COMポートには先ほどの値が出力され続けているので、グラフをみると
なぜか書いてくれません。うーん、とりあえずこのままで、またの機会に考えます。
何事もうまくいくとは限りません。

ラズパイ日記...esp32(arduino)+mpu6050

# esp32で6軸センサー読み出し esp32で6軸センサーを読み出し、値をグラフ表示して動作を確認します。 ## 準備 ハード的な接続は、センサーが3.3V駆動できるので、3.3VとGNDの2線で電源供給します。I2C用にSDAとSCLのデータ線が必要ですが、esp...