2021/01/01(FRI) 【M5Stack】正月から数学。。。
はい
あけましておめでとうございます。

前回の地磁気センサーの
サンプルのプログラムを
ちょっと解析してた。

あ、一応、繰り返しで書いておこう。
M5Stack GRAYでデジタルコンパスを作ろうとしていて
地磁気センサーがBMM150ってのがハードが変わってます。
で、gitからサンプルを落としてきて
動かしたところまでできました。

まずはファイル構成はこんな感じ
bmm150.cpp BMM150のドライバ的なコード
bmm150.h BMM150のドライバのAPIの定義ヘッダファイル
bmm150_defs.h BMM150の制御に必要が定数とか定義されているヘッダファイル
bmm150.ino サンプルプログラム



ということでプログラム解析。
基本サンプルプログラムを中心に。
まず初期化。
ザックリ処理フローは↓こんな感じ
フォト

でね、
最初の
 Wire.begin( 21, 22, 400000 ) ;

Wireクラスってのは
I2C通信関連のクラスなんだけど
引数は、
データシートに書いてあります。
まずはピンの番号
フォト

BMM150のデータシートに
クロック周波数が400kHz。
フォト

 400kHz = 4000000 Hz
ですね。
 BMM150_Initialization();
は、BMM150の初期化をしています。
詳しくは省略。

初期化がおわったら
あとは周期処理でデータを読み出すだけです。
ザックリ処理フローは↓こんな感じ
フォト

まぁデータを読み出して
xとyを用いて、arctan()してるだけですが・・・
arctan()とは
↓こんな感じです。
フォト

ただね、
センサーから取得されるデータって
原点(0,0)からの値でなく
いろんな影響を受けてズレてます。

キャリブレーションして
原点を補正するオフセット値をもとめて
その値で補正して、arctan()すると
北が0°で南が180°って感じで
計算されます。

まぁ細かいI2C通信とか
レジスタが云々かんぬんと
プログラムを見ると大変ですが
ザックリ必要なAPIだけ抑えておけば
簡単にデータは取得できそうです。

新年早々、頭使いすぎたwww