🧭

bmm150-compassライブラリ導入ガイド

2023/12/17に公開

bmm150-compassライブラリについて

bmm150-compassはM5Stack社が公開してる地磁気センサーBMM150用ライブラリ m5stack/M5_BMM150 をより簡単に使用できるようにするために開発したライブラリです。bmm150-compassは、Arduino開発者にとってより扱いやすいラッパーとして設計されました。この記事では、bmm150-compassライブラリの導入方法と基本的な使い方を紹介します。

ライブラリの特徴

  • 簡易化された初期化: BMM150センサーのセットアップと初期化が簡単に。
  • 直感的なデータ読み取り: X, Y, Z軸の地磁気データを簡単に取得。
  • PlatformIOとの統合: PlatformIOでダウンロードして使用可能。

導入方法

PlatformIOライブラリマネージャーの利用: PlatformIO IDEを開き、ライブラリマネージャーからbmm150-compassを検索し、インストールします。

platformio.iniファイルの設定: 以下の設定をプロジェクトのplatformio.iniファイルに追加します。

lib_deps =
    https://github.com/tichise/bmm150-compass.git

ライブラリのインポート: Arduinoスケッチで#include <BMM150Compass.h>を使用してライブラリをインポートします。

詳細な手順はこちらにまとまってます。
tichise/BMM150Compass: About This wrapper is designed to simplify…

基本的な使い方

#include <Arduino.h>
#include <BMM150Compass.h>

// SDAとSCLのピン番号を定義(あなたのハードウェア設定に合わせて変更してください)
#define PIN_SDA 13
#define PIN_SCL 15

// BMM150Compassのインスタンスを作成
BMM150Compass compass;

void setup()
{
  Wire.begin(PIN_SDA, PIN_SCL);

  delay(3000);
  USBSerial.println("Starting BMM150 Compass example...");

  // シリアル通信の初期化
  USBSerial.begin(115200);

  compass = BMM150Compass();

  // センサーの初期化
  if (compass.initialize() != BMM150_OK)
  {
    USBSerial.println("BMM150 initialization failed!");
    while (1)
      ; // 初期化に失敗した場合は無限ループ
  }

  USBSerial.println("BMM150 initialized successfully.");

  // オフセットの読み込み
  compass.offset_load();

  // キャリブレーションの実行(10秒間)
  USBSerial.println("Starting calibration...");
  compass.calibrate(10000);
  USBSerial.println("Calibration complete.");
}

void loop()
{
  int16_t raw_data[3];

  // 磁気センサーの値を取得するメソッド
  compass.getXYZ(raw_data);
  
  // 以降の処理はBMM150を積んだ開発ボードでも、ボードによって異なります。XYZ軸の扱いが違うので、ご自身の環境に合わせて適宜書き直してください。

  // 度数での方位角を取得するメソッド(0から360度の範囲)
  double headingDegrees360 = compass.getHeadingDegrees360();
  
  // Grove Degital Compass v2はv1と比べて180度ずれてるので、180度回転させる
  headingDegrees360 += 180; // 角度を180°時計回りに回転
  if (headingDegrees360 < 0)
  {
    headingDegrees360 += 360; // 負の値を修正
  }
  headingDegrees360 = fmod(headingDegrees360, 360); // 360°を超える値を修正

  // 結果をシリアルポートに出力
  USBSerial.print("Heading: ");
  USBSerial.print(headingDegrees360);
  USBSerial.println(" degrees");

  // ループの遅延(1秒ごとに更新)
  delay(1000);
}

この簡単な例では、地磁気センサーからX, Y, Z軸のデータを読み取り、シリアルモニターに表示しています。

bmm150-compassライブラリを使用することで、Arduinoユーザーは地磁気センサーBMM150の機能を最大限に活用し、独自のプロジェクトに簡単に統合することができます。このライブラリは、地磁気センサーの使用をよりアクセシブルにし、Arduinoコミュニティに貢献することを目指しています。

Discussion