STEMMAで広がるArduinoの世界㉑Step1 6軸加速度センサMPU6050
加速度センサ単体では、衝撃などを受けたときに加速度を検知できますが、進行(x軸)方向がどちらを向いていたか、回転しているかどうかなど知ることができません。
MPU6050はInvenSense(2016年12月にTDKが買収)の製品で、加速度センサにジャイロ・センサが組み合わされています。3軸+3軸で6軸です。
空手の正拳突きで例えます。腕を体の前にシュシュと出していると、等速運動に近い動作です。ここで、腰の回転と後足のけりを使って超加速をします。速度の微分が加速度です。速度が一定ではなく放物線のように急に速くなるのを検知するのが加速度の値です。
超加速をしている最後でこぶしをねじり破壊力を増大します。このこぶしの回転=角速度を知るのがジャイロスコープです。
IC自体が3.3V電源で使うデバイスのため、5V->3.3VのレギュレータとI2Cの信号レベル変換回路が入っています。Arduino UNOのような5Vで動作するボードでも正しく動作します。SDA/SCL信号のプルアップ抵抗は10kΩが入っています。
●Adafruitのブレークアウト・ボード
STEMMA QT(JST SH 4ピン)コネクタは2か所に装着されていて、どちらにつないでもかまいません。このコネクタを使ってI2Cで制御する場合、特に、ジャンパ線をつなぐなどは不要です。割り込み出力のピンが用意されています。
MPU6050 6-DoF Accelerometer and Gyro
●3軸加速度センサMPU6050のおもなスペック
- 動作電圧 3.3/5V
- 加速度測定範囲 ±2、±4、±8、±16g
- ジャイロ測定範囲 フルスケール・レンジ±250、 ±500、±1000、±2000dps
- インターフェース I2C(最大1MHz)
- I2Cアドレス デフォルト0x68、裏面のジャンパで0x69に変更可
●環境
- Arduino UNO R3
- Arduino IDE 1.8.13
- Windows10 20H2
●接続
電源は5Vを使いました。Arduino UNO R3のI2Cは、専用のSCLとSDA端子がありますが、SCLはA5に、SDAはA4につながっています。どちら側につないでもかまいません。白色のリード線は見えないので、黄色で配線図を描きました。
●スケッチ
利用手順は、MPU6050 6-DoF Accelerometer and Gyro Overviewに書かれています。
ライブラリを導入します。メニューのツールから、「ライブラリを管理」を選び、検索欄にMPU6050を入力します。見つけてきたAdafruit MPU6050のインストールをクリックします。
同時にサンプル・スケッチも導入されます。
メニューのファイルからサンプルの入っているスケッチ例を選択します。Adafruit MPU6050から、basic_readingsを選択します。
- Acceleration 加速度
- gyro 角速度
- Temperature 温度
実行中の様子です。
plotterを読み込んで実行します。X軸を回転させました。
mpu6060_unifiedsensorsの実行結果です。
●9軸対応スケッチ実験
SparkFunの製品には、回転行列、クォータニオン、オイラー角などが表示できるライブラリのリンクがあります。
http://www.i2cdevlib.com/devices/mpu6050
GitHub https://github.com/jrowberg/i2cdevlib zipファイルをダウンロードします。
解凍し、ArduinoフォルダにあるMPU6050フォルダとI2Cdevフォルダを、
C:\Users\ユーザ名\Documents\Arduino\libraries
へコピーします。
Arduino IDEを立ち上げます。スケッチ例からMPU6050->IMU_Zeroを読み込んで動かします。シリアルモニタを開きます。9600bpsです。
MPU6050_rawを読み込んで実行します。シリアルモニタは38400bpsです。
MPU6050_DMP6を読み込んで実行します。115200bpsです。
シリアルモニタの上部に送信欄に適当な文字を入れて、送信ボタンを押します。有効になっているのは、
#define OUTPUT_READABLE_YAWPITCHROLL
です。ヨー、ピッチ、ロールの値が表示されています。
//#define OUTPUT_READABLE_QUATERNION
の//を削除して有効にし、
#define OUTPUT_READABLE_YAWPITCHROLL
の文頭に//を挿入してコメントアウトします。コンパイルして実行します。クォータニオン(四元数)の値を表示しています。
シリアルモニタをxで閉じ、シリアルプロッタを立ち上げます。送信欄に適当な文字を入れて送信ボタンを押します。
同様に、EULER(オイラー角)などを出力できます。