2年目のラズパイ...16日目...9軸センサー

師匠に触発されて、9軸センサー購入しました。

動き系のセンサーは、どんなものか調べてみるのと、動力系と合わせて倒立振子をつくってみようと思ってます。
どんなものかは、Youtubeに沢山出てます。

センサー情報を元にモーターを制御するのはいろいろと難しい感じですが、結構サンプルもあるのでなんとかなりそうな感じです。目に見えて動くものはわかりやすいのでお勉強にはよろしいかと。

購入したのはBOSCH社BMX055です。めちゃくちゃ小さいです。3つ並んだ真ん中のチップに3つのセンサーが入ってます。他は電源レギュレータと信号線のレベル変換器です。
I2Cのアドレスや駆動電圧により、ジャンパーが必要です。
 JP1,JP2,JP3はすべてオープンのため、I2Cアドレスは以下のとおりです。
加速度 0x19
ジャイロ 0x69
磁気 0x13

JP6オープン,J7ショート,J8オープンとして、電源は3.3V,信号レベルは3.3Vに設定しました。J7は基盤の裏面を半田でジャンパーします。写真わかりにくいですがAEの右上を半田でジャンパーしてます。

ESP32基盤はこんな感じでいろいろと乗っかってます。
動作確認はmicropythonで実施します。先人の知恵をGithubで見つけました。すんなりいくかと思えばそうはいかずです。Pybordで動いたコードのようで、ちょっと修正が必要です。センサーは、I2Cアドレス3つでそれぞれ読み出さないといけないので、加速度、ジャイロ、地磁気センサーそれぞれを1つのデバイスに入れた感じです。コードもそのようになっていて、センサー毎にライブラリになってました。
こちらを参考に
https://github.com/micropython-IMU/micropython-bmx055
bma2x2.py→加速度センサ
bmg160.py→ジャイロセンサ
bmm050.py→地磁気センサ
それぞれがライブラリになっていて、importで読み込む必要があります。

今日のところは、加速度とジャイロまで読み取れるところまで出来ました。
uPyCraftの画面キャプチャーです。下の黄色枠に加速度の3軸(x,y,z)、ジャイロの3軸(x,y,z)計6個の値を0.5秒毎にESP32が読み取って表示しています。
地磁気は次回に。この値だけではよくわからないので、時間変化とともにわかるように可視化も必要です。センサー動かさなくても値が微妙に変わっているので、感度の調整や値の補正も必要なのかもです。
シリアルにセンサー情報をprintするためのpythonコードです。いろいろといらない部分もありますが。

10 件のコメント:

  1. 多数の情報があるとはいえ、結構な難題に挑戦中ですね。完成時の自立した結果だけでなく、実験とともに少しづ改善する様子の動画があれば面白そう、、、

    返信削除
    返信
    1. そうなんですよ。調べれば調べるほど壁が出てきます。少しずつ動画も記録しながら進めたいと思います。

      削除
  2. モータは何を使う予定ですか? DCモータまたはステッピングモータの2種類があるようです。赤道儀ではステッピングモータを使っています。フォーカス制御もステッピングモータでした。回転速度と方向を、倒れないように制御が間に合うかどうか不明ですが、安価なステッピングモータは、例えばAmazonで売っていて、私も持っています。
    https://www.amazon.co.jp/Longruner-Longruner-5%E5%80%8B%E3%82%BB%E3%83%83%E3%83%88-arduino%E7%94%A8-%E9%9B%BB%E5%9C%A7DC-5V-%E3%82%B9%E3%83%86%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0%E3%83%A2%E3%83%BC%E3%82%BF%E3%83%BC-28BYJ-48-ULN2003%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%83%86%E3%82%B9%E3%83%88%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%83%9C%E3%83%BC%E3%83%89-%E9%9B%BB%E4%BD%9C%E3%82%AD%E3%83%83%E3%83%88-LK67/dp/B06XCSCD8T/ref=sr_1_6?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1LV6MBUEAPR10&keywords=%E3%82%B9%E3%83%86%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0%E3%83%A2%E3%83%BC%E3%82%BF%E3%83%BC+%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90&qid=1554263557&s=gateway&sprefix=%E3%82%B9%E3%83%86%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0%E3%83%A2%E3%83%BC%E3%82%BF%2Caps%2C240&sr=8-6

    返信削除
    返信
    1. タミヤのギアセットとDCモーターの予定です。発注済です。

      削除
  3. ステッピングモータと9軸センサーでとりあえず回転方向を制御する実験してみました。モータの回転速度が遅いため、このままでは倒れてしまいそうな予感。https://youtu.be/27XcT2aLcA4

    返信削除
    返信
    1. Youtube拝見しました。お試し早いですね。この回転数だと振子を短くしないと確かに倒れそうです。

      削除
    2. DCモータの到着が楽しみですね!
      とりあえず、週末はモータを搭載する箱を作ってみます。

      削除
    3. まずはDCモーターの正転と逆転をmicropythonからできるように頑張ります。

      削除
  4. 3Dプリンターで箱と車輪を作り、バラックで組んでみました。自立しそうな雰囲気で動いていますが、バッテリーも搭載し、基盤等もきちん搭載してみないと、ほんとうのところはわかりません。ダメならもっと速いステッピングモータもありますが、5Vでは動作しないので、電源を含め、ちょっと大変かも、、、、
    https://youtu.be/kZW1r6-mSik

    返信削除
    返信
    1. 動画見ました。倒立してそうな、してないような。ここまでできればパラメータの調整で乗り切れるか、駄目ならモーター交換ですね。動きモノは、電源2つ必要なのがちょっと面倒です。

      削除

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

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