『昼夜逆転』工作室
[トップページへ戻る]

6軸センサーMPU-6050動作テスト

2018年7月
6軸センサー(3軸ジャイロ+3軸加速度)MPU-6050を試用しました。 ライブラリを自作することで、このセンサーの特徴や使い方について理解を深めました。 ここでは動作テストの様子を紹介します。回路図とプログラムを公開しています。

MPU-6050について

MPU-6050は傾きや動きを測定するセンサーです。物体の姿勢を計算したり、落下や衝撃を検出することができます。 このようなセンサーを使いこなすにはX,Y,Z軸の回転と加速度の関係について知る必要があります。
※ここでは「X,Y,Z軸中心の回転」と記述するが、「ロール、ピッチ、ヨー」という航空・船舶でお馴染みの用語を使った解説も多い。

【メーカーサイト/データシート】  MPU-6050 Six-Axis (Gyro + Accelerometer) MEMS MotionTracking Devices
データシートより抜粋 モジュール

3軸ジャイロセンサー
MPU-6050にはジャイロセンサーが内蔵されています。軸を中心とした角速度が測定できます。
例えばX軸に注目し、ある瞬間から0.2秒後に角速度が秒速35度と測定された場合、
 35[deg/s] * 0.2[s] = 7[deg] → X軸を中心に7度回転したことになります。
ところで0.2秒の間に角速度が一定だったとは限りません。回転角をより正確に求めたい場合、より短い時間間隔で測定する必要があります。 このためMPU-6050は利用場面に応じて角速度の解像度を指定することができます。

3軸加速度センサー
MPU-6050には加速度センサーが内蔵されています。軸方向に重力加速度の何倍の加速度がかかっているか測定できます。
例えばMPU-6050を水平に置き、静止状態の場合、測定値は次のようになります。
 X軸・Y軸に対しては「0」 → X軸およびY軸と重力のなす角は直角なので、重力加速度の軸方向の成分は0。
 Z軸に対しては「-1」 → Z軸と重力方向は一致しており、-Z方向に重力加速度の1倍の加速度がかかっている。
物体を急激に移動させたり強い衝撃を加えたりする場合、重力加速度の何倍もの加速度が測定できる必要があります。 このためMPU-6050は利用場面に応じて加速度の解像度を指定することができます。

両センサーを利用する
ジャイロセンサーの場合、回転角の変化量を積分することで物体の姿勢(初期姿勢を基準とした現在の姿勢)を知ることができます。 性質上、累積誤差が生じます。またドリフトにより、静止状態であっても測定値が徐々に変化します。
※温度ドリフト。補正に利用できるようにか、MPU-6050は温度も測定できる。
加速度センサーの場合、累積誤差やドリフトはありませんが、Z軸が鉛直方向のとき、Z軸中心の回転を検出することができません。
これらのことから、物体の姿勢を知るためには両センサーを利用し、さらにフィルターを適用して正確度を高める方法がとられます。  【参考】 カルマンフィルター相補フィルター

角度の算出における注意点
Analog Devices アプリケーション・ノート AN-1057 「加速度センサーによる傾きの検出」(pdf)
http://www.analog.com → 設計支援 → リファレンス設計:アプリケーション・ノート → 「加速度センサー」で検索)
AN-1057より抜粋
加速度センサーの出力値から角度を求めるには上式を利用します。ここで角度の符号に注意が必要です。
(1)
前出MPU-6050の図で、センサーを白矢印の+X方向へ回転させた場合、Y軸の+Y方向は水平面より上を向きます。
Y軸と水平面とのなす角は上図の式12で求まります。このときψは正の角度になります。
つまりセンサーの回転方向と角度の符号が一致するので、プログラム上で計算値をそのまま使用できます。
(2)
MPU-6050の図で、センサーを白矢印の+Y方向へ回転させた場合、X軸の+X方向は水平面より下を向きます。
X軸と水平面とのなす角は式11で求まります。このときθは負の角度になります。
つまりセンサーの回転方向と角度の符号が逆になるので、プログラム上は計算値の符号を反転して使用します。

動作の様子

MPU6050、動作の様子をLEDで。最初にX軸・Y軸回転の補正。ボタン押してスタート。 +-90度で緑LEDが両端まで動く。ボタン押してリセット。Z軸回転で赤LED(8個)が動く。 8個を円配置にすると特定の方角を指し続ける動きになる。45*n+22.5度くらいのときは隣合う2個が点灯する。 pic.twitter.com/MAE8vVarae

— 『昼夜逆転』工作室 (@jsdiy) 2018年7月4日

MPU-6050デモ。電池をセット、基板を前後左右に立てて傾き検出補正。 スイッチオンで傾き検出デモ開始。傾きに応じてバーLEDの点灯が前後左右に動く。 続いて回転検出デモ。基板を回転させても一定の方角(ここでは画面上方)のLEDが点灯し続ける。 pic.twitter.com/i9TcrCCakQ

— 『昼夜逆転』工作室 (@jsdiy) 2018年7月27日

回路図とプログラム

回路図(pdf)
マイコンにI2Cでセンサーを接続しています。プルアップ抵抗はセンサーモジュールに内蔵されています。
LEDはX,Y,Zの3グループをダイナミックドライブしています。電流制限抵抗は各コモンに入れてあるだけです。
回路図 回路図

基板
I2Cをコネクタに出してあり、キャラクターLCDを接続して開発用にも使えます。AVRへの書き込みもできます。
回路図 回路図 基板
基板 基板 基板

プログラム

ダウンロード MPU6050test.zip(プロジェクト一式)
開発環境: Windows10/64bit, AtmelStudio7
操作手順
  1. 制御ボードに電池をセットし、LEDボードをセットし、水平に置く。
  2. X軸・Y軸回転の補正モード。バーLEDの両端が点灯した状態。
    X軸周り・Y軸周りにそれぞれ+-90度回転させる(基板を縦・横に立てる)。
  3. 水平に戻してスイッチオン。
  4. X,Y,Z軸回転の検出モード(デモ動作の本番)。
    基板を縦横に傾けると傾斜角に応じてバーLEDの点灯箇所が動く。砲弾形LEDの点灯は無視。
  5. 水平に戻してスイッチオン。Z軸回転の基準位置がリセットされる。
    Z軸を中心に時計回り・反時計回りに回転させると、一定方向を指すように砲弾形LEDが点灯する。
  6. 検出モード中は常にX軸・Y軸回転に応じてバーLEDの点灯箇所が動く。
    スイッチオンでいつでもZ軸回転の基準位置をリセットできる。
  7. 検出モード中、スイッチ長押しでシステムのリセット。手順2へ戻る。

組み立て説明

『昼夜逆転』購買部にて本機器のキットを出品しています。「ジャイロ・加速度センサーデモキット
組み立ての注意点を下記に説明します。
組み立て図 組み立て図 組み立て図

センサーモジュールのピンヘッダーの向き
[図・左]はGY-521基板(青)、ピンヘッダー、コントロール基板(濃緑)を横から見た図です。
まず、ピンヘッダーの長い方を上にしてGY-521基板をハンダ付けします。次に、それをコントロール基板にハンダ付けします。 このとき、GY-521基板とコントロール基板が平行になるようにします。 【参考】 [図・右]の写真。

LEDの向き
[図・中]は2個のバーLEDと8個の砲弾形LEDの向きを示しています。
バーLEDの4隅の1つは斜めに成形されています(図の赤部分、1番ピン)。その部分が図の位置になるよう取り付けます。
砲弾形LEDには切り欠きがあります(図の赤部分、足が短い方、カソード)。そちらが基板中心を向くよう取り付けます。

スイッチの取り付け方
[図・右]はタクトスイッチの様子です。
タクトスイッチをそのまま取り付けると基板から1~2mm浮いてしまいます。 なるべく低く取り付けるため(その方がスイッチを押しやすい)、一旦足を広げ、穴位置に合わせて足を曲げ直します。 そのようにして基板との隙間をなくします。

電池ホルダー取り付けの工夫
電池ホルダーの端子をハンダ付けする前に、ホルダー中心部を瞬間接着剤で基板に固定しておくと強度が増します。

部品について

部品
部品
6軸センサー
GY-521というモジュールを使用(写真・上)。中央のICがMPU-6050です。
X軸・Y軸と回転の正の向きは基板上の図の通りです。
Z軸は画面手前が+Z方向、反時計回りが正の向きです。

AVR(マイコン)
ATmega328Pを使用。内蔵8MHzで動作しています。
プログラムは8KBで収まるので、例えばピン互換であるATmega8でも代用できます。
※秋月で328Pより安く買えるだけのこと。

キャラクターLCD
拙作・I2C-キャラクターLCDモジュールを使用して開発中の様子(写真・下)。
X,Y,Z軸周りの現在の角度とジャイロセンサーから取得した値を表示しています。
今回作成した基板のI2Cコネクタに接続してもそのまま表示されます。

MPU-6050デモ基板 部品一覧
部品名部品番号個数参考価格/備考
AVR(マイコン) U1 ATmega328P 1 230円(秋月電子通商
6軸センサーモジュール U2 GY-521(MPU-6050) 1 数百円
タクトスイッチ SW1 -- 1 1個10円程度
コイン電池 BT1 CR1220 1 2個100円
バーLED BAR1,BAR2 10灯/色はお好みで 2 1個150円程度
砲弾形LED D1~D8 径3mm/色はお好みで 8 10個200円程度
カーボン抵抗 R1~R3 100Ω~1kΩで適当に 3 100個100円
ピンヘッダ J1~J3 -- -- --
ピンソケット J1~J3 -- -- --

◆ ◆ ◆

6軸センサーMPU-6050の動作テストを行いました。 自作ライブラリを通してこのセンサーの特徴や使い方を理解しました。 動作の様子をLED表示する基板を作成しました。
こんな応用はどうでしょう。
MPU-6050モジュールを手のひらサイズの頭部模型に組み込んで、自由に動く首関節で土台に固定すれば、「直感的なカメラ操作デバイス」が作れます。 首を前後に動かす(頷く動作)、左右に傾ける(傾げる動作)、左右に捻る(イヤイヤの動作)。レバーで操作するより視線・画角が調整しやすそうです。


 
(C) 『昼夜逆転』工作室
[トップページへ戻る]