センサー

センサーは、デバイスとその周囲の物理的な世界との関係をアプリに知らせます。 センサーは、デバイスの方向、向き、動きをアプリに伝えることができます。 これらのセンサーは、ゲーム、拡張現実アプリ、またはユーティリティ アプリをより便利でインタラクティブなものにするのに役立ちます。たとえば、デバイスのモーションを使用して画面上の文字を配置したり、コックピットにいてデバイスをステアリング ホイールとして使用したりするシミュレートなど、独自の形式の入力を提供します。

一般的なルールとして、アプリがセンサーのみに依存するのか、センサーが追加の制御メカニズムを提供するのかを最初から決定します。 たとえば、デバイスを仮想ステアリング ホイールとして使用する駆動ゲームは、代わりに画面上の GUI を使用して制御できます。この方法では、システムで使用可能なセンサーに関係なく、アプリが動作します。 一方、大理石の傾斜迷路は、適切なセンサーを持つシステムでのみ動作するようにコーディングできます。 センサーに完全に依存するかどうかを戦略的に選択する必要があります。 マウス/タッチの操作方式は、操作性が向上する一方で、没入感が損なわれることに注意してください。

トピック Description
センサーの調整 磁力計 (コンパス、傾斜計、方位センサー) に基づくデバイス内のセンサーは、環境要因によって調整が必要になることがあります。 MagnetometerAccuracy 列挙は、デバイスが調整を必要とする場合の一定のアクションを判断するのに役立ちます。
センサーの向き OrientationSensor クラスからのセンサー データは、参照軸によって定義されます。 これらの軸は、デバイスの横向きで定義され、ユーザーが回すとデバイスと共に回転します。
加速度計を使用する 加速度計を使用してユーザーの動きに応答する方法について説明します。
コンパスを使用する コンパスを使用して現在の見出しを決定する方法について説明します。
ジャイロメーターを使用する ジャイロメーターを使用してユーザーの動きの変化を検出する方法について説明します。
傾斜計を使用する 傾斜計を使用してピッチ、ロール、ヨーを決定する方法について説明します。
ライト センサーを使用する 環境光センサーを使用して、照明の変化を検出する方法について説明します。
向きセンサーを使用する 向きセンサーを使用してデバイスの向きを決定する方法について説明します。

センサーのバッチ処理

一部のセンサーでは、バッチ処理の概念がサポートされています。 これは、使用可能な個々のセンサーによって異なります。 センサーがバッチ処理を実装すると、指定した時間間隔で複数のデータ ポイントが収集され、そのデータがすべて一度に転送されます。 これは、センサーが読み取りを実行するとすぐに結果を報告する通常の動作とは異なります。 次の図を見ると、データの収集方法と配信方法、最初に通常の配信、次にバッチ配信を使用する方法が示されています。

センサーバッチ収集

センサーのバッチ処理の主な利点は、バッテリ寿命の延長です。 データがすぐに送信されないと、プロセッサの電力が節約され、データをすぐに処理する必要がありません。 システムの一部は、必要になるまでスリープ状態にすることができ、大幅な節電を生み出します。

待機時間を調整することで、センサーがバッチを送信する頻度に影響を与えることができます。 たとえば、Accelerometer センサーには、ReportLatency プロパティがあります。 アプリケーションに対してこのプロパティが設定されている場合、センサーは指定した時間が経過するとデータを送信します。 ReportInterval プロパティを設定することで、特定の待機時間にわたって累積されるデータの量を制御できます。

待機時間の設定に関して留意すべき注意事項がいくつかあります。 最初の注意事項は、各センサーに MaxBatchSize があり、センサー自体に基づいてサポートできることです。 これは、送信を強制される前にセンサーがキャッシュできるイベントの数です。 MaxBatchSize にReportInterval を乗算すると、ReportLatency の最大値が決まります。 これよりも大きい値を指定した場合、データを失わないよう最大待機時間が使用されます。 さらに、複数のアプリケーションでそれぞれ必要な待機時間を設定できます。 すべてのアプリケーションのニーズを満たすために、最短の待機時間が使用されます。 これらの事実により、アプリケーションで設定した待機時間が、観察された待機時間と一致しない可能性があります。

センサーがバッチ レポートを使用している場合、 GetCurrentReading を 呼び出すと、データの現在のバッチがクリアされ、新しい待機時間が開始されます。

加速度計

Accelerometer センサーは、デバイスの X、Y、Z 軸に沿った G フォース値を測定し、単純なモーションベースのアプリケーションに適しています。 G フォース値には、重力による加速度が含まれます。 デバイスのテーブルに SimpleOrientationFaceUp がある場合、加速度計は Z 軸の G -1 を読み取ります。 したがって、加速度計は必ずしも単なる座標加速度(速度の変化率)を測定するわけではありません。 加速度計を使用する場合は、重力ベクトルとモーションからの線形加速度ベクトルを区別してください。 静止デバイスの場合、重力ベクトルは 1 に正規化する必要があることに注意してください。

次の図は、以下を示しています。

  • V1 = ベクトル 1 = 重力による力
  • V2 = ベクトル 2 = デバイス筐体の -Z 軸(画面の背面から外側を向く)
  • Θi = 傾き角度 (傾斜) = デバイス シャーシの –Z 軸と重力ベクトルの間の角度

加速度計 加速度計の測定

加速度計センサーを使用する可能性があるアプリには、画面上の大理石がデバイスを傾ける方向に転がるゲーム (重力ベクトル) が含まれます。 この種の機能は、Inclinometerの機能を厳密に反映し、ピッチとロールの組み合わせを使用してそのセンサーで行うこともできます。 加速度計の重力ベクトルを使用すると、デバイスの傾きに対して簡単に数学的に操作されるベクトルを提供することで、これを多少簡略化できます。 もう 1 つの例は、ユーザーがデバイスを空気 (線形加速度ベクトル) を通してフリックしたときに、ホイップのクラッキング 音を鳴らすアプリです。

実装例については、「 加速度計を使用する」を参照してください。

アクティビティ センサー

Activity センサーは、センサーに接続されているデバイスの現在の状態を決定します。 このセンサーは、デバイスを持ち歩くユーザーがいつ動いているか、歩いているのを追跡するために、フィットネス アプリケーションでよく使用されます。 このセンサー API で検出できる可能性のあるアクティビティの一覧については、ActivityType を参照してください。

実装例については、activity センサーのサンプルを参照してください。

高 度 計

Altimeter センサーは、センサーの高度を示す値を返します。 これにより、海抜からメートル単位で高度の変化を追跡できます。 これを使用する可能性のあるアプリの 1 つの例は、実行中の標高の変化を追跡して消費カロリーを計算する実行中のアプリです。 この場合、このセンサー データを Activity センサーと組み合わせて、より正確な追跡情報を提供できます。

実装例については、altimeter サンプルを参照してください。

バロメーター

Barometer センサーを使用すると、アプリケーションで気圧読み取り値を取得できます。 気象アプリケーションでは、この情報を使用して現在の気圧を提供できます。 これは、より詳細な情報を提供し、潜在的な気象変化を予測するために使用できます。

実装例については、barometer サンプルを参照してください。

コンパス

Compass センサーは、地球の水平平面に基づいて北の磁気に関して 2D の方位を返します。 コンパス センサーは、特定のデバイスの向きを決定したり、3D 空間で何かを表したりするために使用しないでください。 地理的特徴は、見出しの自然な偏角を引き起こす可能性があるため、一部のシステムでは HeadingMagneticNorthHeadingTrueNorth の両方がサポートされています。 アプリがどちらを好むかを考えますが、すべてのシステムが真北の値を報告するわけではないことに注意してください。 ジャイロメーターと磁力計 (磁気強度の大きさを測定するデバイス) センサーは、データを組み合わせてコンパスの見出しを生成します。これは、データを安定させるという正味の効果を持ちます (磁場強度は電気システムコンポーネントによって非常に不安定です)。

磁気北極に関するコンパスの読み取り値

コンパスのローズを表示したり、マップ内を移動したりするアプリは、通常、コンパス センサーを使用します。

実装例については、「 コンパスを使用する」を参照してください。

ジャイロメーター

Gyrometer センサーは、X 軸、Y 軸、Z 軸に沿って角速度を測定します。 これらは、デバイスの向きに関係なく、異なる速度で回転するデバイスを気にする単純なモーションベースのアプリで非常に便利です。 ジャイロメーターは、データのノイズや、1 つ以上の軸に沿った一定のバイアスに苦しむ可能性があります。 ジャイロメーターがバイアスを受けるかどうかを判断するために、加速度計にクエリを実行してデバイスが動いているかどうかを確認し、それに応じてアプリで補正する必要があります。

ピッチ、ロール、ヨー付きジャイロメーター

ジャイロメーター センサーを使用できるアプリの例として、デバイスの高速回転ジャークに基づいて、歯車ホイールを回転させるゲームがあります。

実装例については、「 ジャイロメーターを使用する」を参照してください。

傾斜 計

Inclinometer センサーは、デバイスのヨー、ピッチ、ロールの値を指定し、デバイスが宇宙でどのように配置されているかを考慮するアプリで最適に動作します。 ピッチとロールは、加速度計の重力ベクトルを取得し、ジャイロメーターからのデータを統合することによって派生します。 ヨーは、磁力計およびジャイロメータのデータ(コンパス方位に相当)から算出されます。 Inclinometersは、高度な方位データを簡単に消化可能で理解しやすい方法で提供します。 デバイスの向きが必要だが、センサー データを操作する必要がない場合は、傾斜計を使用します。

ピッチ、ロール、ヨーデータを含む傾斜計

デバイスの向きに合わせてビューを変更するアプリでは、傾斜計センサーを使用できます。 また、デバイスのヨー、ピッチ、ロールに一致する飛行機を表示するアプリでは、傾斜計の読み取り値も使用されます。

実装例については、「 傾斜計を使用する」を参照してください。

光センサー

LightSensor センサーは、センサーを囲む周囲の光を決定できます。 これにより、デバイスを囲む光の設定がいつ変更されたかをアプリで判断できます。 たとえば、スレート デバイスを使用しているユーザーは、晴れた日に屋内から屋外まで歩く場合があります。 スマート アプリケーションでは、この値を使用して、レンダリングされる背景とフォントのコントラストを上げることができます。 そうすると、コンテンツは明るく屋外の設定で読み取り可能になります。

実装例については、「 ライト センサーの使用」を参照してください。

向きセンサー

デバイスの向きは、四元数と回転マトリックスの両方で表されます。 OrientationSensorは、絶対方位に対してデバイスが空間内でどのような向きにあるかを高精度で判断できます。 OrientationSensor データは、加速度計、ジャイロメーター、磁力計から取得されます。 そのため、傾斜計センサーとコンパス センサーの両方を四元数の値から派生させることができます。 四元数および回転行列は、高度な数学的操作にうまく役立ち、グラフィカルプログラミングでよく使用されます。 複雑な操作を使用するアプリでは、四元数と回転マトリックスに基づく変換の数が多い場合に、向きセンサーを優先する必要があります。

方向センサーのデータ

方位センサーは、デバイスの背面が指している方向に基づいて周囲のオーバーレイを描画する高度な拡張現実アプリでよく使用されます。

実装例については、「 向きセンサーを使用する」を参照してください。

歩数 計

Pedometer センサーは、接続されたデバイスを持つユーザーが実行した手順の数を追跡します。 センサーは、特定の期間のステップ数を追跡するように構成されています。 複数のフィットネス アプリケーションは、ユーザーがさまざまな目標を設定して達成するのを支援するために実行されたステップの数を追跡することを好みます。 その後、この情報を収集して保存し、時間の経過に伴う進行状況を表示できます。

実装例については、pedometer サンプルを参照してください。

近接センサー

Proximity センサーを使用して、センサーによってオブジェクトが検出されたかどうかを示すことができます。 近接センサは、物体がデバイスの範囲内にあるかどうかを判断するだけでなく、検出された物体までの距離を決定することもできます。 これを使用できる例の 1 つは、ユーザーが指定された範囲内に入ったときにスリープ状態から出現するアプリケーションです。 近接センサーがオブジェクトを検出し、よりアクティブな状態になるまで、デバイスは低電力スリープ状態になる可能性があります。

実装例については、proximity センサーのサンプルを参照してください。

シンプルな方向

SimpleOrientationSensor は、指定されたデバイスの現在のクアドラントの向き、または表向きまたは正面向きを検出します。 SimpleOrientation には、6つの可能な状態 (NotRotatedRotated90Rotated180Rotated270FaceUpFaceDown) があります。

地面に平行または垂直に保持されているデバイスに基づいて表示を変更するリーダー アプリは、SimpleOrientationSensor の値を使用して、デバイスの保持方法を決定します。

実装例については、simple 方向センサーのサンプルを参照してください。