(2014.8.23 作成)
このページで紹介するLSM303DLHCですが、内部に3軸の加速度センサーと同じく3軸の磁気センサーが入っています。利用にはI2Cでアクセスを行いますが、加速度センサーと磁気センサーはそれぞれ別のアドレスが割り振られており、別個のICがひとつのパッケージに入っていると考えてよい振る舞いをします。たとえばそれぞれ独立してパワーダウンモードに入れることも可能です。
何度か書いていますが、LSM303DLHCの仕様書を見ても使い方はまったくわかりません。しかし加速度センサーについてはLIS3DHの仕様書を読めばほぼ使い方はわかります。
特徴としては
です。MPU-6050と比べても機能がとても多く、理解するのが困難な反面、使いこなせれば強力だと思います。
注意点としてはレジスタOUT_X_L_A(0x28 = 0b0010_1000)以降の6バイトがデータなのですが、普通に6バイト連続して呼んでもアドレスポインターが移動せず同じデータを読むことになります。アドレスをインクリメントしながら読み出すためには先頭ビットを1にして0xA8 (=0b1010_1000)を読み出す必要があります。
磁気センサについては加速度センサと異なり参考に出来る情報を見つけることが出来ませんでした。磁気センサにも単機能ICであるLIS3MDLというデバイスがあるのですが、この仕様書も同レベルで役に立ちません。。
校正についてのApllication Noteが出ているので詳しく読めば何らかの情報が得られるかもしれません。
よってこのサイトで公開しているプログラムの磁気センサ部分は管理人がネット公開されているプログラムからつぎはぎして作成したもので、正直言って自信がないです。