読者です 読者をやめる 読者になる 読者になる

真実の楽譜(フルスコア)

プログラム関係の忘備録になるはず

MPU-9150をArduinoに接続して9軸モーションデータを取得する

MPU-9150

MPU-9150はGoogle Grassにも使用されている(らしい)
9軸(加速度・角速度・地磁気)モーションセンサー。
ストロベリーリナックス等でモジュールが購入できます。
https://strawberry-linux.com/catalog/items?code=12150

Arduinoに繋いでセンサーと仲良くなるためのメモ。

Arduinoを使用したデータ取得

単純に9軸データを取得するだけなら、
SparkfunがGitHubで公開している以下のソースを使うと楽。
https://github.com/sparkfun/MPU-9150_Breakout

MPU-9150_Breakoutを使った9軸データ取得

1.GitHubからリポジトリのマスターダウンロード

ページ内のDownload.Zipボタンをクリックして、
MPU-9150_Breakout-master.zip」をダウンロード。

2.ダウンロードしたファイルを解凍しライブラリに追加

MPU-9150_Breakout-master.zip」を解凍し解凍したフォルダから、

firmware\MPU6050
firmware\I2Cdev

の2つをArduino IDEのライブラリフォルダ「Arduino\libraries」にコピー。

3.Arduino IDEでスケッチを送信

MPU-9150_Breakout-master.zip」を解凍し解凍したフォルダから、

firmware\MPU6050\Examples\MPU9150_raw\MPU9150_raw.ino

Arduinoスケッチを書き込めば、
シリアル通信で9軸のデータ値が取得できます。

4.物理量として利用するには

このサンプルでは全てのセンサー値が符号付き16ビットで格納されていますが、
値磁気センサーのみ分解能が13ビットなので注意が必要です。
デフォルトでは以下のようにセンサー情報が表されています。

  • 加速度:±2G
  • 角速度:±250(degree/sec)
  • 地磁気:±1200(μT)

また物理量に変換するなら次の式を利用します。

加速度:{ \displaystyle
Acc = 2 * SensorValue / 32768
}
角速度:{ \displaystyle
{\omega} = 250 * SensorValue  / 32768
}
地磁気{ \displaystyle
Mag = 1200 * SensorValue / 4096
}

ちなみに地磁気は周囲の影響を受けまくっているので、
ぐりぐりと8の字に動かしてこの値からオフセットを求めて
補正することが必要になります。

5.もうちょっとできる子なんですが

実はこのセンサー実はもうちょっとできる子です。
センサー公式に概要が書かれていますがセンサーの中に、
Digital Motion Processing™ (DMP™) エンジンが搭載されており、
センサーフュージョンによる姿勢計算をして出力してくれます。
MEMS Gyro-Accel | Gyroscope | Accelerometer | Processing - MPU-9150 9軸(ジャイロ+加速度+コンパス)MEMS MotionTracking™ デバイス

MPU-9150_Breakout-master内の「MPU6050_DMP6.ino」は
DMPエンジンを利用したサンプルスケッチなんですが、
値磁気センサーが組み込まれていない下位モデルのMPU-6050用で、
このままだと6軸のみで地磁気のデータが取れてこない。

そこでまた色々と試行錯誤したわけですがそれは書く機会があれば。