強火で進め

このブログではプログラム関連の記事を中心に書いてます。

加速度センサーを使う

加速度センサーの解説がされている公式ページは以下となります。

iPhone Application Programming Guide: Accessing Accelerometer Events
http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/AdvancedFeatures/chapter_10_section_2.html

delegateで自分のクラスへ加速度情報が返ってくる様にします。

    theAccelerometer.delegate = self;

この記述により以下のメソッドに指定した間隔(※)で加速度データが返されます。

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration

※ここの事

    theAccelerometer.updateInterval = 1 / kAccelerometerFrequency;

アプリによってはlow-passフィルタ、high-passフィルタを通した値を使うと良いみたいです。
※公式サイトに記述してある accelX、accelY、accelZ はメンバ変数に定義しておく必要があるのに気を付けて下さい。

low-passフィルタの特徴

  • 前回の値と今回の値を合成して使う
  • 前回の値の割合→少ない
  • 今回の値の割合→大きい
  • 定期的な加速→大きく反映される
  • 瞬間的な加速→小さく反映される
  • 定期的な加速を取得したいときに使用

high-passフィルタの特徴

  • 現在の値からlow-passフィルタの値を引いた値
  • 定期的な加速→小さく反映される
  • 瞬間的な加速→大きく反映される
  • 瞬間的な加速を取得したいときに使用

ソースはこちらから(加速度の値はそのまま使ってるのでlow-passフィルタ、high-passフィルタは公式サイトの記述を参考に自分で書いてみましょう)。