• facebook
  • twitter
  • rss

スマートフォンの加速度センサについて

スマートフォンには様々なセンサが搭載されています。 
電話をするときにタッチパネルをOFFにするための近接センサ、周囲の明るさにあわせて画面の輝度を調整するための照度センサ、スマートフォンの動きや傾きを検知するための加速度センサやジャイロ、方向を知るための電子コンパス、さらには現在位置を知るためのGPSモジュールもセンサと言えるでしょう。

それらの多数のセンサの中から、今回は加速度センサについて取り上げます。

加速度センサとは?

加速度センサとはモーションセンサとも言われ、スマートフォンにかかる動きの検知に用いられます。

スマートフォンが机の上に置かれているのか? 手に持っている状態なのか? それともポケットにいれて歩いているのか? などなどを検知することができます。シェイク機能や歩数計、睡眠時の寝返り判定などは、この加速度センサの応用例の1つです。

また、実は動きだけでなくスマートフォンの傾きも加速度センサで知ることが出来ます。

画面の傾きを検知して自動で画面を縦向き・横向きにしてくれるおなじみの機能も加速度センサによるものです。

加速度とは?

そもそも加速度とはなんでしょうか? 
加速度とは主に(距離)/(時間の2乗)で示される、1秒(s)あたり速度(km/hもしくはm/s)がどれくらい変化したか?を表す値です。

1秒当たり時速5kmで加速するクルマの場合、加速度は5km/h/s。単位をm/s²に変換すると5000m / 3600s / s で、約1.38m/s²になります。

逆にブレーキをかけて減速するクルマの場合は、マイナスの加速度になります。 1秒当たり時速5kmで減速した場合は、符号が変わり約-1.38m/s²の加速度になります。

では時速80kmで速度が変わらず巡航中のクルマにかかる加速度はどうなるかというと…、加速も減速もしていないので、加速度は0m/s²になります。

クルマの例で簡単にご説明しましたが、手にスマートフォンを持って振り回した時も同様に、振り始めた時(加速した時)にプラスの加速度、止めた時(減速した時)にマイナスの加速度がかかります。机の上に置いている時(静止している時)は加速度は0m/s²です。加速度センサではそれをx, y, zの3軸の値として検出することができます。

では、先ほど加速度センサでは傾きを検出することができると言いましたが、スマートフォンを縦持ち・横持ちをしてそれぞれ静止しているのに、なぜ傾きの方向を検知して画面が回転してくれるのでしょうか?

その謎を解いてくれるのが重力加速度です。

重力加速度

重力加速度とは地球上のすべての物体に下向き(地球の中心方向)にかかっている加速度です。

地球上で生活する身としては当たり前すぎてその存在を忘れてしまいますが、我々人間だけでなくスマートフォンにも重力加速度がかかっています。単位はGで表され、その値は1G=約9.8m/s²になります。

先ほどスマートフォンを机の上に置いているときの加速度を0m/s²と説明しましたが、実はそれは誤りで、正確には下向きに1G=9.8m/s²の加速度がかかっています。

また水平方向に加速・減速している場合も、水平方向の加速度の他に常に(地球上にいる限り!)垂直方向の下向きに、1Gの重力加速度がかかっています。

実はiOSでもAndroidでも取得できる加速度センサの値の単位はm/s²ではなくGになっており、それほど重力加速度は加速度センサを扱う際には切っても切れない関係になっています。

重力加速度とその応用

では、実際にどのような値が取得できるのか見てみましょう。

出展: iOSイベント処理ガイド

加速度センサからの情報は図のようにx,y,zのそれぞれの軸に対して、単位Gの値として取得することが出来ます。

垂直に縦持ちしている場合は、図の通り-Yのホームボタン方向に重力加速度がかかっているため、加速度センサの値は(x, y, z)で表現すると(0, -1, 0)になります。

ホームボタンを右にして横持ちしている場合は、-Xの方向に重力加速度がかかるため(-1, 0, 0)に、同様に画面を上に向けて机に置いている時は、画面と反対の-Z方向に重力加速度がかかっているため(0, 0, -1)になります。

これらの違いから画面の下向きがどちらなのか?を判定して、画面を傾けている訳です。

加速度センサの特性

加速度の合成

このように加速度センサによって、スマートフォンにかかる動きのほか重力加速度を判定することによってスマートフォンの傾き(姿勢)を判定することが出来ますが、加速度センサの特性(弱点?)として、この動きの加速度と向きに重力加速度が合成され、(x, y, z)の3つの値として出力されます。そのため、もし画面を縦持ちしたまま1Gで加速した場合は、加速度センサの値は(0, -1, 1)となり、その瞬間の値だけみた場合、画面の下方向がどちらなのかを判定できません。

この特性により、傾きを詳しく判定するにはスマートフォンがほぼ静止している(=重力加速度のみ作用している)状態にする必要があります。

実際にスマートフォンを軽くシェイクしながら縦持ち・横持ちに持ち替えても画面はなかなか反応しません。シェイク動作を止めるとすぐに反応して画面の向きが変わります。

これは重力加速度と動きの加速度が合成して出力されるという加速度センサの特性をよく表しています。

ノイズ

近年の加速度センサの感度はとても良好になっており少しの動きでも検知することが可能です。逆に言うと少しの動きでも検知してしまい、それがノイズとなって意図しない動きを検出してしまったり、本来検出したい値を隠してしまったりすることがあります。

例えば、スマートフォンを手に持って特に動かしていない状態でも人間の手は微妙に振動しており、机の上に置いた状態と比べ加速度センサの値は微妙に変化します。

そのため実際にアプリケーションにて使用する場合は、用途に合わせて適切なフィルター(ハイパスフィルター or ローパスフィルター もしくはその両方)を通して利用する必要があるでしょう。

まとめ

このように加速度センサは、端末の動きのほか重力から端末の傾き(姿勢)まで検知することができます。ですが、重力と動きの加速度が合成されてしまったり、目に見えない動きがノイズになってしまったりと、アプリケーションで上手に扱うにはコツが必要でなかなか奥が深いものです。

関連記事

TOP