Arduino UNO R4 Minimaでセンサ・インターフェーシング ㉝ IMU BNO055

 Adafruitの方位/慣性計測(IMU)モジュール BNO055(BOSCH)を利用します。

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

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


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

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

 生データを受け取った側で計算するのではなく、このモジュールでは3Dの処理などにすぐに使える上記の演算済みの値が出力されます。

AdafruitのStemma QT/Qwiicボード

 BNO055ボード解説のページ

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

 コネクタは、表と裏のどちらも差し込めそうですが、ピンが内部の上部に並んでいるので、差し込める方向は一意です。ロック機構はないですが、すぐに抜けるということはありません。

IMU BNO055のおもなスペック

 BNO055のデータシート

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

使用環境

  • Arduino UNO R4 Minima
  • Arduino IDE 2.2.1
  • Windows10 22H2

接続

 Arduino UNO R4 MinimaのI2C信号とセンサ・ボードをJSTコネクタでつなぎます(Stemma QT/Qwiicボードの写真の比率は異なる)。

スレーブ・アドレスを確認

 従来からよく使われているi2cScanner.inoを動かしてスレーブ・アドレスを確認します。電源は3.3Vです。

  0x28を見つけてきました。

 


ライブラリの用意

 BNO055で検索して、見つかった  Adafruit BNO055ライブラリをインストールします。

 インストールを始めたとき、関連のライブラリや依存関係をインストールするかというパネルが出た場合は、全てをインストールを選びます。

デバイスのキャリブレーション

 BNO055 には、デバイス内のジャイロスコープ、加速度計、磁力計を常に校正するための内部アルゴリズムが含まれています。

 キャリブレーション・プロセスの正確な性質はブラック・ボックスであり、完全には文書化されていませんが、 Adafruit_BNO055ライブラリの.getCalibration関数を使用して各センサのキャリブレーション ステータスを読み取れます 。この関数の使用方法を示すスケッチ例は sensorapi.inoにあります。

  Adafruit Device Calibration


サンプル・スケッチ①

 メニューのファイル->スケッチ例から、Adafruit BNO055のbunny.inoを選択します。

 Processingを用いて3Dのウサギを表示するときに用いるスケッチです。

  Adafruit Processing Test 

  コンパイル、実行します。3Dのウサギの表示は動かしていません。

サンプル・スケッチ②

 メニューのファイル->スケッチ例から、Adafruit BNO055のposition.inoを選択します。

 linearAccelData.acceleration.x、linearAccelData.acceleration.y、の位置情報、センサが向いている方向の速度(headingVel)の三つを表示します。

  コンパイル、実行します。

サンプル・スケッチ③

 メニューのファイル->スケッチ例から、Adafruit BNO055のrawdata.inoを選択します。

 最初に温度を表示し、その後、生の加速度計、磁力計、またはジャイロスコープのデータを表示します。

  Adafruit Raw Sensor Data

  コンパイル、実行します。

サンプル・スケッチ④

 メニューのファイル->スケッチ例から、Adafruit BNO055のread_all_data.inoを選択します。

  コンパイル、実行します。

サンプル・スケッチ⑤

 メニューのファイル->スケッチ例から、Adafruit BNO055のrestore_offsets.inoを選択します。

  コンパイル、実行します。

サンプル・スケッチ⑥

 メニューのファイル->スケッチ例から、Adafruit BNO055のsensorapi.inoを選択します。

  コンパイル、実行します。

サンプル・スケッチ⑦

 メニューのファイル->スケッチ例から、Adafruit BNO055のwebserial_3d.inoを選択します。

 Chrome ブラウザでWeb Serial APIを利用して、うさぎの3Dを回転させるスケッチです。

   Adafruit WebSerial Visualizer

  コンパイル、実行します。表示では、オイラー角もしくはクォータニオンのデータが選択できます。

 3Dのウサギの表示は動かしていません。

グラフィック・ディスプレイに測定結果を表示---失敗

 次の記事を参考に、グラフィック・ディスプレイに測定したを表示します。

 ベースにしたのは、サンプル・スケッチ⑦のwebserial_3d.inoです。

  Arduino UNO R4 Minimaでセンサ・インターフェーシング ⑤ 温湿度センサSi7021の測定結果をグラフィック・ディスプレイに表示

 グラフィック・ディスプレイをつなぐと、表示される値がほとんど全部0になりました。

 i2cScanner.inoを動かすと、0x28と0x3dが表示され、スレーブ・アドレスが重なっているわけではなさそうです。BNO055ボードの裏面0x29のジャンパをショートし、スケッチの、

  Adafruit_BNO055 bno = Adafruit_BNO055(55, 0x29);

を変更してみました。

 BNO055ボード単独では正常でしたが、グラフィック・ディスプレイをつなぐと値が0になります。

 原因は不明です。

  

前へ

Arduino UNO R4 Minimaでセンサ・インターフェーシング ㉜ 光センサ VEML7700

次へ

Arduino UNO R4 Minimaでセンサ・インターフェーシング ㉞ 加速度センサ MSA301