MPU-6050 は InvenSense 製のI2C接続のジャイロ・加速度センサICです。 DMP (Digital Motion Processor) という機能を使うことで、補正済みのデータを簡単に利用できるのが特徴です(一般にジャイロ(角速度センサ)の特性は温度によって変化しますし、ノイズも多めなので適切な処理が必要です)。 Arduino Playgroundにあるように DIP 変換モジュールが各社から販売されています。 ここではアマゾンで安く買えたGY-521を使いました。GY-521をSNS-1007V2という型番で販売しているandrodcitiのWikiに日本語の情報がまとまっています。
MPU-6050の電源電圧は 3.3[V] ですが、GY-521に3.3[V]のレギュレータICが載っていて、I2Cバスのプルアップ抵抗が 3.3[V] へ繋がっているので、5[V]電源の Arduino に直接つないで使うことが出来ます(レベル変換をしていないので条件によっては、うまく動作しない可能性があることに注意)。 以下では、次のように配線して試しています。
名称 | Arduinoのピン | 備考 |
VCC | 5V | |
GND | GND | |
SCL | SCL (A5) | |
SDA | SDA (A4) | |
INT | D2 |
androdcitiのWikiにあったライブラリ(Jeff Rowberg氏のライブラリ)を少し改変しました(パラメータのバグフィクス(最新のものと同じ)とサンプルスケッチの改造)。
展開したライブラリ(I2CdevとMPU6050)を Arduino の libraries フォルダへおき、スケッチの例→MPU6050→MPU6050_DMP6を開きます。 そのままスケッチを書き込み(アップロードし)、シリアルモニタなどで 115200bps で Arduino のシリアルポートを開くと、 "Send any character to begin DMP programming and demo:"と出ているはずです。 なんでもいい(「a」とか)ので、文字を Arudinoへ送る(シリアルモニタでは上の箱に文字を入れて「送信」をクリック)と初期化が始まり、加速度や各速度が表示されます。 初期設定で最大加速度が±2g、最大角速度が±2000deg/sのモードに設定されています。
左から順に、重力加速度(単位はG)、角速度(16.4で割るとdeg/sになる)、角度(ヨー、ピッチ、ロール)、加速度(8192で割るとGになる)、重力加速度を除いた加速度(8192で割るとGになる、センサを基準にした座標系)、重力加速度を除いた加速度(8192で割るとGになる、初期姿勢と重力加速度を基準にした座標系)です。 重力加速度はセンサを移動(加減速)しても変わりません。加速度の方は変化します。図ではセンサは静止していますが、加速度の値が出ています。これはセンサのオフセットのようです。各値が落ち着くまでにはしばらく時間がかかるようです。
上記の改変済みライブラリです。