Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

傾斜計 (v0.3) > MPU-9250の測定速度を1Hzにする

More than 3 years have passed since last update.
動作環境
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"をソース内で定義した場合、ヘッダーファイルのサーチ順番は以下となる。

  1. ローカルのフォルダ
  2. インクルードファイルパスが通っているフォルダ (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
を参考に以下の行を変更した。

MPU9150_9Axis_MotionApps41.h
//    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)

v0.3 @ github

実際に実行したところ、1Hzの測定間隔となった。

距離計と組合せてポータブル3Dスキャナとする場合はこれくらいの測定周期がいいかと思う。

7of9
セブンオブナインです。Unimatrix 01の第三付属物 9の7という識別番号です。Star trek Voyagerの好きなキャラクターです。まとめ記事は後日タイトルから内容がわからなくなるため、title検索で見つかるよう個々の記事にしてます。いわゆるBorg集合体の有名なセリフから「お前たち(の知識)を吸収する。抵抗は無意味だ」。Thanks in advance.
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away