前回タップ検出をおこなったので、続いて縦横の向き検出です。近頃のタブレットをはじめとする電子機器では、縦横の向きを変えると それに応じて画面表示を回転してくれますが、これを実現しているのが加速度センタを用いた向きの検出機能です。この機能についてもアプリケーション・ノートAN4068が用意されており、向き検出の原理とMMA845xQでの具体的な設定について説明されています。
基本的には上図に示すようにX軸、Y軸に加わる重力加速度の変化を調べることで、向きが変わったことを検出します。しかし机のような水平面上にタブレットやスマホを置いて向きを回転させても、画面表示を回転させてくれることはありません。水平面上で向きを変えても、X軸、Y軸に加わる重力加速度には変化が生じないため、検出できないからです。わずかな傾きしかない場合にも、変化が微小であるために向き変化の検出は困難となりますので、ある程度Z方向に傾けた状態で向きを変えてやる必要が生じます。MMA8451Qでは、検出のために必要なZ軸方向の傾きを14度~42度の範囲で選択することができますが、MMA8452Qでは29度で固定となっています。同様に、MMA8451Qでは向き変化の判定に必要な回転角度やヒステリシスの大きさを指定することができますが、MMA8452Qではそれらの値も固定値となっています。結果として、APノートにはいくつものレジスタを設定する手順が示されていますが、MMA8452Qではその多くは設定の必要がありません。
MMA8452QをMiniSAMボード上に実装した状態では、方向の定義は次のようにUSBコネクタがついている向きで示すことができます。
上図のようにボードを回転させていくと、向きが変わったことを検出して割り込みがかかります。その時点でPL_STATUSレジスタの内容を調べれば向きを知ることができます。実際に実行した場合のログは次のようになりました。
設定後、センサーをアクティブにした時点でダミーの状態変化割り込みを発生してくれるので、現在の状態を知ることができるというのもナイスな仕様です。また、Z軸の値でボードが表向きか裏向きかも判別できるので、その状態変化も検出できます。このように向きや裏表の状態でデバイスの動きを制御するのに利用できそうです。タップ検出もそうでしたが、向き検出ロジックは全てMMA825Qが内部で処理してくれるので、マイコン側では各軸の加速度データは全く読み出さずに、これらの検出処理ができてしまします。
説明文よりも動画の方がわかり易いでしょうから、そのうちに何かしらデモ考えてみます。
基本的には上図に示すようにX軸、Y軸に加わる重力加速度の変化を調べることで、向きが変わったことを検出します。しかし机のような水平面上にタブレットやスマホを置いて向きを回転させても、画面表示を回転させてくれることはありません。水平面上で向きを変えても、X軸、Y軸に加わる重力加速度には変化が生じないため、検出できないからです。わずかな傾きしかない場合にも、変化が微小であるために向き変化の検出は困難となりますので、ある程度Z方向に傾けた状態で向きを変えてやる必要が生じます。MMA8451Qでは、検出のために必要なZ軸方向の傾きを14度~42度の範囲で選択することができますが、MMA8452Qでは29度で固定となっています。同様に、MMA8451Qでは向き変化の判定に必要な回転角度やヒステリシスの大きさを指定することができますが、MMA8452Qではそれらの値も固定値となっています。結果として、APノートにはいくつものレジスタを設定する手順が示されていますが、MMA8452Qではその多くは設定の必要がありません。
MMA8452QをMiniSAMボード上に実装した状態では、方向の定義は次のようにUSBコネクタがついている向きで示すことができます。
上図のようにボードを回転させていくと、向きが変わったことを検出して割り込みがかかります。その時点でPL_STATUSレジスタの内容を調べれば向きを知ることができます。実際に実行した場合のログは次のようになりました。
設定後、センサーをアクティブにした時点でダミーの状態変化割り込みを発生してくれるので、現在の状態を知ることができるというのもナイスな仕様です。また、Z軸の値でボードが表向きか裏向きかも判別できるので、その状態変化も検出できます。このように向きや裏表の状態でデバイスの動きを制御するのに利用できそうです。タップ検出もそうでしたが、向き検出ロジックは全てMMA825Qが内部で処理してくれるので、マイコン側では各軸の加速度データは全く読み出さずに、これらの検出処理ができてしまします。
説明文よりも動画の方がわかり易いでしょうから、そのうちに何かしらデモ考えてみます。