動き系のセンサーは、どんなものか調べてみるのと、動力系と合わせて倒立振子をつくってみようと思ってます。
どんなものかは、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コードです。いろいろといらない部分もありますが。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# BOSCH bmx055 sensor | |
# bma2x2.py bmg160.py が必要 | |
from machine import Pin, I2C | |
from bma2x2 import BMA2X2 | |
from bmg160 import BMG160 | |
import time | |
i2cBMX055 = I2C(scl=Pin(4), sda=Pin(5)) | |
print('I2C setup') | |
accl=BMA2X2(i2cBMX055, 0x19) | |
gyro=BMG160(i2cBMX055, 0x69) | |
# accl sensor | |
print('accl.Range=',BMA2X2.get_range(accl)) | |
print('accl.Filter_bw=',BMA2X2.get_filter_bw(accl)) | |
time.sleep(1) | |
# gyro sensor | |
# BMG160.get_filter_bwは読めない。timing? | |
print('gyro.Range=',BMG160.get_range(gyro)) | |
#print('o.filter_bw=',BMG160.get_filter_bw(gyro)) | |
while True: | |
print('accl:',BMA2X2.xyz(accl),'gyro',BMG160.xyz(gyro)) | |
time.sleep(0.5) |
多数の情報があるとはいえ、結構な難題に挑戦中ですね。完成時の自立した結果だけでなく、実験とともに少しづ改善する様子の動画があれば面白そう、、、
返信削除そうなんですよ。調べれば調べるほど壁が出てきます。少しずつ動画も記録しながら進めたいと思います。
削除モータは何を使う予定ですか? 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
タミヤのギアセットとDCモーターの予定です。発注済です。
削除ステッピングモータと9軸センサーでとりあえず回転方向を制御する実験してみました。モータの回転速度が遅いため、このままでは倒れてしまいそうな予感。https://youtu.be/27XcT2aLcA4
返信削除Youtube拝見しました。お試し早いですね。この回転数だと振子を短くしないと確かに倒れそうです。
削除DCモータの到着が楽しみですね!
削除とりあえず、週末はモータを搭載する箱を作ってみます。
まずはDCモーターの正転と逆転をmicropythonからできるように頑張ります。
削除3Dプリンターで箱と車輪を作り、バラックで組んでみました。自立しそうな雰囲気で動いていますが、バッテリーも搭載し、基盤等もきちん搭載してみないと、ほんとうのところはわかりません。ダメならもっと速いステッピングモータもありますが、5Vでは動作しないので、電源を含め、ちょっと大変かも、、、、
返信削除https://youtu.be/kZW1r6-mSik
動画見ました。倒立してそうな、してないような。ここまでできればパラメータの調整で乗り切れるか、駄目ならモーター交換ですね。動きモノは、電源2つ必要なのがちょっと面倒です。
削除