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

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

sponsored link

CoreMotion

 
3軸の加速度センサー

Event handling for iOS によると 上の図のように
3軸の加速度センサーが搭載されており、
CMAccelerometerData のオブジェクトとしてキャプチャーされています。
 
ここで気をつけないといけないのは加速度センサーなので
加速度を加えたときだけ検知するのではなく
それに重力加速度も加わっているということです。
 
右に傾けたときは、当然加速度が出ますが、傾いたままでも
重力加速度が残っているという事です。
細かく言うと地球の時点による遠心力が逆に働いていて
その差が重力な訳ですが。昔習ったお話ですねー
 

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

 
加速度センサーの値を読み出すコードを実装してみましょう。
 
まず CoreMotion.framework を追加
 
coremotion_1
 
必然的に CoreMotion のインポート
3軸の値を示すラベルを配置
#import
ViewController.h

 
センサー値の取り出し方には2通りあります
 
プル型
定期的に値を読みにいく方式

[motionManager startAccelerometerUpdates];

 
プッシュ型
ハンドラを設定して、更新情報があると実行される

[motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue]
withHandler:^(CMAccelerometerData *accelerometerData, NSError *error)

今回はこちらを使います
 
ViewController.m

 
IBのラベルとコードをつなげて
ビルド実行すると
3軸のセンサーデータが読み取れます
 
coremotion_2
 
実際の生のデータはローパスフィルタなどを使わないと
扱いにくいとは思います。
 

ページのトップへ戻る
 
sponsored link

シェアする

  • このエントリーをはてなブックマークに追加

フォローする