ホチキス先生の「プログラマーと呼ばれたい」

InfoPath & SQL Server !

Windows Phoneプログラミング – 加速度計の値をAccelerometerから取得すると重力加速度は1、最大加速度は2だが値を超えることもある – 実験機はNokia Lumia 800

leave a comment »

IMG_4035_mid_640_480

<Fig.1 : Wondows Phoneの加速度情報を取得するサンプル>

Accelerometerオブジェクトを使ってWindows Phoneから加速度情報を取得して画面に表示するサンプルを作ってみた。加速度情報はWindows Phoenに対してX、Y、Zの3軸で値を取得するようになっている。Windows Phone本体を上向きで水平状態に保ったとき、XとYの値は「0」、Zの値は「-1」となっている。本体を裏返しにして水平状態に保つと、XとYの値は「0」、Zの値は「1」となる。

本体を表に向けた状態で、右に傾けるとXの値が「0」から次第に増加し、90度傾けて立てた状態にするとXの値は「1」になる。本体を向こう側に傾けるとYの値が「0」から次第に増加し、90度傾けて立てた状態にする、つまりWindows Phoneを逆さに立てた状態にするとYの値は「1」になる。リアルタイムに加速度計の値が変化するサンプルは以前ここで紹介した。

<Windows Phoneアプリ開発 – たった3行でできる加速度センサの利用>
https://matsumotoyoshio.wordpress.com/2012/06/27/windows-phone%e3%82%a2%e3%83%97%e3%83%aa%e9%96%8b%e7%99%ba-%e3%81%9f%e3%81%a3%e3%81%9f3%e8%a1%8c%e3%81%a7%e3%81%a7%e3%81%8d%e3%82%8b%e5%8a%a0%e9%80%9f%e5%ba%a6%e3%82%bb%e3%83%b3%e3%82%b5/

しかし加速度計の値は、単に傾きを取得するのではなく「加速度」を取得するので、Windows Phone本体を振るなどして加速度を与えると「1」以上の値や「-1」以下の値を取得する。瞬間的に「1」や「-1」を超えることがあるのだ。このあたりは加速度の値を使って操作するアプリを作ったとき、値が閾値を超えてエラーにならないように考えなければならない。

では実際にWindows Phoneを振るなどして加速度の値がどのくらいまで取得されるかを試したのが上のFig.1である。このサンプルでリアルタイムに加速度の値を取得して表示すると同時に、X、Y、Z各値の最大値と最小値を表示させるようにしたものだ。テキストボックスの上からXのリアルタイム値、次は左がXの最大値で右がXの最小値、Yのリアルタイム値、Yの最大値とYの最小値、そしてZのリアルタイム値、Zの最大値とZの最小値、である。

サンプルプログラムを実行し、Windows Phoneをいろんな角度に振ると最大値、最長値がわかる。わかったのは、加速度の最大値は「2」、最長値は「-2」で、これはつまり重力加速度の2倍まで検知できると考えていいだろう。また最大値はぴったりではなく、XとYの加速度は最大2.000977まで上がり、Zの加速度は-2.000977まで下がっていることだ。

この原因はWindows Phoneの加速度センサに誤差があるからだろうか。このサンプルプログラムはNokia Lumia 800で実行したものだが、同機種の他の実機で実行したり、他機種モデルで実行して調べてみたい。もし機器の個体差によるものなら、アプリのプログラミングにおいてはこの誤差を考慮する必要があるだろう。

IMG_4054_mid_640_480

<Fig.2 : サンプルプログラムを実行したWindows Phone Nokia Lumia 800>

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。