Sensores
Os sensores permitem que seu aplicativo saiba a relação entre um dispositivo e o mundo físico ao seu redor. Os sensores podem informar ao seu aplicativo a direção, a orientação e o movimento do dispositivo. Esses sensores podem ajudar a tornar seu jogo, aplicativo de realidade aumentada ou aplicativo utilitário mais útil e interativo, fornecendo uma forma exclusiva de entrada, como usar o movimento do dispositivo para organizar os personagens na tela ou simular estar em um cockpit e usar o dispositivo como volante.
Como regra geral, decida desde o início se seu aplicativo dependerá exclusivamente de sensores ou se os sensores oferecerão apenas um mecanismo de controle adicional. Por exemplo, um jogo de direção usando um dispositivo como volante virtual pode, alternativamente, ser controlado por meio de uma GUI na tela – dessa forma, o aplicativo funciona independentemente dos sensores disponíveis no sistema. Por outro lado, um labirinto de inclinação de mármore pode ser codificado para funcionar apenas em sistemas que tenham os sensores apropriados. Você deve fazer a escolha estratégica de confiar totalmente nos sensores. Observe que um esquema de controle de mouse/toque troca a imersão por maior controle.
Tópico | Descrição |
---|---|
Calibrar sensores | Os sensores em um dispositivo baseado no magnetômetro - a bússola, o inclinômetro e o sensor de orientação - podem precisar de calibração devido a fatores ambientais. A enumeração MagnetometerAccuracy pode ajudar a determinar um curso de ação quando seu dispositivo precisa de calibração. |
Orientação do sensor | Os dados do sensor das classes OrientationSensor são definidos por seus eixos de referência. Esses eixos são definidos pela orientação paisagem do dispositivo e giram com o dispositivo à medida que o usuário o gira. |
Use o acelerômetro | Saiba como usar o acelerômetro para responder ao movimento do usuário. |
Use a bússola | Aprenda a usar a bússola para determinar o rumo atual. |
Use o giroscópio | Saiba como usar o giroscópio para detectar alterações no movimento do usuário. |
Use o inclinômetro | Aprenda a usar o inclinômetro para determinar a inclinação, rotação e guinada. |
Use o sensor de luz | Saiba como usar o sensor de luz ambiente para detectar mudanças na iluminação. |
Use o sensor de orientação | Saiba como usar os sensores de orientação para determinar a orientação do dispositivo. |
Envio em lote do sensor
Alguns sensores suportam o conceito de lotes. Isso varia de acordo com o sensor individual disponível. Quando um sensor implementa o envio em lote, ele coleta vários pontos de dados em um intervalo de tempo especificado e, em seguida, transfere todos esses dados de uma só vez. Isso é diferente do comportamento normal, em que um sensor relata suas descobertas assim que realiza uma leitura. Considere o diagrama a seguir, que mostra como os dados são coletados e entregues, primeiro com a entrega normal e, em seguida, com a entrega em lote.
A principal vantagem do lote de sensores é prolongar a vida útil da bateria. Quando os dados não são enviados imediatamente, isso economiza energia do processador e evita que os dados precisem ser processados imediatamente. Partes do sistema podem dormir até que sejam necessárias, o que gera uma economia significativa de energia.
Você pode influenciar a frequência com que o sensor envia lotes ajustando a latência. Por exemplo, o sensor Acelerômetro tem a propriedade ReportLatency. Quando essa propriedade é definida para um aplicativo, o sensor enviará dados após o período de tempo especificado. Você pode controlar a quantidade de dados acumulados em uma determinada latência definindo a propriedade ReportInterval.
Há algumas ressalvas a serem lembradas em relação à configuração da latência. A primeira ressalva é que cada sensor tem um MaxBatchSize que pode ser compatível com base no próprio sensor. Esse é o número de eventos que o sensor pode armazenar em cache antes de ser forçado a enviá-los. Se você multiplicar MaxBatchSize por ReportInterval, isso determinará o valor máximo de ReportLatency. Se você especificar um valor maior do que esse, a latência máxima será usada para que você não perca dados. Além disso, vários aplicativos podem definir uma latência desejada. Para atender às necessidades de todos os aplicativos, será utilizado o menor período de latência. Devido a esses fatos, a latência definida em seu aplicativo pode não corresponder à latência observada.
Se um sensor estiver usando relatórios em lote, chamar GetCurrentReading limpará o lote atual de dados e iniciará um novo período de latência.
Acelerômetro
O sensor do acelerômetro mede os valores da força G ao longo dos eixos X, Y e Z do dispositivo e é ótimo para aplicações simples baseadas em movimento. Observe que os valores da força G incluem aceleração devido à gravidade. Se o dispositivo tiver o SimpleOrientation de FaceUp em uma tabela, o acelerômetro lerá -1 G no eixo Z. Assim, os acelerômetros não medem necessariamente apenas a aceleração coordenada – a taxa de variação da velocidade. Ao usar um acelerômetro, certifique-se de diferenciar entre o vetor gravitacional da gravidade e o vetor de aceleração linear do movimento. Observe que o vetor gravitacional deve normalizar para 1 para um dispositivo estacionário.
Os diagramas a seguir ilustram:
- V1 = Vetor 1 = Força devido à gravidade
- V2 = Vetor 2 = -Eixo Z do chassi do dispositivo (aponta para fora da parte de trás da tela)
- Θi = Ângulo de inclinação (inclinação) = ângulo entre o eixo –Z do chassi do dispositivo e o vetor de gravidade
Os aplicativos que podem usar o sensor do acelerômetro incluem um jogo em que uma bola de gude na tela rola na direção em que você inclina o dispositivo (vetor gravitacional). Esse tipo de funcionalidade reflete de perto o do Inclinômetro e também pode ser feito com esse sensor usando uma combinação de inclinação e rotação. O uso do vetor de gravidade do acelerômetro simplifica isso um pouco, fornecendo um vetor facilmente manipulado matematicamente para a inclinação do dispositivo. Outro exemplo seria um aplicativo que faz o som de estalo de um chicote quando o usuário move o dispositivo pelo ar (vetor de aceleração linear).
Para obter um exemplo de implementação, consulte o exemplo de acelerômetro.
Sensor de atividade
O sensor de atividade determina o status atual do dispositivo conectado ao sensor. Esse sensor é frequentemente usado em aplicativos de condicionamento físico para rastrear quando um usuário carregando um dispositivo está correndo ou caminhando. Consulte ActivityType para obter uma lista de possíveis atividades que podem ser detectadas por essa API de sensor.
Para obter um exemplo de implementação, consulte o exemplo do sensor de atividade.
Altímetro
O sensor Altímetro retorna um valor que indica a altitude do sensor. Isso permite que você acompanhe uma mudança na altitude em termos de metros do nível do mar. Um exemplo de um aplicativo que pode usar isso seria um aplicativo de corrida que acompanha as mudanças de elevação durante uma corrida para calcular as calorias queimadas. Nesse caso, esses dados do sensor podem ser combinados com o sensor de atividade para fornecer informações de rastreamento mais precisas.
Para obter um exemplo de implementação, consulte o exemplo de altímetro.
Barometer
O sensor Barômetro permite que um aplicativo obtenha leituras barométricas. Um aplicativo meteorológico pode usar essas informações para fornecer a pressão atmosférica atual. Isso pode ser usado para fornecer informações mais detalhadas e prever possíveis mudanças climáticas.
Para obter um exemplo de implementação, consulte o exemplo de barômetro.
Bússola
O sensor da bússola retorna um rumo 2D em relação ao norte magnético com base no plano horizontal da Terra. O sensor da bússola não deve ser usado para determinar a orientação específica do dispositivo ou para representar qualquer coisa no espaço 3D. Os recursos geográficos podem causar declinação natural no título, portanto, alguns sistemas dão suporte a HeadingMagneticNorth e HeadingTrueNorth. Pense em qual deles seu aplicativo prefere, mas lembre-se de que nem todos os sistemas relatarão um valor norte verdadeiro. Os sensores do giroscópio e do magnetômetro (um dispositivo que mede a magnitude da força magnética) combinam seus dados para produzir o rumo da bússola, que tem o efeito líquido de estabilizar os dados (a intensidade do campo magnético é muito instável devido aos componentes do sistema elétrico).
Os aplicativos que desejam exibir uma rosa dos ventos ou navegar em um mapa normalmente usam o sensor de bússola.
Para obter um exemplo de implementação, consulte o exemplo de bússola.
Gyrometer
O sensor Gyrometer mede as velocidades angulares ao longo dos eixos X, Y e Z. Eles são muito úteis em aplicativos simples baseados em movimento que não se preocupam com a orientação do dispositivo, mas se preocupam com o dispositivo girando em velocidades diferentes. Os giroscópios podem sofrer com ruído nos dados ou um viés constante ao longo de um ou mais dos eixos. Você deve consultar o acelerômetro para verificar se o dispositivo está se movendo para determinar se o giroscópio sofre de um viés e, em seguida, compensar adequadamente em seu aplicativo.
Um exemplo de aplicativo que pode usar o sensor giroscópio é um jogo que gira uma roleta com base em um rápido movimento rotacional do dispositivo.
Para obter um exemplo de implementação, consulte o exemplo de giroscópio.
Inclinometer
O sensor Inclinômetro especifica os valores de guinada, inclinação e rotação de um dispositivo e funciona melhor com aplicativos que se preocupam com a forma como o dispositivo está situado no espaço. A inclinação e a rotação são derivadas tomando o vetor de gravidade do acelerômetro e integrando os dados do giroscópio. A guinada é estabelecida a partir de dados de magnetômetro e giroscópio (semelhante ao rumo da bússola). Os inclinômetros oferecem dados avançados de orientação de maneira facilmente digerível e compreensível. Use inclinômetros quando precisar de orientação do dispositivo, mas não precisar manipular os dados do sensor.
Os aplicativos que alteram sua exibição para corresponder à orientação do dispositivo podem usar o sensor do inclinômetro. Além disso, um aplicativo que exibe um avião que corresponde à guinada, inclinação e rotação do dispositivo também usaria as leituras do inclinômetro.
Para obter um exemplo de implementação, consulte o exemplo https://github.com/Microsoft/Windows-universal-samples/tree/main/Samples/Inclinometerde inclinômetro.
Sensor de luz
O sensor de luz é capaz de determinar a luz ambiente ao redor do sensor. Isso permite que um aplicativo determine quando a configuração de luz ao redor de um dispositivo foi alterada. Por exemplo, um usuário com um dispositivo slate pode caminhar de dentro para fora em um dia ensolarado. Um aplicativo inteligente pode usar esse valor para aumentar o contraste entre o plano de fundo e a fonte que está sendo renderizada. Isso tornaria o conteúdo ainda legível no ambiente mais claro e ao ar livre.
Para obter um exemplo de implementação, consulte o exemplo de sensor de luz.
Sensor de orientação
A orientação do dispositivo é expressa por meio de quatérnion e uma matriz de rotação. O OrientationSensor oferece um alto grau de precisão na determinação de como o dispositivo está situado no espaço em relação ao rumo absoluto. Os dados do OrientationSensor são derivados do acelerômetro, giroscópio e magnetômetro. Como tal, tanto o inclinômetro quanto os sensores da bússola podem ser derivados dos valores do quatérnio. Quatérnios e matrizes de rotação se prestam bem à manipulação matemática avançada e são frequentemente usados em programação gráfica. Os aplicativos que usam manipulação complexa devem favorecer o sensor de orientação, pois muitas transformações são baseadas em quatérnios e matrizes de rotação.
O sensor de orientação é frequentemente usado em aplicativos avançados de realidade aumentada que pintam uma sobreposição ao seu redor com base na direção para a qual a parte traseira do dispositivo está apontando.
Para obter um exemplo de implementação, consulte o exemplo de sensor de orientação.
Pedômetro
O sensor do pedômetro acompanha o número de passos dados pelo usuário que carrega o dispositivo conectado. O sensor é configurado para acompanhar o número de etapas em um determinado período de tempo. Vários aplicativos de fitness gostam de acompanhar o número de passos dados para ajudar o usuário a definir e atingir vários objetivos. Essas informações podem ser coletadas e armazenadas para mostrar o progresso ao longo do tempo.
Para obter um exemplo de implementação, consulte o exemplo de pedômetro.
Sensor de proximidade
O sensor de proximidade pode ser usado para indicar se objetos são ou não detectados pelo sensor. Além de determinar se um objeto está ou não dentro do alcance do dispositivo, o sensor de proximidade também pode determinar a distância até o objeto detectado. Um exemplo em que isso pode ser usado é com um aplicativo que deseja sair de um estado de suspensão quando um usuário entra em um intervalo especificado. O dispositivo pode estar em um estado de suspensão de baixa potência até que o sensor de proximidade detecte um objeto e, em seguida, pode entrar em um estado mais ativo.
Para obter um exemplo de implementação, consulte o exemplo de sensor de proximidade.
Orientação simples
O SimpleOrientationSensor detecta a orientação do quadrante atual do dispositivo especificado ou está voltado para cima ou para baixo. Ele tem seis estados SimpleOrientation possíveis (NotRotated, Rotated90, Rotated180, Rotated270, FaceUp, FaceDown).
Um aplicativo leitor que altera sua exibição com base no dispositivo que está sendo mantido paralelo ou perpendicular ao solo usaria os valores do SimpleOrientationSensor para determinar como o dispositivo está sendo mantido.
Para obter um exemplo de implementação, consulte o exemplo de sensor de orientação simples.