第二次世界大戦の飛行機やその時代を舞台にした他の機械のファンであれば、いずれジャイロスコープというテーマに出会うことになるでしょう。M-7ジャイロスコープは当時の最新技術の驚異でしたが、かなりのスペースを占有しました。これらのジャイロスコープは、小型の内燃機関ほどの大きさでした。
70年以上経った今、これらのデバイスは驚くほど小型化されました。ジャイロスコープ、加速度計、さらには 温度センサー 慣性計測ユニット(IMU)と呼ばれる、指の爪よりもさらに小さい単一のチップに組み込まれています。非常に人気のある加速度計の1つはInvenSenseのMPU-6050です。これは、ブレイクアウト ボードと使用に必要なすべてのコンポーネントとともに、約1ドルで購入できます。
このチップは、マイクロエレクトロメカニカルシステム (MEMS) 技術を使用して、外部の力に基づいて内部の静電容量値を変化させます。内部の仕組みは興味深いものですが、チップはすべての感知の詳細を取り込みました。生み出された価値をあなたの Arduinoボード または選択した他のコンピューティング システム。便利なことに、チップはこのデータをI²C形式で出力し、2本のワイヤと割り込みピンを使用して次のことを感知できます。
- 加速度データ
- ジャイロデータ
- 温度データ
Arduinoで加速度計を使用する方法

画像提供:ジェレミー・S・クック
この演習では、MPU-6050チップを含むGY-521モジュールを使用して、データをArduino Unoにパイプします。さまざまな開発ボードやコンピューティング システムがI²C標準と互換性があるため、使用する特定のピンやライブラリが異なっていても、多くの状況でこれらの概念を適用できるはずです。
この実験では、まず次の接続に基づいてGY-521ボードを接続します。
- 電圧: +5V
- グランド: グランド
- SCL: A5
- SDA: A4
- XDA: 接続されていません
- XCL: 接続されていません
- AD0: GND
- INT: DIO 2
また、1つ接続しました 4.7kΩ抵抗器 SCLとグランドの間、およびSDAとグランドの間にもう1つあります。外部抵抗器を使用しない例もあるため、すべてのアプリケーションでこれが必要なわけではない場合があります。
MPU-6050 Arduino生データ
生データを取得するための基本的な手順は次のとおりです。
- すべてを接続したら、 ここにある「短いサンプルスケッチ」をロードします Arduinoボード上で。
- シリアルモニターを開き、9600ボーに設定します。
次の値が表示されます。
- AcX: X方向の加速度計の読み取り
- AcY: Y方向の加速度計の読み取り値
- AcZ: Z方向の加速度計の読み取り値
- Tmp: 温度の読み取り
- GyX: X軸に関するジャイロスコープの読み取り
- GyY: Y軸に関するジャイロスコープの読み取り
- GyZ: Z軸に関するジャイロスコープの読み取り
以下のスケッチにこれらの軸とその方向を示しました。デバイスが動くと、それぞれの値が反応するはずです。チップの文字を上に向けて置くと、Z軸は正となり、重力の方向を示します。X軸またはY軸が上を向いている場合は、同様の読み取り値が生成されます。各軸の周りの曲線はロール値を示します。
ロール方向についての注意: これは物理学で遭遇する「右手の法則」に従います。右手の親指が軸と同じ方向を向いている場合、指は正の回転方向に曲がります。

画像提供:ジェレミー・S・クック
Arduino MPU-6050接続: センサーフュージョン
多くのアプリケーションではこれらの生の値を処理できるかもしれませんが、MPU-6050にはデジタル モーション プロセッサ (DMP) という別の機能があります。このプロセッサは、加速度計とジャイロスコープ値を融合して精度を向上させることができます。
InvenSenseはこのデータをどのように使用するかについてはほとんど語っていませんが、Jeff Rowbergの広範なI2Cデバイス ライブラリ (i2cdevlib) は、巧妙なリバース エンジニアリング作業を使用してDMPの機能を活用できます。ロウバーグ氏によると、この時点ではコードにいくつかの更新が必要だが、彼は MPU6050ライブラリ 付属のMPU6050_DMP6サンプル コードを使用して、ヨー、ピッチ、ロールのクリーンな値を生成します。必要に応じて、コード内のいくつかのオプションのコメントを解除して、異なる出力を生成することもできます。
コードをロードしたら、次の手順に従います。
- シリアル モニターを開き、115200ボーに設定されていることを確認します。
- 1文字を入力してください。
ヨー、ピッチ、ロールの出力は「ypr」としてリストされ、チップ上のX方向は航空機の前面に対応します。ロールとヨーは、先ほど説明した生の値から予想されるのと同じ方向を向きます。ただし、ピッチは逆です。理論上の航空機が機首を下に向けるとピッチは減少しますが、機首を上に向けるとピッチ値は増加します。飛行環境では、このように表現するのは理にかなっています。離陸するために「ピッチを下げてください」とインストラクターに指示されると、間違いなく混乱が生じます。あるいは、さらに悪い結果になるかもしれません。
模型飛行機を組み立てる場合でも、新しいゲーム コントローラーを考案する場合でも、あるいは単に携帯電話が適切に自動回転できることを確認したい場合でも、小さなIMUチップによってこれらすべてが可能になります。低コストで事前に作成されたArduinoライブラリを使用すると、数本のワイヤを接続してコーディングするだけでカスタム アプリケーションを作成できます。