[iPhone] CMAccelerometerData 加速度センサー

iPhoneはx,y,z軸それぞれを計測する加速度センサーを搭載しています。端末を傾けることで、スマホならではのゲームを作ることができます。
 
Orientation of the device axes

Ref: Orientation of the device axes

Swift 5.1
Xcode 11.3.1

 

CMAccelerometerData

 
まずは生のデータを取り出してみたいと思います。

  • CoreMotionをimport
  • CMMotionManagerのインスタンスを生成
  • accelerometerUpdateIntervalでインターバル時間を設定

その後、加速度センサー値取得の開始で queue と handler を設定します。

ViewController.swift

 
後はstoryboardにUILabelを3つおいて紐付けして実行です。
 
 
stopAccelerometerUpdates()はセンサー取得でバッテリー消費量が増大するため使わない場合は止めておく必要があります。
 
机の上に置いた状態ではX,Y軸はほぼ「0」でZ軸が「-1」となります。単位はG,地球の重力[m/s2]ですからY軸方向に-1Gが加わっていることを表します。
 
このケースでは生データなのでローパスフィルターを入れてみたいと思います。
ローパスを入れるか、ハイパスフィルターを入れるかは使用目的異なるでしょう。
 

フィルター

 
EMA(指数移動平均)フィルターを作成します。

St = α * Yt-1 + (1 -α) * St-1

St:t時点でのEMA
α:平滑化係数
Yt-1:1つ前のデータ
St-1:1つ前のEMA
 
ViewController.swift

 
公式通りの実装ではありませんがほぼそれないりの動作となっていると思います。
ここでαの値とintervalはそれぞれの特性に応じて最適化する必要があります。
 
ハイパスフィルターにするには、ざっくり元のデータからローパスを引いた成分と考えると簡単です
 

 
ハイパスフィルターですから、瞬間的な変動成分のみになります。これを使うとZ軸の値も0になります。3軸のGの影響を引いた値が必要な場合は有効でしょう。
 
 
References:
UIAcceleration – UIKit | Apple Developer Documentation
Core Motion | Apple Developer Documentation

一人でアプリ開発の限界を感じたら

アプリ開発を始めたけどわからないところがあり、誰かに聞きたいけど周りにはそんな人はいない…あるいは、会社で働いていて日中そんなに時間をとれないなど、オンライン・スクールがいいと思います。


TECH ACADEMY
自宅にいながら1時間でプログラミング基礎を習得

こういうものではアプリ作れないと言う意見もありますが、それは結局本人のやる気があるかないかです。やる気があっても独学では突破しにくいところは教えてもらうのが一番早い。


侍エンジニア塾
侍エンジニア塾 無料体験レッスン



とても簡単なことなのに本やネットの画像だけでは分かりにくいことはあります。実際に質問してピンポイントで教えてもらうと、なんだそんなこと、と言うのがけっこうあります。


CodeCamp
~約20,000名の受講生と300社以上の導入実績~
現役エンジニアのオンライン家庭教師CodeCamp




直接(ネットで)誰か分かる人に聞いた方が早く解決して、上達も早いと思います。


Play Ground
本業と並行してやるには月額制なのがありがたいです。


無料で転職まで
これはiOSアプリ限定ではありませんが無料です
その代わり就職することを前提にしたスクールで「エンジニアになって職を得たい」のであれば手っ取り早いかもしれません

受講料無料:社会人転職コース


誤字脱字、意味不明などのご意見は 謙: e-mail まで
ブックマークしておくと便利です このエントリーをはてなブックマークに追加
Twitter:


シェアする

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

フォローする