ESP-WROOM-02
MPU-9250 https://strawberry-linux.com/catalog/items?code=12250
ライブラリ https://github.com/jrowberg/i2cdevlib/
測定周期の変更
Jeff RowbergによるMPU用ライブラリとサンプルスケッチMPU6050_DMP6を使った場合、デフォルトではMPU-9250の測定は100Hzで行われ、FIFOの扱いをきちんとしないとFIFO overflowになる。
測定間隔を100Hzから落とす方法について調べた。
参考 https://sites.google.com/site/yamagajin/home/mpu6050
ライブラリのヘッダーファイル(MPU6050_6Axis_MotionApps20.h)を変更すると測定周期を変更できるとのこと。MPU-9250の場合はMPU9150_9Axis_MotionApps41.hになる。
ただし、ライブラリのヘッダファイルそのものを変更すると、今後MPU-9250を使用するすべてのソフトがその測定周期になってしまう。
ここでは、#include "ファイル.h"
の仕組みを考慮した変更を行う。
変更ファイルのローカル化
#inlcude "ファイル.h"
をソース内で定義した場合、ヘッダーファイルのサーチ順番は以下となる。
- ローカルのフォルダ
- インクルードファイルパスが通っているフォルダ (Arduino\Librariesなど)
つまり、ローカルのフォルダにMPU9150_9Axis_MotionApps41.hがあり、Arduino\LibrariesにもMPU9150_9Axis_MotionApps41.hのファイルがある場合、ローカルフォルダのMPU9150_9Axis_MotionApps41.hが使われる。
ローカルフォルダのMPU9150_9Axis_MotionApps41.hの測定周期を変更すると、ローカルフォルダに同ファイルがない他のプロジェクトではArduino\Libraries内のヘッダーが使われるので、それらのプロジェクトではデフォルトの100Hzの測定周期となる。
ヘッダファイルの変更を特定のプロジェクトだけに制限できることになる。
以下のコピー元からコピー先にファイルをコピーして、コピー先の設定を変更するといい。
- コピー元: \Arduino\libraries\MPU9150\MPU9150_9Axis_MotionApps41.h
- コピー先: \Arduino\esp8266_160701_MPU9250\MPU9150_9Axis_MotionApps41.h
(\Arduino\esp8266_160701_MPU9250: 今回のプロジェクトフォルダ)
MPU9150_9Axis_MotionApps41.hの変更
参考 https://sites.google.com/site/yamagajin/home/mpu6050
を参考に以下の行を変更した。
// 0x02, 0x16, 0x02, 0x00, 0x03 // D_0_22 inv_set_fifo_rate
0x02, 0x16, 0x02, 0x00, 0xC7 // D_0_22 inv_set_fifo_rate
// This very last 0x01 WAS a 0x09, which drops the FIFO rate down to 20 Hz. 0x07 is 25 Hz,
// 0x01 is 100Hz. Going faster than 100Hz (0x00=200Hz) tends to result in very noisy data.
// DMP output frequency is calculated easily using this equation: (200Hz / (1 + value))
// It is important to make sure the host processor can keep up with reading and processing
// the FIFO output at the desired rate. Handling FIFO overflow cleanly is also a good idea.
上記コメントにあるように、(200Hz / (1 + value))が測定周期になるので、valueには199となるように0xC7を指定した。これで1Hzとなる。
元のコードは0x03を使っていたので、50Hzだったようだ。
code (v0.3)
実際に実行したところ、1Hzの測定間隔となった。
距離計と組合せてポータブル3Dスキャナとする場合はこれくらいの測定周期がいいかと思う。