2018年7月
6軸センサー(3軸ジャイロ+3軸加速度)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 → 設計支援 → リファレンス設計:アプリケーション・ノート → 「加速度センサー」で検索)
加速度センサーの出力値から角度を求めるには上式を利用します。ここで角度の符号に注意が必要です。
(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への書き込みもできます。
プログラム
『昼夜逆転』購買部にて本機器のキットを出品しています。「ジャイロ・加速度センサーデモキット」
組み立ての注意点を下記に説明します。
センサーモジュールのピンヘッダーの向き
[図・左]はGY-521基板(青)、ピンヘッダー、コントロール基板(濃緑)を横から見た図です。
まず、ピンヘッダーの長い方を上にしてGY-521基板をハンダ付けします。次に、それをコントロール基板にハンダ付けします。
このとき、GY-521基板とコントロール基板が平行になるようにします。 【参考】 [図・右]の写真。
LEDの向き
[図・中]は2個のバーLEDと8個の砲弾形LEDの向きを示しています。
バーLEDの4隅の1つは斜めに成形されています(図の赤部分、1番ピン)。その部分が図の位置になるよう取り付けます。
砲弾形LEDには切り欠きがあります(図の赤部分、足が短い方、カソード)。そちらが基板中心を向くよう取り付けます。
スイッチの取り付け方
[図・右]はタクトスイッチの様子です。
タクトスイッチをそのまま取り付けると基板から1~2mm浮いてしまいます。
なるべく低く取り付けるため(その方がスイッチを押しやすい)、一旦足を広げ、穴位置に合わせて足を曲げ直します。
そのようにして基板との隙間をなくします。
電池ホルダー取り付けの工夫
電池ホルダーの端子をハンダ付けする前に、ホルダー中心部を瞬間接着剤で基板に固定しておくと強度が増します。
部品名 | 部品番号 | 値 | 個数 | 参考価格/備考 |
---|---|---|---|---|
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モジュールを手のひらサイズの頭部模型に組み込んで、自由に動く首関節で土台に固定すれば、「直感的なカメラ操作デバイス」が作れます。
首を前後に動かす(頷く動作)、左右に傾ける(傾げる動作)、左右に捻る(イヤイヤの動作)。レバーで操作するより視線・画角が調整しやすそうです。