この記事の結論
- MPU6050は「加速度センサー(3軸)」と「ジャイロセンサー(3軸)」を1つにまとめた6軸センサーで、傾きと回転の動きの両方を検知できる
- 配線はI2C通信でVCC・GND・SCL・SDAの4本だけ、Arduino Unoの場合はSDA=A4・SCL=A5につなぐ
- I2Cアドレスは初期設定で0x68、他のI2Cデバイスと同時に使うときはアドレス競合に注意する
- ジャイロの値は時間とともに誤差が蓄積する(ドリフト)ため、長時間の正確な角度計測には加速度センサーとの組み合わせが必要
自作のロボットやコントローラーを作っていると、「今どれくらい傾いているか」「どちらに回転しているか」を知りたくなる場面が出てきます。
そこで登場するのが、加速度とジャイロ(角速度)の両方を1つのモジュールで扱える「MPU6050」という定番センサーです。
この記事では、MPU6050で何ができるのかという基本から、配線・ライブラリの導入、値の読み方、よくあるつまずきポイントまでを順番に整理します。
MPU6050とは何ができるセンサーか
加速度センサーとジャイロセンサーの違い
加速度センサーは、物体にかかる「加速度」を検知する部品で、静止しているときは重力の向きが分かるため、傾きの検知に使えます。
たとえばセンサーが水平に置かれていれば、重力の値はまっすぐ下方向(Z軸)にだけかかり、傾けるとX軸・Y軸にも値が分散して現れます。
一方、ジャイロセンサーは「角速度」、つまり回転する速さを検知する部品です。
静止した状態の傾きは分かりませんが、動いている最中の「今どれくらいの速さで回転しているか」を細かく捉えられるのが特徴です。
6軸(3軸+3軸)という意味
MPU6050の「6軸」とは、加速度センサーのX・Y・Zの3方向と、ジャイロセンサーのX・Y・Zの3方向、合わせて6つの値を同時に取得できるという意味です。
モジュール自体は1円玉と同じくらいの大きさで、価格はおおむね300〜600円程度で購入できるものが多く、Arduino工作の入門用センサーとしては手頃な部類です。
紹介した商品:MPU6050 モジュール
REES52 MPU-6050 3軸ジャイロ+3軸加速度センサー モジュール
本文で解説したI2C接続の6軸センサーモジュール。まず1個試したい入門用です。
Amazon ¥498
※価格は記事執筆時点のものです。購入前に最新価格をご確認ください。

Arduinoで扱うセンサー・モーター全般の基本(アナログ入力・デジタル入力の違いなど)は、センサー・モーターの基礎知識の記事で解説しています。
配線の基本、I2C通信でつなぐ
VCC・GND・SCL・SDAの4本
MPU6050モジュールには、VCC(電源)・GND・SCL(クロック)・SDA(データ)の4本のピンがあります。
この4本だけで配線が完結する「I2C(アイ・スクエア・シー)」という通信方式を使っているのが、MPU6050の扱いやすさの理由です。
Arduino Unoの場合、SDAはA4ピン、SCLはA5ピンに接続します(Uno R3・Uno R4ともに共通)。
VCCはモジュールによって5V対応・3.3V対応が分かれるため、購入時の説明を確認したうえで、対応電圧に合わせてつないでください。

I2Cアドレス0x68について
I2C通信では、1本の配線に複数のデバイスをつなぐことができ、それぞれを区別するために「アドレス」という番号が割り振られています。
MPU6050の初期設定のアドレスは0x68です。
モジュールによっては、基板上の「AD0」というピンをHIGHにすることでアドレスを0x69に切り替えられるものもあり、同じ種類のセンサーを2つ同時に使いたい場合に活用できます。
ライブラリのインストールとサンプルコード
Wireライブラリ+MPU6050用ライブラリ
I2C通信そのものを扱う「Wire」というライブラリはArduino IDEに標準搭載されているため、追加インストールは不要です。
MPU6050とのやり取りを簡単にしてくれる専用ライブラリは、ライブラリマネージャで「MPU6050」と検索すると複数の候補が見つかります。
初心者には、関数名がシンプルで扱いやすい「MPU6050_light」というライブラリがおすすめです。
ライブラリマネージャの基本的な使い方や、似た名前のライブラリで迷ったときの選び方は、別の記事で詳しく整理しています。
生の値を読み取る最小サンプル
MPU6050_lightライブラリを使った、角度(傾き)を読み取る最小のスケッチは次のようになります。
#include <Wire.h>
#include <MPU6050_light.h>
MPU6050 mpu(Wire);
void setup() {
Serial.begin(9600);
Wire.begin();
mpu.begin();
mpu.calcOffsets(); // 起動時に静止させてキャリブレーション
}
void loop() {
mpu.update();
Serial.print("angleX: ");
Serial.print(mpu.getAngleX());
Serial.print(" angleY: ");
Serial.println(mpu.getAngleY());
delay(100);
}
mpu.begin()の直後に呼び出しているcalcOffsets()は、センサー特有の個体差(ゼロ点のずれ)を補正するための処理で、このタイミングではセンサーを水平な場所に置き、動かさないようにしてください。
シリアルモニタを開くと、X軸・Y軸それぞれの傾き角度(度)が一定間隔で表示され続けます。
値の読み方と傾き検知への応用
加速度の値から傾きを判定する考え方
センサーが完全に水平な状態では、Z軸方向にだけ重力(約1g相当)の値が現れ、X軸・Y軸はほぼ0に近い値になります。
センサーを傾けると、その傾きの角度に応じてX軸・Y軸の値が増え、Z軸の値が減っていく、という関係になります。
この関係を利用して、「X軸の値がしきい値を超えたら左に傾いたと判定する」といったif文の条件分岐を組めば、傾き検知の工作が作れます。
if文の基本的な書き方(比較演算子の意味など)については、別の記事で詳しく整理しています。
書き込みやコンパイルでエラーが出て先に進めない場合は、よくあるエラーと原因別の対処法をまとめた記事もあわせて参考にしてください。
ジャイロの値からの回転検知(ドリフトの注意)
ジャイロセンサーは動いている最中の回転の速さを検知できますが、その値を時間で足し合わせて角度を計算する方式のため、わずかな誤差が積み重なり、時間が経つほど実際の角度とズレていく「ドリフト」という現象が起こります。
ジャイロの値だけに頼って長時間の角度を計算し続けると、数十秒〜数分で角度の値が実際とは大きくズレてしまいます。
MPU6050_lightライブラリのgetAngleX()等は、内部で加速度センサーの値と組み合わせて補正する処理が入っているため、この問題をある程度軽減してくれます。
より本格的な補正が必要な用途(ドローンの姿勢制御など)では、加速度とジャイロを数学的に組み合わせる「相補フィルタ」「カルマンフィルタ」といった手法が使われますが、Arduino入門の工作であればライブラリ任せで十分です。
よくあるつまずきポイント
配線が合っているのに反応しない
SDA・SCLの配線を左右逆(SDAをA5、SCLをA4)に挿してしまっている、という単純な配線ミスが最もよくある原因です。
もう1つ多いのが、複数のI2Cデバイスを同時に使っている場合のアドレス競合で、他のI2Cモジュールが同じ0x68を使っていないか確認してください。
I2C接続機器のアドレスを一覧で調べる「I2Cスキャナ」というサンプルコードも公開されているので、反応しない場合はそちらで実際に認識されているか確認すると原因を切り分けやすくなります。
値が飛ぶ・安定しない
起動直後、calcOffsets()によるキャリブレーション中にセンサーが動いてしまうと、その後の値全体がずれた状態のまま計算されてしまいます。
電源を入れた直後の数秒間は、センサーを机の上など平らな場所に置いて動かさないようにするだけで、この症状はかなり改善します。
ブレッドボードの配線が緩んでいる場合も値が瞬間的に飛ぶことがあるため、ジャンパー線の挿し込みが甘くないかも合わせて確認してください。
紹介した商品:ジャンパーワイヤー詰め合わせセット
ELEGOO 120pcs多色デュポンワイヤー ブレッドボードジャンパーワイヤー
オスオス・オスメス・メスメスが各40本、本文で紹介した詰め合わせ構成そのままのセットです。
Amazon ¥870
※価格は記事執筆時点のものです。購入前に最新価格をご確認ください。

まとめ:MPU6050を使った活用アイデア早見表
最後に、MPU6050の値をどう使うと何が作れるか、活用アイデアを表にまとめます。
| 使う値 | 活用アイデア | 難易度の目安 |
|---|---|---|
| 加速度(傾き) | コントローラーを傾けてロボットを操作する | 入門向け |
| 加速度(振動) | 転倒検知、置いた向きの判定 | 入門向け |
| ジャイロ(回転速度) | 回転を検知するゲームコントローラー | 中級 |
| 加速度+ジャイロの組み合わせ | セルフバランス(倒立振子)ロボットの姿勢制御 | やや上級 |
取り組む前に、以下の点がなんとなくつかめているか確認してみてください。
- 加速度センサーは傾きに強く、ジャイロセンサーは回転の速さを捉える部品だという見当がついている
- I2C配線(SDA=A4・SCL=A5、アドレス0x68)のだいたいのイメージが分かっている
- 起動直後は静止させておく必要があることを意識できている
MPU6050の値を使った具体的な車輪ロボットの操作については、車輪ロボット入門の記事もあわせて参考にしてみてください。


コメント