スマートフォンの傾き角のプログラム

スマートフォンの傾き角を求めるプログラムを作ります。
本記事は、記事「スマートフォンの傾き角の計算」の続き記事です。

 

 

重力加速度

重力加速度の方向は、スマートフォンを持って立っている人の、頭から踵(かかと)に向かう方向です。そして、その大きさは、約9.8(m/sec2)です。

頭から踵に向かう方向を、「鉛直方向」とよびます。
それは、鉛の重りに糸を付けて垂らしたときに、糸を持った手から鉛に向かう方向です。

  • 重力加速度の向き = 鉛直方向
Plumb bob
Pic.1 鉛直 – Wikipedia

スマートフォンはいろいろな方向を向き、それに伴いスマートフォン座標系もいろいろな方向を向きます(Fig.1 参照)。

 

Fig.1 スマートフォン座標系

 

しかし、重力加速度の方向(鉛直方向)は常に同じなので、スマートフォンで重力加速度を検出することで、重力加速度(鉛直方向)に対するスマートフォンの向きが分かります。

  • 重力加速度の向きを検出: スマートフォンの向きが分かる

 

これは、丁度、方位磁石(コンパス)のN極が常に「北」を指すことで、方位磁石の向きが分かるのと同じことです。

  • 方位磁石の針を見る: 方位磁石の向きが分かる

Kompas Sofia
Pic.2 方位磁針 – Wikipedia
 Pic.2 では、自分は、ほぼ西(West)に向かっていることが分かります。

 

 

プログラム

プログラム1

 

プログラムの説明

motion イベント【1】

プログラム1 の、7 行目から24 行目は、下に示す構造をしています。

DeviceMotionEvent オブジェクトを参照することで、スマートフォンの動きが分かります。

DeviceMotionEvent オブジェクトには、次の4 つのプロパティがあります。

  • DeviceMotionEvent.acceleration
  • DeviceMotionEvent.accelerationIncludingGravity
  • DeviceMotionEvent.rotationRate
  • DeviceMotionEvent.interval

今回は、accelerationIncludingGravity を使用します。

(注)ブラウザ実装状況【1】
DeviceMotionEvent のブラウザ実装状況は、Chrome, Firefoxは「実装」 で、IE, Opera, Safari は「?」です。

【参照.1】MDN、デバイスの方向の検出

 

 

 

AccelerationIncludingGravity プロパティ【2】

プログラム1 の、11 行目から14 行目は、下に示す構造をしています。

accelerationIncludingGravityプロパティは、スマートフォンに加わった加速度を返します。
単位は、「m/s2」です。

名前の通り、その加速度には「重力加速度」が含まれます。

そのため、スマートフォンを「静かに」、テーブルの上などに置いた場合、「重力加速度」だけを検知することになります。

(注)「静かに」とは、重力加速度以外の加速度が生じていない状態

 

x, y, z は、スマートフォンの各軸方向の加速度を表します(Fig.1 参照)。

  • xx軸方向の加速度
  • yy軸方向の加速度
  • zz軸方向の加速度

(注)ブラウザ実装状況【2】
DeviceMotionEvent のブラウザ実装状況は、Chrome, Firefoxは「実装」 で、IE, Opera, Safari は「?」です。

【参照.2】MDN, DeviceMotionEvent.accelerationIncludingGravity

 

 

傾き角(θ)の計算【3】

スマートフォンの水平方向からの傾き(θ)は、次式となります。

ここで、Gx, Gy, Gz は、加速度センサーで検出した重力加速度です。

【参照.3】上式の導出など、詳細は、記事「スマートフォンの傾き角の計算」をご参照ください。

 

プログラム1 の、16 行、17 行で、上式を実装しています。

cosθ の逆関数arccos でθを計算し、ラジアンから度数に変換しています。

 

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。