Arduinoで9軸センサーを使う(AE-BMX055)

組み込み
スポンサーリンク

AE-BMX055は秋月電子で購入できる9軸センサーです。
9軸センサーは「加速度」「角速度(ジャイロ)」「磁気コンパス」の3つの要素で構成されています。この情報を使用して機器がどのような位置や角度になっているかを判断できます。

セットアップ

この手のセンサーは大抵はんだ付け必須です。
機器とピンが別々になっているので、センサーを使用する場合は半田ごてもセットで購入しましょう。
注意するのが、「駆動電圧」と「信号レベル」です。

駆動電圧(電源)はセンサーに供給する電圧です。5Vか3.3Vが選択できます。
Arduino Unoはどちらの出力もあるのでお好みで。

信号レベルはセンサーと通信を行う電圧です。
Arduino UnoはGPIOが5Vになります。
Raspberry PIの場合はGPIOが3.3Vになります。
今回はArduino Unoを使用しますので5Vで通信を行います。

使用する条件に合わせて、裏面の「JP6」「JP7」「JP8」をショートします。
今回はJP6をショートします。
ドキュメントでは「JP4」「JP5」のプルアップ用ジャンパをショートするように記載されていますが、Arduinoの場合は内部的に自動プルアップが行われるので省略します。

サンプルプログラム

何も考えなくてもサンプルプログラムを実行すると値が取得できます。
だた、チューニングするときに必要になりそうな気もしますので内容を確認していきます。

レジスタの値などはデータシートを参照する必要があります。

BMX055_Init(初期化処理)

センサーの初期化処理を行っています。

まずは、加速度の設定です。
「PMU_RANGE」は加速度センサーで検知する値の範囲を指定しています。
サンプルプログラムでは3が設定されているので±2Gとなっています。
「PMU_BW」は加速度の値を取得する周期です。
サンプルプログラムでは「7.81Hz」が指定されています。1秒間に7,8回加速度のデータを取得していることになります。

次は角速度(ジャイロ)の設定です。
「Range」は各毒度を返す値の範囲を指定しています。
サンプルプログラムでは±125°/Sとなっています。
「Bandwidth」は角速度を取得する周期です。
サンプルプログラムでは100Hzとなっています。

BMX055_Accl(加速度データ読み込み)

最初に6バイトのデータを読み込んでいます。
(xAccl lsb, xAccl msb, yAccl lsb, yAccl msb, zAccl lsb, zAccl msb)
X軸、Y軸、Z軸の3種類について「lsb」「msb」という2つずつのデータを読み取っています。

lsbは上位4bitを使用します。そのため「0xF0」で&をとっています。
lsbを読み取るとmsbの値がロックされます。
この状態でmsbの値を読み取ります。
値としてはmsbとlsbを連結して使用します。加速度の値はmsb 8bit,lsb上位4bitの12bitで表示されます。

xAccl = ((data[1] * 256) + (data[0] & 0xF0)) / 16;
 if (xAccl > 2047)  xAccl -= 4096;
 xAccl = xAccl * 0.0098; // renge +-2g

後の計算は・・・ちょっと面倒になってきたので今回は諦めます。
レンジを変更するときは解読が必要になるかな。

サンプルプログラムを動かしてみる

サンプルプログラムを実行すると1秒ごとに値が出力されます。
加速度(Accl)はZ軸だけ値が大きいですが、これは重力加速度となるので地球の引力の問題です。

------------------------------------------
 Accl= -1.67,2.11,9.75
 Gyro= 0.23,-0.26,0.76
 Mag= -750,-1263,-256
------------------------------------------
 Accl= -1.78,2.06,9.66
 Gyro= -0.36,-0.05,0.65
 Mag= -753,-1264,-256
------------------------------------------
 Accl= -1.75,2.15,9.70
 Gyro= -1.18,-1.61,0.96
 Mag= -748,-1257,-255
------------------------------------------
 Accl= -1.82,2.10,9.68
 Gyro= -1.42,-0.53,1.69
 Mag= -744,-1253,-256
------------------------------------------
 Accl= -1.74,2.09,9.69
 Gyro= -0.17,-0.07,0.57
 Mag= -753,-1265,-256

コメント

タイトルとURLをコピーしました