Sensors

I sensori comunicano all'app la relazione tra un dispositivo e il mondo fisico intorno a esso. I sensori possono indicare all'app la direzione, l'orientamento e lo spostamento del dispositivo. Questi sensori possono aiutare a rendere il gioco, l'app di realtà aumentata o l'app di utilità più utile e interattiva fornendo una forma unica di input, ad esempio usando il movimento del dispositivo per disporre i caratteri sullo schermo o simulare l'essere in una cabina di guida e usando il dispositivo come volante.

Come regola generale, decidere fin dall'inizio se l'app dipenderà esclusivamente dai sensori o se i sensori offriranno solo un meccanismo di controllo aggiuntivo. Ad esempio, un gioco di guida che usa un dispositivo come volante virtuale potrebbe essere controllato in alternativa tramite un'interfaccia utente grafica sullo schermo. In questo modo, l'app funziona indipendentemente dai sensori disponibili nel sistema. Dall'altra parte, un labirinto di marmo inclinato potrebbe essere codificato per lavorare solo su sistemi che dispongono dei sensori appropriati. È necessario scegliere se affidarsi completamente ai sensori. Si noti che uno schema di controllo mouse/tocco scambia immersioni per un maggiore controllo.

Argomento Descrizione
Calibra sensori I sensori in un dispositivo basato sul magnetometro, ovvero la bussola, l'inclinometro e il sensore di orientamento, possono diventare necessari per la calibrazione a causa di fattori ambientali. L'enumerazione MagnetometerAccuracy può aiutare a determinare un corso di azione quando il dispositivo ha bisogno di calibrazione.
Orientamento del sensore I dati dei sensori delle classi OrientationSensor vengono definiti dai relativi assi di riferimento. Questi assi sono definiti dall'orientamento orizzontale del dispositivo e ruotano con il dispositivo quando l'utente lo trasforma.
Usare l'accelerometro Informazioni su come usare l'accelerometro per rispondere al movimento dell'utente.
Usare la bussola Informazioni su come usare la bussola per determinare l'intestazione corrente.
Usare il giroscopio Informazioni su come usare il giroscopio per rilevare le modifiche apportate allo spostamento dell'utente.
Usare l'inclinometro Scopri come usare l'inclinometro per determinare inclinazione, rotazione attorno all'asse x e rotazione attorno all'asse y
Utilizza il sensore di luce Informazioni su come usare il sensore di luce ambientale per rilevare le modifiche nell'illuminazione.
Utilizza il sensore di orientamento Informazioni su come usare i sensori di orientamento per determinare l'orientamento del dispositivo.

Invio in batch di sensori

Alcuni sensori supportano il concetto di invio in batch. Questo varia a seconda del singolo sensore disponibile. Quando un sensore implementa l'invio in batch, raccoglie diversi punti di dati in un intervallo di tempo specificato e quindi trasferisce tutti i dati contemporaneamente. Questo comportamento è diverso da quello normale in cui un sensore segnala i risultati non appena esegue una lettura. Si consideri il diagramma seguente che mostra come vengono raccolti i dati e quindi recapitati, prima con recapito normale e quindi con recapito in batch.

Sensor batch collection

Il vantaggio principale per l'invio in batch dei sensori è prolungare la durata della batteria. Quando i dati non vengono inviati immediatamente, ciò consente di risparmiare sull'alimentazione del processore e impedisce l'elaborazione immediata dei dati. Le parti del sistema possono restare inattive fino a quando non è necessario, il che genera un risparmio di energia significativo.

È possibile influenzare la frequenza con cui il sensore invia batch regolando la latenza. Ad esempio, il sensore Accelerometro ha la proprietà ReportLatency property. Quando questa proprietà è impostata per un'applicazione, il sensore invierà i dati dopo il periodo di tempo specificato. È possibile controllare la quantità di dati accumulati su una determinata latenza impostando la proprietà ReportInterval.

Per quanto riguarda l'impostazione della latenza, è necessario tenere presenti alcune avvertenze. La prima avvertenza è che ogni sensore ha un valore MaxBatchSize che può fornire supporto in base al sensore stesso. Questo è il numero di eventi che il sensore può memorizzare nella cache prima che venga costretto a inviarli. Se si moltiplica MaxBatchSize per ReportInterval, che determina il valore massimo di ReportLatency. Se si specifica un valore superiore a questo, verrà usata la latenza massima in modo da non perdere i dati. Inoltre, più applicazioni possono impostare una latenza desiderata. Per soddisfare le esigenze di tutte le applicazioni, verrà usato il periodo di latenza più breve. A causa di questi fatti, la latenza impostata nell'applicazione potrebbe non corrispondere alla latenza osservata.

Se un sensore usa la creazione di report batch, la chiamata a GetCurrentReading cancella il batch di dati corrente e avvia un nuovo periodo di latenza.

Accelerometer

Il sensore Accelerometro misura i valori di forza G lungo gli assi X, Y e Z del dispositivo ed è ideale per semplici applicazioni basate sul movimento. Si noti che i valori di forza G includono l'accelerazione a causa della gravità. Se il dispositivo ha il SimpleOrientation di FaceUp su una tabella, l'accelerometro leggerà -1 G sull'asse Z. Pertanto, gli accelerometri non misurano necessariamente solo l'accelerazione delle coordinate, ovvero il tasso variabile della velocità. Quando si usa un accelerometro, assicurarsi di distinguere il vettore gravitazionale dalla gravità e il vettore di accelerazione lineare dal movimento. Si noti che il vettore gravitazionale deve normalizzare a 1 per un dispositivo stazionario.

Il diagramma seguente illustra quanto segue:

  • V1 = Vettore 1 = Forza a causa della gravità
  • V2 = Vettore 2 = -Z asse dello chassis del dispositivo (punta all'esterno dello schermo)
  • Θi = Angolo di inclinazione (inclinazione) = angolo tra l'asse -Z dello chassis del dispositivo e il vettore di gravità

AccelerometerAccelerometer measurement

Le app che potrebbero usare il sensore dell'accelerometro includono un gioco in cui una biglia sullo schermo rotola nella direzione in cui si inclina il dispositivo (vettore gravitazionale). Questo tipo di funzionalità rispecchia attentamente quello dell'Inclinometro e può anche essere fatto con quel sensore usando una combinazione di rollio e beccheggio. L'uso del vettore di gravità dell'accelerometro semplifica questo aspetto fornendo un vettore facilmente manipolato matematicamente per l'inclinazione del dispositivo. Un altro esempio è un'app che crea lo schiocco di una frusta quando l'utente scorre il dispositivo attraverso l'aria (vettore di accelerazione lineare).

Per un'implementazione di esempio, vedere esempio di accelerometro.

Sensore di attività

Il sensore Attività determina lo stato corrente del dispositivo collegato al sensore. Questo sensore viene spesso usato nelle applicazioni di fitness per monitorare quando un utente che trasporta un dispositivo sta correndo o camminando. Vedere ActivityType per un elenco delle possibili attività che possono essere rilevate da questa API del sensore.

Per un'implementazione a titolo esemplificativo, si veda esempio di sensore di attività.

Altimeter

Il sensore Altimetro restituisce un valore che indica l'altitudine del sensore. Ciò consente di tenere traccia di un cambiamento di altitudine in termini di metri dal livello del mare. Un esempio di app utilizzabile potrebbe essere un'app in esecuzione che tiene traccia dei cambiamenti di elevazione durante un'esecuzione per calcolare le calorie bruciate. In questo caso, tali dati del sensore possono essere combinati con il sensore Activity per fornire informazioni di rilevamento più accurate.

Per un'implementazione a titolo esemplificativo, vedere esempio di altimetro.

Barometer

Il sensore Barometro consente a un'applicazione di ottenere letture barometriche. Un'applicazione meteo potrebbe usare queste informazioni per fornire la pressione atmosferica corrente. Questo può essere usato per fornire informazioni più dettagliate e prevedere potenziali cambiamenti meteorologici.

Per un'implementazione a titolo esemplificativo, vedere esempio di barometro.

Compass

Il sensore Bussola restituisce una direzione 2D rispetto al nord magnetico in base al piano orizzontale della terra. Il sensore bussola non deve essere usato per determinare l'orientamento specifico del dispositivo o per rappresentare qualsiasi elemento nello spazio 3D. Le caratteristiche geografiche possono causare una diminuzione naturale nell'intestazione, quindi alcuni sistemi supportano sia HeadingMagneticNorth che HeadingTrueNorth. L'utente può pensare all'app di preferenza, ma dovrà ricordare che non tutti i sistemi segnalano un vero valore nord. I sensori giroscopio e magnetometro (un dispositivo che misura la grandezza della forza magnetica) combinano i dati per produrre la direzione della bussola, che ha l'effetto netto di stabilizzare i dati (la forza del campo magnetico è molto instabile a causa dei componenti del sistema elettrico).

Compass readings in regards to Magnetic North Pole

Le app che vogliono visualizzare una bussola rosa o navigare in una mappa usano in genere il sensore bussola.

Per un'implementazione a titolo esemplificativo, vedere esempio di compasso.

Gyrometer

Il sensore Giroscopio misura velocità angolari lungo gli assi X, Y e Z. Questi sono molto utili in semplici app basate sul movimento che non si preoccupano dell'orientamento del dispositivo, ma si preoccupano della sua rotazione a velocità diverse. I giroscopi possono soffrire di disturbo nei dati o di una distorsione costante lungo uno o più assi. È necessario eseguire una query sull'accelerometro per verificare se il dispositivo è in movimento per determinare se il giroscopio subisce una distorsione e quindi compensare di conseguenza nell'app.

Gyrometer with pitch, roll, and yaw

Un esempio di app che potrebbe usare il sensore giroscopio è un gioco in cui si gira una ruota da roulette in base a un rapido scatto rotazionale del dispositivo.

Per un'implementazione a titolo esemplificativo, vedere esempio di girometro.

Inclinometer

Il sensore Inclinometro specifica i valori di imbardata, beccheggio e rollio di un dispositivo e funziona meglio con le app che si preoccupano del modo in cui il dispositivo si trova nello spazio. Il beccheggio e il rollio si ottengono assumendo il vettore di gravità dell'accelerometro e integrando i dati dal giroscopio. L'imbardata viene stabilita dai dati di magnetometro e giroscopio (simile all'intestazione della bussola). Gli inclinometri offrono dati di orientamento avanzati in modo facilmente digeribile e comprensibile. Usare gli inclinometri quando è necessario l'orientamento del dispositivo, ma non è necessario modificare i dati del sensore.

Inclinometer with pitch, roll and yaw data

Le app che modificano la visualizzazione in modo che corrispondano all'orientamento del dispositivo possono usare il sensore inclinometro. Inoltre, un'app che visualizza un aereo che corrisponde all'imbardata, al beccheggio e al rollio del dispositivo userebbe anche le letture dell'inclinometro.

Per un'implementazione a titolo esemplificativo, si veda un esempio di inclinometro https://github.com/Microsoft/Windows-universal-samples/tree/main/Samples/Inclinometer.

Sensore luce

Il sensore Luce è in grado di determinare la luce ambientale che circonda il sensore. Ciò consente a un'app di determinare quando l'impostazione della luce che circonda un dispositivo è cambiata. Ad esempio, un utente con un dispositivo slate potrebbe camminare da interni a esterni in una giornata soleggiata. Un'applicazione intelligente può usare questo valore per aumentare il contrasto tra lo sfondo e il tipo di carattere di cui viene eseguito il rendering. Ciò renderebbe il contenuto ancora leggibile nell'ambiente più luminoso ed esterno.

Per un'implementazione a titolo esemplificativo, si veda esempio di sensore luce.

Sensore orientamento

L'orientamento del dispositivo viene espresso sia tramite quaternione che una matrice di rotazione. Il sensore Orientamento offre un elevato grado di precisione per determinare il modo in cui il dispositivo si trova nello spazio rispetto all'intestazione assoluta. I dati del sensore Orientamento derivano dall'accelerometro, dal giroscopio e dal magnetometro. Di conseguenza, sia l'inclinometro che i sensori bussola possono essere derivati dai valori quaternione. I quaternioni e le matrici di rotazione si prestano bene alla manipolazione matematica avanzata e vengono spesso usati nella programmazione grafica. Le app che usano manipolazioni complesse devono favorire il sensore di orientamento, poiché molte trasformazioni sono basate su quaternioni e matrici di rotazione.

Orientation sensor data

Il sensore di orientamento viene spesso usato nelle app avanzate di realtà aumentata che disegnano una sovrimpressione sull'ambiente circostante in base alla direzione in cui punta il dispositivo.

Per un'implementazione a titolo esemplificativo, si veda esempio di sensore orientamento.

Pedometro

Il sensore pedometro tiene traccia del numero di passaggi eseguiti dall'utente che porta con sé il dispositivo connesso. Il sensore è configurato per tenere traccia del numero di passi in un determinato periodo di tempo. Diverse applicazioni per il fitness tengono traccia del numero di passi effettuati per aiutare l'utente a stabilire e raggiungere vari obiettivi. Queste informazioni possono quindi essere raccolte e archiviate per mostrare lo stato di avanzamento nel tempo.

Per un'implementazione a titolo esemplificativo, vedere esempio di pedometro.

Sensore di prossimità

Il sensore Prossimità può essere usato per indicare se gli oggetti vengono rilevati dal sensore. Oltre a determinare se un oggetto è compreso nell'intervallo del dispositivo, il sensore di prossimità può anche determinare la distanza dell'oggetto rilevato. Un esempio in cui può essere usato è con un'applicazione che vuole emergere da uno stato di sospensione quando un utente rientra in un intervallo specificato. Il dispositivo potrebbe trovarsi in uno stato di sospensione a basso consumo fino a quando il sensore di prossimità non rileva un oggetto e quindi potrebbe entrare in uno stato più attivo.

Per un'implementazione a titolo esemplificativo, si veda esempio di sensore di prossimità.

Orientamento semplice

Il sensore Orientamento semplice rileva l'orientamento del quadrante corrente del dispositivo specificato oppure è rivolto verso l'alto o verso il basso. Dispone di sei possibili stati di SimpleOrientation (NotRotated, Rotated90, Rotated180, Rotated270, FaceUp, FaceDown).

Un'app di lettura che modifica la visualizzazione in base al dispositivo mantenuto in parallelo o perpendicolare al terreno userebbe i valori di SimpleOrientationSensor per determinare come viene mantenuto il dispositivo.

Per un'implementazione a titolo esemplificativo, si veda esempio di sensore orientamento semplice.