[iPhone] CoreMotion スマホの傾きを検出する (Objective-C)

スマホには加速度センサーがあり、傾きを検知できます。

coremotion_0

CoreMotion

3軸の加速度センサーEvent handling for iOS

によると 上の図のように3軸の加速度センサーが搭載されており、CMAccelerometerData のオブジェクトとしてキャプチャーされています。

ここで気をつけないといけないのは加速度センサーなので加速度を加えたときだけ検知するのではなくそれに重力加速度も加わっているということです。

右に傾けたときは、当然加速度が出ますが、傾いたままでも重力加速度が残っているという事です。細かく言うと地球の自転による遠心力が逆に働いていてその差が重力な訳ですが。昔習ったお話ですねー

加速度センサーの値を取り出す

加速度センサーの値を読み出すコードを実装してみましょう。

CoreMotion の3軸の値を表示するためのラベルを配置します。

ViewController.h


センサー値の取り出し方には2通りあります


今回はこちらを使います

ViewController.m


IBのラベルとコードをつなげて
ビルド実行すると
3軸のセンサーデータが読み取れます

実際の生のデータはローパスフィルタなどを使わないと
扱いにくいとは思います。

Swiftのケースはこちらです。