Raspi

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

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

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

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

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

購入したのはBOSCH社BMX055です。めちゃくちゃ小さいです。3つ並んだ真ん中のチップに3つのセンサーが入ってます。他は電源レギュレータと信号線のレベル変換器です。

I2Cのアドレスや駆動電圧により、ジャンパーが必要です。 JP1,JP2,JP3はすべてオープンのため、I2Cアドレスは以下のとおりです。

1
2
3
加速度 	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

1
2
3
bma2x2.py → 加速度センサ
bmg160.py → ジャイロセンサ
bmm050.py → 地磁気センサ

それぞれがライブラリになっていて、importで読み込む必要があります。

今日のところは、加速度とジャイロを読み取れるところまでできました。 uPyCraftの画面キャプチャーです。黄色枠に加速度の3軸(x,y,z)、ジャイロの3軸(x,y,z)計6個の値を0.5秒毎にESP32が読み取って表示しています。

地磁気は次回に。 この値だけではよくわからないので、時間変化とともにわかるように可視化も必要です。センサー動かさなくても値が微妙に変わっているので、感度の調整や値の補正も必要なのかもです。 シリアルにセンサー情報をprintするためのpythonコードです。いろいろといらない部分もありますが。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 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)
comments powered by Disqus