2017年7月29日土曜日

ArduinoでMPU9250(加速度センサ、磁気センサ)を使う方法


欲しい値を取得するのに思っていたよりも時間がかかったので、メモを残します。

目的

9軸センサ MPU9250で加速度と磁気を取得したい。

使ったもの

Arduino


aliexpressで買いました。
秋月電子でも買えます。
今回はNANOを使いましたが、ProMicroもお勧めです。

MPU9250


9軸センサモジュールです。
加速度と角速度が取れる6軸線センサMPU6500と、3軸磁気センサAK8963が合体したモジュールです。
amazonスイッチサイエンスaliexpressなどで買えます。

ブレッドボード


部品を配置するのに使いました。
秋月電子やスイッチサイエンスなど、電子部品取扱店で買えます。

ジャンパワイヤ


部品を配線するのに使いました。
秋月電子やスイッチサイエンスなど、電子部品取扱店で買えます。

PC + ArduinoIDE

Arduinoのプログラムと、値の確認に使いました。
ArduinoIDEは下記のページからダウンロードできます。

Download the Arduino IDE

配線

このように配線しました。

Arduino (Nano) MPU9250
5V VCC
SDA(A4) SDA
SCL(A5) SCL
GND GND


NanoやUno以外のArduinoを使う場合、I2Cに割り当てられているピンが異なる場合があるので、wireライブラリの説明ページでピンを確認してください。

ライブラリの準備

使いやすそうなライブラリが見当たらなかったので、自分が最低限欲しい情報だけ取り出すライブラリを作りました。


ArduinoIDEのライブラリマネージャーを使ってインストールできます。


9250とかで検索すると出てくると思います。


実行

ライブラリをインストールできたらサンプルプログラムが使えるので、それを開いてArduinoに書き込みます。
File -> Examples -> MPU9250_asukiaaa -> getData


シリアルモニタを115200bpsで開くと、値を確認できます。


自分の磁気センサはXが最大110、最低10、Yが最大120、最低20位だったので、Xに対して-60、Yに対して-70のoffsetを設定すると、水平方向の磁気がそれっぽく取れるようになりました。
mySensor.magXOffset = -60;
mySensor.magYOffset = -70;

モジュールによってふさわしいoffsetの値は多分異なると思うので、複数のハードに対して同じプログラムを動かしたい場合は、offsetの値をNANDメモリなどに値を書き込んで実行時に読みだすなどの仕組みが必要になりそうです。

まとめ

Arduinoで加速度センサと磁気センサの出力を取得できました。
磁気センサの値はoffsetでそれらしい値に補正できましたが、別のMPU9250モジュールを利用する場合はoffsetの値を変える必要があるので、プログラムを使い回すときは注意が必要そうです。

共有する情報は以上です。

参考

AK8963
SparkFun_MPU-9250
jrowberg/i2cdevlib/Arduino/AK8963

0 件のコメント :

コメントを投稿