センサー
センサーは、デバイスとその周囲の物理的な世界との関係をアプリに知らせます。 センサーは、デバイスの方向、向き、動きをアプリに伝えることができます。 これらのセンサーは、ゲーム、拡張現実アプリ、またはユーティリティ アプリをより便利でインタラクティブなものにするのに役立ちます。たとえば、デバイスのモーションを使用して画面上の文字を配置したり、コックピットにいてデバイスをステアリング ホイールとして使用したりするシミュレートなど、独自の形式の入力を提供します。
一般的なルールとして、アプリがセンサーのみに依存するのか、センサーが追加の制御メカニズムを提供するのかを最初から決定します。 たとえば、デバイスを仮想ステアリング ホイールとして使用する駆動ゲームは、代わりに画面上の GUI を使用して制御できます。この方法では、システムで使用可能なセンサーに関係なく、アプリが動作します。 一方、大理石の傾斜迷路は、適切なセンサーを持つシステムでのみ動作するようにコーディングできます。 センサーに完全に依存するかどうかを戦略的に選択する必要があります。 マウス/タッチコントロールスキームは、より大きな制御のために浸漬を交換する点に注意してください。
トピック | 説明 |
---|---|
センサーの調整 | 磁力計 (コンパス、傾斜計、方位センサー) に基づくデバイス内のセンサーは、環境要因によって調整が必要になることがあります。 MagnetometerAccuracy 列挙は、デバイスが調整を必要とする場合の一定の動作を判断するのに役立ちます。 |
センサーの向き | OrientationSensor クラスからのセンサー データは、参照軸によって定義されます。 これらの軸は、デバイスの横向きで定義され、ユーザーが回すとデバイスと共に回転します。 |
加速度計を使用する | 加速度計を使ってユーザーの動きに応答する方法を説明します。 |
コンパスを使用する | コンパスを使って現在の方位を検出する方法を説明します。 |
ジャイロメーターを使用する | ジャイロメーターを使ってユーザーの動きの変化を検出する方法を説明します。 |
傾斜計を使用する | 傾斜計を使ってピッチ、ロール、ヨーを検出する方法を説明します。 |
ライト センサーを使用する | 環境光センサーを使って環境光の変化を検出する方法を説明します。 |
向きセンサーを使用する | 向きセンサーを使用してデバイスの向きを決定する方法について説明します。 |
センサーのバッチ処理
一部のセンサーでは、バッチ処理の概念がサポートされています。 これは、使用可能な個々のセンサーによって異なります。 センサーがバッチ処理を実装すると、指定した時間間隔で複数のデータ ポイントが収集され、そのデータがすべて一度に転送されます。 これは、センサーが読み取りを実行するとすぐに結果を報告する通常の動作とは異なります。 次の図を見ると、データの収集方法と配信方法、最初に通常の配信、次にバッチ配信を使用する方法が示されています。
センサーのバッチ処理の主な利点は、バッテリ寿命の延長です。 データがすぐに送信されないと、プロセッサの電力が節約され、データをすぐに処理する必要がありません。 システムの一部は、必要になるまでスリープ状態にすることができ、大幅な節電を生み出します。
待機時間を調整することで、センサーがバッチを送信する頻度に影響を与えることができます。 たとえば、 Accelerometer センサーには ReportLatency プロパティがあります。 アプリケーションに対してこのプロパティが設定されている場合、センサーは指定した時間が経過するとデータを送信します。 ReportInterval プロパティを設定することで、特定の待機時間で累積されるデータの量を制御できます。
待機時間の設定に関して留意すべき注意事項がいくつかあります。 最初の注意事項は、各センサーに MaxBatchSize センサー自体に基づいてサポートできることです。 これは、送信を強制される前にセンサーがキャッシュできるイベントの数です。 MaxBatchSize に ReportInterval を乗算すると、ReportLatency の最大値が決まります。 これよりも大きい値を指定した場合、データを失わないよう最大待機時間が使用されます。 さらに、複数のアプリケーションでそれぞれ必要な待機時間を設定できます。 すべてのアプリケーションのニーズを満たすために、最短の待機時間が使用されます。 これらの事実により、アプリケーションで設定した待機時間が、観察された待機時間と一致しない可能性があります。
センサーがバッチ レポートを使用している場合、 GetCurrentReading を呼び出すと、データの現在のバッチがクリアされ、新しい待機時間が開始されます。
加速度計
Accelerometerセンサは、デバイスのX軸、Y軸、Z軸に沿ったGフォース値を測定し、単純なモーションベースのアプリケーションに最適です。 G フォース値には、重力による加速度が含まれます。 デバイスにテーブルの FaceUp の SimpleOrientation がある場合、加速度計は Z 軸に -1 G を読み取ります。 したがって、加速度計は必ずしも単なる座標加速度(速度の変化率)を測定するわけではありません。 加速度計を使用する場合は、重力ベクトルとモーションからの線形加速度ベクトルを区別してください。 静止デバイスの場合、重力ベクトルは 1 に正規化する必要があることに注意してください。
次の図は、次の図を示しています。
- V1 = ベクトル 1 = 重力による力
- V2 = ベクター 2 = デバイス シャーシの -Z 軸 (画面の背面をポイント)
- Θi = 傾き角度 (傾斜) = デバイス シャーシの –Z 軸と重力ベクトルの間の角度
加速度計センサーを使用する可能性があるアプリには、画面上の大理石がデバイスを傾ける方向に転がるゲーム (重力ベクトル) が含まれます。 この種の機能は、 Inclinometer の機能を密接に反映しピッチとロールの組み合わせを使用してそのセンサーで行うこともできます。 加速度計の重力ベクトルを使用すると、デバイスの傾きに対して簡単に数学的に操作されるベクトルを提供することで、これを多少簡略化できます。 もう 1 つの例は、ユーザーがデバイスを空気 (線形加速度ベクトル) を通してフリックしたときに、ホイップのクラッキング 音を鳴らすアプリです。
実装例については、 accelerometer サンプルを参照してください。
アクティビティ センサー
Activity センサーは、センサーに接続されているデバイスの現在の状態を決定します。 このセンサーは、デバイスを持ち歩くユーザーがいつ動いているか、歩いているのを追跡するために、フィットネス アプリケーションでよく使用されます。 このセンサー API で検出できる可能性のあるアクティビティの一覧については、 ActivityType を参照してください。
実装例については、 activity センサーのサンプルを参照してください。
高度計
Altimeter センサーは、センサーの高度を示す値を返します。 これにより、海抜からメートル単位で高度の変化を追跡できます。 これを使用する可能性のあるアプリの 1 つの例は、実行中の標高の変化を追跡して消費カロリーを計算する実行中のアプリです。 この場合、このセンサー データを Activity センサーと組み合わせて、より正確な追跡情報を提供できます。
実装例については、 altimeter サンプルを参照してください。
Barometer
Barometer センサーを使用すると、アプリケーションで気圧読み取り値を取得できます。 気象アプリケーションでは、この情報を使用して現在の気圧を提供できます。 これは、より詳細な情報を提供し、潜在的な気象変化を予測するために使用できます。
実装例については、 barometer サンプルを参照してください。
Compass
Compass センサーは、地球の水平平面に基づいて、磁気北に関して 2D の見出しを返します。 コンパス センサーは、特定のデバイスの向きを決定したり、3D 空間で何かを表したりするために使用しないでください。 地理的特徴は、見出しに自然な辞退を引き起こす可能性があるため、一部のシステムでは HeadingMagneticNorth と HeadingTrueNorth の両方がサポートされます。 アプリがどちらを好むかを考えますが、すべてのシステムが真北の値を報告するわけではないことに注意してください。 ジャイロメーターと磁力計 (磁気強度の大きさを測定するデバイス) センサーは、データを組み合わせてコンパスの見出しを生成します。これは、データを安定させるという正味の効果を持ちます (磁場強度は電気システムコンポーネントによって非常に不安定です)。
コンパスのローズを表示したり、マップ内を移動したりするアプリは、通常、コンパス センサーを使用します。
実装例については、 compass サンプルを参照してください。
Gyrometer
Gyrometer センサーは、X 軸、Y 軸、Z 軸に沿って角速度を測定します。 これらは、デバイスの向きに関係なく、異なる速度で回転するデバイスを気にする単純なモーションベースのアプリで非常に便利です。 ジャイロメーターは、データのノイズや、1 つ以上の軸に沿った一定のバイアスに苦しむ可能性があります。 ジャイロメーターがバイアスを受けるかどうかを判断するために、加速度計にクエリを実行してデバイスが動いているかどうかを確認し、それに応じてアプリで補正する必要があります。
ジャイロメーター センサーを使用できるアプリの例として、デバイスの高速回転ジャークに基づいて、歯車ホイールを回転させるゲームがあります。
実装例については、 gyrometer サンプルを参照してください。
Inclinometer
Inclinometer センサーは、デバイスのヨー、ピッチ、ロールの値を指定し、デバイスが空間にどのように配置されているかを考慮するアプリで最適に動作します。 ピッチとロールは、加速度計の重力ベクトルを取得し、ジャイロメーターからのデータを統合することによって派生します。 Yaw は、磁力計とジャイロメーター (コンパスの見出しと同様) データから確立されます。 Inclinometersは、高度な方位データを簡単に消化可能で理解しやすい方法で提供します。 デバイスの向きが必要だが、センサー データを操作する必要がない場合は、傾斜計を使用します。
デバイスの向きに合わせてビューを変更するアプリでは、傾斜計センサーを使用できます。 また、デバイスのヨー、ピッチ、ロールに一致する飛行機を表示するアプリでは、傾斜計の読み取り値も使用されます。
実装例については、傾斜計のサンプル https://github.com/Microsoft/Windows-universal-samples/tree/main/Samples/Inclinometer をご覧ください。
光センサー
Light センサーは、センサーを囲む周囲の光を決定できます。 これにより、デバイスを囲む光の設定がいつ変更されたかをアプリで判断できます。 たとえば、スレート デバイスを使用しているユーザーは、晴れた日に屋内から屋外まで歩く場合があります。 スマート アプリケーションでは、この値を使用して、レンダリングされる背景とフォントのコントラストを上げることができます。 そうすると、コンテンツは明るく屋外の設定で読み取り可能になります。
実装例については、 light センサーのサンプルを参照してください。
向きセンサー
デバイスの向きは、四元数と回転マトリックスの両方で表されます。 OrientationSensorは、絶対見出しに関して、デバイスがどのように空間に配置されているかを判断する際に高い精度を提供します。 OrientationSensor データは、加速度計、ジャイロメーター、および磁力計から派生します。 そのため、傾斜計センサーとコンパス センサーの両方を四元数の値から派生させることができます。 四元数および回転行列は、高度な数学的操作にうまく役立ち、グラフィカルプログラミングでよく使用されます。 複雑な操作を使用するアプリでは、四元数と回転マトリックスに基づく変換の数が多い場合に、向きセンサーを優先する必要があります。
方位センサーは、デバイスの背面が指している方向に基づいて周囲のオーバーレイを描画する高度な拡張現実アプリでよく使用されます。
実装例については、 orientation センサーのサンプルを参照してください。
歩数計
Pedometerセンサーは、接続されたデバイスを持つユーザーが実行したステップの数を追跡します。 センサーは、特定の期間のステップ数を追跡するように構成されています。 複数のフィットネス アプリケーションは、ユーザーがさまざまな目標を設定して達成するのを支援するために実行されたステップの数を追跡することを好みます。 その後、この情報を収集して保存し、時間の経過に伴う進行状況を表示できます。
実装の例については、 歩数計のサンプルを参照してください。
近接センサー
Proximity センサーを使用して、センサーによってオブジェクトが検出されたかどうかを示すことができます。 近接センサは、物体がデバイスの範囲内にあるかどうかを判断するだけでなく、検出された物体までの距離を決定することもできます。 これを使用できる例の 1 つは、ユーザーが指定された範囲内に入ったときにスリープ状態から出現するアプリケーションです。 近接センサーがオブジェクトを検出し、よりアクティブな状態になるまで、デバイスは低電力スリープ状態になる可能性があります。
実装例については、 proximity センサーのサンプルを参照してください。
単純な向き
SimpleOrientationSensorは、指定されたデバイスの現在のクアドラントの向き、または表向きまたは正面向きを検出します。 SimpleOrientation 状態 (NotRotated、Rotated90、Rotated180、Rotated270、FaceUp、FaceDown) があります。
地面に平行または垂直に保持されているデバイスに基づいて表示を変更するリーダー アプリは、SimpleOrientationSensor の値を使用して、デバイスの保持方法を決定します。
実装例については、 simple 方向センサーのサンプルを参照してください。