LSM9DS1を使おうと頑張ったよ

こんばんは。

今日は、秋月で買ったLSM9DS1使用モジュールと格闘していました。

一応前置きとして説明しておくと、LSM9DS1は9軸センサーです。

角速度、加速度、地磁気の3×3=9つの軸があって、センサーが今どの方向にどの角度で向いているのかがわかります。

 

f:id:S4heno:20210530202121j:image

Arduinoに繋いで角度の検出をしている様子です。センサーを回転させると左のようなグラフが出てきます。

 

それで、このモジュールの説明書に従ってサンプルを動かそうとしたものの、上手くいきませんでした。

なんとか目的の角度の検出はできるようになったので、将来同じ状況に陥った方に向けて残しておきます。

 

まず、モジュールの説明をざっとまとめます。

  1. I2Cで使えるように配線する
  2. テストプログラムを動かして、I2Cアドレスを取得して確認する
  3. ライブラリのサンプルプログラムを動かして、角度を測定する

 

当初2までは問題なかったものの、3がどうしても上手くいきませんでした。

setup()の中には初期化処理が上手くいかなかったらエラー文を出力するようになっていましたが、シリアルモニタには何もなし。

それでもなんとかかんとか動かせましたので、以下にまとめておきます。

 

1.ライブラリのバージョンを変える

説明書で推奨されているライブラリは現在2.0みたいなのですが、私は1.0にしないと初期化処理が動きませんでした。

 

2.I2C関係の設定をする

サンプルには無かったのですが、スイッチサイエンスで同型のセンサーモジュールのチュートリアルを見ると、どうやら設定が必要っぽい。

imu.settings.device.commInterface = IMU_MODE_I2C;
imu.settings.device.mAddress = LSM9DS1_M;
imu.settings.device.agAddress = LSM9DS1_AG;

LSM9DS1 Breakout Hookup Guideより引用

LSM9DS1 Breakout Hookup Guide - learn.sparkfun.com

setup()内にこんな感じのを足したら動きました。

LSM9DS1_MとLSM9DS1_AGは上の方で定義してあります。それぞれ地磁気と加速度&ジャイロのI2Cアドレスです。

 

3.シリアルモニタに表示させる(おまけ)

シリアルモニタに表示がなかった件ですが、多分これは私がArduino Leonardoを使っていたから。

第47回 補足 – シリアルモニタ│ツール・ラボ

こちらの記事を参考にしたのですが、Arduino Microでもなるっぽいですね。でもセンサーとは直接関係ないので、おまけにしておきます。

 

以上、いつかどなたかの解決の糸口となりますように。

お読みいただきありがとうございました。