Skip to content

team-dauntless-uncharted/BNO055Library

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 

Repository files navigation

BNO055 Arduino ライブラリ

Bosch BNO055 9軸絶対方位センサー用のArduinoライブラリです。Spresense開発ボードでの使用に最適化されています。

特徴

  • 9軸センサーフュージョン: 加速度計、ジャイロスコープ、磁気計のデータを融合
  • I²C通信: シンプルで信頼性の高い通信プロトコル
  • 自動キャリブレーション: センサーの精度を自動的に最適化
  • 豊富なデータ出力: 生データとフュージョンデータの両方を提供
  • 使いやすいAPI: 直感的なメソッドでセンサーデータにアクセス

対応データ

  • 加速度 (m/s²): 3軸の線形加速度
  • 角速度 (dps): 3軸の回転速度
  • 磁束密度 (µT): 3軸の磁場強度
  • オイラー角 (degrees): ヘディング、ロール、ピッチ角
  • キャリブレーションステータス: 各センサーの校正状態

ハードウェア要件

  • マイコン: Arduino互換ボード(Spresense推奨)
  • センサー: BNO055モジュール
  • 通信: I²C(Wire ライブラリ使用)
  • 電源: 3.3V または 5V

配線

BNO055 Spresense 説明
VDD 3.3V 電源(正)
GND GND 電源(負)
SCL D15 (SCL) I²Cクロック
SDA D14 (SDA) I²Cデータ
ADR GND I²Cアドレス選択(0x28)

インストール

Arduino IDE

  1. このリポジトリをダウンロードまたはクローン
  2. Arduino IDEの「ライブラリ」フォルダにコピー
  3. Arduino IDEを再起動
  4. #include "BNO055.h" でライブラリを使用

ライブラリマネージャー(将来対応予定)

スケッチ → ライブラリをインクルード → ライブラリを管理 → "BNO055" を検索

使用方法

基本的な使用例

#include "BNO055.h"

BNO055 bno = BNO055(); // デフォルトアドレス(0x28)

void setup() {
    Serial.begin(115200);
    
    if (!bno.begin()) {
        Serial.println("BNO055初期化失敗");
        while(1);
    }
    
    Serial.println("BNO055初期化完了");
}

void loop() {
    // オイラー角を取得
    EulerAngles euler = bno.getEulerAngles();
    
    Serial.print("Heading: "); Serial.print(euler.heading);
    Serial.print(", Roll: "); Serial.print(euler.roll);
    Serial.print(", Pitch: "); Serial.println(euler.pitch);
    
    delay(100);
}

キャリブレーション監視

void loop() {
    CalibrationStatus calib = bno.getCalibrationStatus();
    
    Serial.print("System: "); Serial.print(calib.system);
    Serial.print(", Gyro: "); Serial.print(calib.gyro);
    Serial.print(", Accel: "); Serial.print(calib.accel);
    Serial.print(", Mag: "); Serial.println(calib.mag);
    
    if (calib.system >= 1 && calib.gyro >= 3 && 
        calib.accel >= 3 && calib.mag >= 3) {
        Serial.println("キャリブレーション完了!");
    }
    
    delay(1000);
}

API リファレンス

コンストラクタ

BNO055(uint8_t i2cAddress = BNO055_ADDRESS_A)

  • 説明: BNO055インスタンスを作成
  • パラメータ:
    • i2cAddress: I²Cアドレス(0x28 または 0x29)
  • デフォルト: 0x28

初期化メソッド

bool begin()

  • 説明: センサーを初期化し、NDOFモードに設定
  • 戻り値: 成功時 true、失敗時 false
  • 処理内容:
    • I²C通信開始
    • センサーリセット
    • 内部クロック設定
    • 単位設定
    • NDOFモード切り替え

データ取得メソッド

Vector<float> getAcceleration()

  • 説明: 3軸加速度データを取得
  • 戻り値: Vector<float> 構造体(x, y, z成分)
  • 単位: m/s²

Vector<float> getGyroscope()

  • 説明: 3軸角速度データを取得
  • 戻り値: Vector<float> 構造体(x, y, z成分)
  • 単位: dps(度/秒)

Vector<float> getMagnetometer()

  • 説明: 3軸磁束密度データを取得
  • 戻り値: Vector<float> 構造体(x, y, z成分)
  • 単位: µT(マイクロテスラ)

EulerAngles getEulerAngles()

  • 説明: オイラー角を取得
  • 戻り値: EulerAngles 構造体
  • 成分:
    • heading: 方位角(0-360°)
    • roll: ロール角(-180~+180°)
    • pitch: ピッチ角(-90~+90°)

CalibrationStatus getCalibrationStatus()

  • 説明: キャリブレーション状況を取得
  • 戻り値: CalibrationStatus 構造体
  • 成分:
    • system: システム全体(0-3)
    • gyro: ジャイロスコープ(0-3)
    • accel: 加速度計(0-3)
    • mag: 磁気計(0-3)
  • レベル: 0=未校正、3=完全校正

bool isConnected()

  • 説明: センサーとの接続状態を確認
  • 戻り値: 接続成功時 true

データ構造体

Vector<T>

template<typename T>
struct Vector {
    T x, y, z;
};

EulerAngles

struct EulerAngles {
    float heading;  // ヨー角
    float roll;     // ロール角  
    float pitch;    // ピッチ角
};

CalibrationStatus

struct CalibrationStatus {
    uint8_t system;  // システム全体
    uint8_t gyro;    // ジャイロスコープ
    uint8_t accel;   // 加速度計
    uint8_t mag;     // 磁気計
};

キャリブレーション手順

BNO055は使用前にキャリブレーションが必要です。各センサーのキャリブレーション方法:

1. 磁気計(Magnetometer)

  • デバイスを8の字にゆっくりと動かす
  • 様々な向きに傾けながら実行
  • 磁気的に清浄な環境で行う

2. 加速度計(Accelerometer)

  • デバイスを6つの面に静止配置
    • 上面、下面、左面、右面、前面、後面
  • 各面で2-3秒間静止させる

3. ジャイロスコープ(Gyroscope)

  • デバイスを完全に静止状態で配置
  • 振動のない安定した場所を選ぶ
  • 数秒間動かさずに待機

トラブルシューティング

初期化失敗

  • 原因: 配線不良、電源不足、I²Cアドレス不一致
  • 対策:
    • 配線を再確認
    • 電源電圧を確認(3.3V推奨)
    • ADRピンの接続確認

データが取得できない

  • 原因: キャリブレーション不足、I²C通信エラー
  • 対策:
    • キャリブレーションを完了させる
    • プルアップ抵抗の追加(4.7kΩ推奨)

精度が低い

  • 原因: 不完全なキャリブレーション、環境的干渉
  • 対策:
    • キャリブレーション手順を正しく実行
    • 磁気的・振動的干渉を除去

サンプルスケッチ

このライブラリには以下のサンプルが含まれています:

  1. BNO055_BasicExample.ino: 基本的な使用方法
  2. BNO055_CalibrationMonitor.ino: キャリブレーション監視

技術仕様

  • 通信プロトコル: I²C(最大400kHz)
  • 動作電圧: 2.4V - 3.6V
  • 動作温度: -40°C - +85°C
  • データ更新レート: 最大100Hz
  • 分解能:
    • 加速度: 1mg
    • 角速度: 1°/s
    • 磁気: 1µT
    • オイラー角: 1°

ライセンス

MIT License

貢献

プルリクエストとイシューの報告を歓迎します。

サポート

  • GitHub Issues: バグ報告・機能要望
  • Wiki: 詳細なドキュメント
  • Examples: 実用的なサンプルコード

更新履歴

v1.0.0 (初回リリース)

  • BNO055の基本機能実装
  • NDOF モードサポート
  • キャリブレーション監視機能
  • サンプルコード提供

About

BNO055ライブラリ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages