STEMMAで広がるArduinoの世界㉓Step1 9軸加速度センサBNO-055

 加速度センサ単体では、衝撃などを受けたときに加速度を検知できますが、進行(x軸)方向が北を向いていたか、回転しているかどうかなど知ることができません。

 BNO-055はボッシュの製品で、加速度センサに3軸磁力計、3軸ジャイロスコープが組み合わされています。3軸+3軸+3軸で9軸です。
 磁界センシングを使ってキャリブレーションを行えば、北に向かっているかを知ることができます。
 回転速度がわかれば、センサ自体が水平に進んでいるかどうかがわかります。
 加速度がわかれば、一定速度で動いているかどうかがわかります。

 これら三つのセンサのデータから、例えば飛行機であれば、進む方向、飛行機の傾きなどを表せるオイラー角やクォータニオンが算出できます。

  • 3軸の加速度(重力 + 直線運動):加速度ベクトル
  • 3軸の回転速度:角速度ベクトル
  • 3軸の磁界センシング:磁界強度ベクトル
  • 温度

 生データ以外に、

  • 絶対方位(オイラー角)
  • 絶対方向(クォータニオン)

なども出力できます。

Adafruitのブレークアウト・ボード

 IC自体が3.3V電源で使うデバイスのため、5V->3.3VのレギュレータとI2Cの信号レベル変換回路が入っています。Arduino UNOのような5Vで動作するボードでも正しく動作します。SDA/SCL信号のプルアップ抵抗は10kΩが入っています。

 STEMMA QT(JST SH 4ピン)コネクタは2か所に装着されていて、どちらにつないでもかまいません。このコネクタを使ってI2Cで制御する場合、特に、ジャンパ線をつなぐなどは不要です。

  BNO-055

9軸加速度センサBNO-055のおもなスペック

  データシート

  • 動作電圧 2.4~3.6V
  • 加速度測定範囲 ±2、±4、±8、±16g、14ビット
  • ジャイロスコープ ±125°から±2000°/sec 切り替え可能な範囲、16ビット
  • 地磁気(磁気) ±1300µT(x、y軸)、±2500µT(z軸)、分解能0.3µT、13/13/15ビット
  • インターフェース I2C、UART
  • I2Cアドレス デフォルト0x28、裏面ジャンパで0x29

環境

  • Arduino UNO R3
  • Arduino IDE 1.8.13
  • Windows10 20H2

接続

 電源は5Vを使いました。Arduino UNO R3のI2Cは、専用のSCLとSDA端子がありますが、SCLはA5に、SDAはA4につながっています。どちら側につないでもかまいません。白色のリード線は見えないので、黄色で配線図を描きました。

スケッチ

 利用手順は、Adafruit BNO055 Absolute Orientation Sensor Overviewに書かれています。

 ライブラリを導入します。メニューのツールから、「ライブラリを管理」を選び、検索欄にBNO-055を入力します。見つけてきたAdafruit BNO055のインストールをクリックします。

 同時にサンプル・スケッチも導入されます。

 メニューのファイルからサンプルの入っているスケッチ例を選択します。Adafruit BNO055から、read_all_dataを選択します。

 実行中の様子です。

Absolute Orientation (Euler Vector, 100Hz) オイラー角
 360°球に基づく3軸方位データ

Absolute Orientation (Quaterion, 100Hz) クォータニオン
 正確なデータ操作のために4点のクォータニオンを出力

Angular Velocity Vector (100Hz) 角速度ベクトル
 3軸の回転速度(rad/s)

Acceleration Vector (gravity + linear motion) (100Hz) 加速度ベクトル
 3軸の加速度(重力 + 直線運動)(m/s2)

Magnetic Field Strength Vector (20Hz) 磁界強度ベクトル
 3軸磁界センシング(uT)

Linear Acceleration Vector (acceleration minus gravity) (100Hz) 線形加速度ベクトル
 3軸の線形加速度データ(加速度 - 重力)(m/s2)

Gravity Vector (minus any movement) (100Hz) 重力ベクトル
 3軸の重力加速度(m/s2)

サンプル・スケッチposition

サンプル・スケッチrawdata

サンプル・スケッチbunny

 roll、pitch、heading用Orientation (方向);x、y、z

 センサに送るcalibrationデータ;sys、gyroscope 、accelerometer、magnetometer 

 8の字にゆっくり回して、3 3 x 3になったらキャリブレーションが完了のようです。xは加速度の値なので、キャリブレーションには関係ありません。

サンプル・スケッチwebserial_3d

 クォータニオン(四次元ベクトル)の値が出力されています。

  角度 回転軸のx 回転軸のy 回転軸のz 

(※)9軸のセンサは、LSM9DS1やFXOS8700 + FXAS21002の組み合わせのNXP9-DOF(現時点でSTEMMA QTではない)があります。

前へ

STEMMAで広がるArduinoの世界㉓Step1 6軸加速度センサLSM303AGR

次へ

CO2センサを使う①AdafruitのSCD-30ボードをArduino UNOにつなぐ