LoginSignup
0
0

More than 3 years have passed since last update.

GROVE「IMU 9DOF v2.0」を試してみた

Last updated at Posted at 2020-11-03

Groveセンサーで加速度&ジャイロを探していたら、9軸(加速度&ジャイロ&デジタルコンパス)の製品があったので試してみました。

試した作業はwikiのままなのですが、いくつか修正が必要だったので、記録として残しておきます。

【重要】wikiの情報は「v1.0」のものなので、チップが異なりますので注意してください。(MPU6050用)

準備

今回はESP32開発ボードからブレッドボード経由で接続しました。

  • ESP32開発ボード
  • GROVE IMU 9DOF v2.0(含AWG Groveケーブル)
  • ブレッドボード
  • ジャンパーワイヤー(4本)

接続

GroveのコネクタとESP32のピンをつなぎます。
I2Cは21番(SDA)と22番(SDL)になります。
image.png
image.png

ソースのダウンロード

サンプルプログラムをダウンロードします。
https://raw.githubusercontent.com/SeeedDocument/Grove-IMU_9DOF_v2.0/master/res/Grove_IMU_9DOF_9250.zip

【注意】wikiのライブラリへのリンクは古いものです

その後、スケッチの「ライブラリをインクルード」でダウンロードしてきたファイルを指定します。

コンパイル&ビルド

スケッチ例から「IMU_9DOF_Demo_Compass_Calibrated」を指定して読み込み、コンパイルします。

しかし以下のエラーになります。

In file included from C:\Users\mine\Documents\Arduino\libraries\Grove_IMU_9DOF_9250\examples\IMU_9DOF_Demo_Compass_Calibrated\IMU_9DOF_Demo_Compass_Calibrated.ino:6:0:

C:\Users\mine\Documents\Arduino\libraries\Grove_IMU_9DOF_9250/MPU9250.h:41:26: fatal error: avr/pgmspace.h: No such file or directory

「pgmspace.h」のパスが変わっていますので、以下のように修正します。

MPU9250.h
#ifndef _MPU9250_H_
#define _MPU9250_H_

#include "I2Cdev.h"
#if (defined(__AVR__))
#include <avr/pgmspace.h>
#else
#include <pgmspace.h>
#endif

もう一度コンパイルすると、今度は別のエラーになります。

C:\Users\mine\Documents\Arduino\libraries\Grove_IMU_9DOF_9250\I2Cdev.cpp: In static member function 'static int8_t I2Cdev::readBytes(uint8_t, uint8_t, uint8_t, uint8_t*, uint16_t)':

C:\Users\mine\Documents\Arduino\libraries\Grove_IMU_9DOF_9250\I2Cdev.cpp:276:62: error: 'BUFFER_LENGTH' was not declared in this scope

             for (uint8_t k = 0; k < length; k += min(length, BUFFER_LENGTH)) {

                                                              ^

C:\Users\mine\Documents\Arduino\libraries\Grove_IMU_9DOF_9250\I2Cdev.cpp: In static member function 'static int8_t I2Cdev::readWords(uint8_t, uint8_t, uint8_t, uint16_t*, uint16_t)':

C:\Users\mine\Documents\Arduino\libraries\Grove_IMU_9DOF_9250\I2Cdev.cpp:416:70: error: 'BUFFER_LENGTH' was not declared in this scope

             for (uint8_t k = 0; k < length * 2; k += min(length * 2, BUFFER_LENGTH)) {

                                                                      ^

今は、BUFFER_LENGTHが定義されていないためエラーとなっています。
なので、強制的に追加します。(いい名前ではないですが)

I2Cdev.cpp:90
#define BUFFER_LENGTH 32

また、min()の宣言が異なっているので、こちらも修正しておきます。

I2Cdev.cpp:278
            for (uint8_t k = 0; k < length; k += std::min<int>(length, BUFFER_LENGTH)) {
I2Cdev.cpp:418
            for (uint8_t k = 0; k < length * 2; k += std::min<int>(length * 2, BUFFER_LENGTH)) {

※本当は、他のところの「min()」も直したほうがいいです

これでビルドに通るようになります。
(ワーニングは残ってますが、とりあえず気にしない)

その他の注意事項

古いコード(MPU6050のライブラリ)等が先に入っていたりすると、ソースファイルの参照先がそっちになっていたりします。
おかしいなと思ったら、ファイルのパスを確認してみてください。

実行

ビルドしたコードをESP32に送り、実行すると、まず以下のようなメッセージがシリアルモニタに表示されます。

MPU9250 connection failed

テスト接続に失敗しているようですが、その後は気にせずに、以下のようなに計測値が表示されます。

calibration parameter: 
0.00         0.00         0.00

Acceleration(g) of X,Y,Z:
0.03,0.05,1.03
Gyro(degress/s) of X,Y,Z:
1.30,0.37,-1.35
Compass Value of X,Y,Z:
25.20,31.64,22.85
The clockwise angle between the magnetic north and X-Axis:
51.47 
The clockwise angle between the magnetic north and the projection of the positive X-Axis in the horizontal plane:
51.26

センサーを動かすと、一応値も変わるようです。

まとめ

途中、エラーの修正が必要ですが、基本的にはwikiの手順で進めていけば大丈夫そうです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0