Sensores

Os sensores informam ao seu aplicativo 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 caracteres na tela ou simular estar em um cockpit e usar o dispositivo como o volante.

Como regra geral, decida desde o início se seu aplicativo dependerá exclusivamente dos sensores ou se os sensores oferecerão apenas um mecanismo de controle adicional. Por exemplo, um jogo de condução usando um dispositivo como um volante virtual poderia, como alternativa, 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 têm os sensores apropriados. Você deve tomar a decisão estratégica de se vai confiar totalmente nos sensores. Observe que um esquema de controle de mouse/toque troca a imersão por um maior controle.

Tópico Descrição
Calibrar sensores Sensores em um dispositivo com base no magnetômetro – a bússola, o inclinômetro e o sensor de orientação – podem se tornar necessários de calibragem devido a fatores ambientais. A enumeração MagnetometerAccuracy pode ajudar a determinar um curso de ação quando o dispositivo precisa de calibragem.
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 horizontal do dispositivo e giram com o dispositivo conforme o usuário o gira.
Usar o acelerômetro Saiba como usar o acelerômetro para responder à movimentação do usuário.
Usar a bússola Saiba como usar a bússola para determinar a direção atual.
Use o giroscópio Saiba como usar o gyrometer para detectar alterações na movimentação do usuário.
Usar o inclinômetro Saiba como usar o inclinômetro para determinar o pitch, roll e yaw.
Usar o sensor de luz Saiba como usar o sensor de luz ambiente para detectar alterações na iluminação.
Usar 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 dão suporte ao conceito de envio em lote. Isso variará dependendo do 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 ao mesmo tempo. Isso é diferente do comportamento normal em que um sensor relata suas descobertas assim que executa uma leitura. Considere o diagrama a seguir que mostra como os dados são coletados e, em seguida, entregues, primeiro com entrega normal e, em seguida, com entrega em lote.

Coleta de lote de sensores

A principal vantagem para o envio em lote do sensor é prolongar a duração da bateria. Quando os dados não são enviados imediatamente, isso economiza na energia do processador e impede 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 Accelerometer tem a propriedade ReportLatency. Quando essa propriedade for definida para um aplicativo, o sensor enviará dados após a quantidade de tempo especificada. Você pode controlar a quantidade de dados acumulados em uma determinada latência definindo a propriedade ReportInterval .

Há algumas ressalvas para ter em mente em relação à definição da latência. A primeira ressalva é que cada sensor tem um MaxBatchSize que pode suportar, dependendo do 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 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, o período de latência mais curto será usado. 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 Accelerometer mede valores de força G ao longo dos eixos X, Y e Z do dispositivo e é ótimo para aplicativos simples baseados em movimento. Observe que os valores de 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. Portanto, os acelerômetros não medem necessariamente apenas a aceleração de coordenadas – a taxa de alteração de 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 traseira da tela)
  • Θi = Ângulo de inclinação (inclinação) = ângulo entre o eixo –Z do chassi do dispositivo e o vetor de gravidade

Acelerômetro Medição do acelerômetro

Os aplicativos que podem usar o sensor de acelerômetro incluem um jogo em que uma bolinha na tela rola na direção em que você inclina o dispositivo (vetor gravitacional). Esse tipo de funcionalidade reflete de perto a do Inclinometer e também pode ser obtido com esse sensor usando uma combinação de inclinação e rolagem. O uso do vetor de gravidade do acelerômetro simplifica isso um pouco fornecendo um vetor facilmente manipulado matematicamente para inclinação do dispositivo. Outro exemplo seria o de um aplicativo que reproduz o estalo de um chicote quando o usuário movimenta rapidamente o dispositivo no ar (vetor de aceleração linear).

Para obter uma implementação de exemplo, consulte Usar o acelerômetro.

Sensor de atividade

O sensor Activity determina o status atual do dispositivo anexado ao sensor. Esse sensor é frequentemente usado em aplicativos de fitness para monitorar quando um usuário com um dispositivo está correndo ou caminhando. Consulte ActivityType para obter uma lista de possíveis atividades que podem ser detectadas por essa API do sensor.

Para obter uma implementação de exemplo, consulte o exemplo de sensor de atividade.

Altímetro

O sensor Altimeter 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 em execução que acompanha as alterações de elevação durante uma execução para calcular as calorias queimadas. Nesse caso, esses dados do sensor podem ser combinados com o sensor Activity para fornecer informações de acompanhamento mais precisas.

Para obter uma implementação de exemplo, consulte o exemplo altimeter.

Barómetro

O sensor Barometer permite que um aplicativo obtenha leituras barométricas. Um aplicativo meteorológico poderia 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 uma implementação de exemplo, consulte o exemplo barômetro.

Compass

O sensor Compass fornece uma direção 2D em relação ao norte magnético, com base no plano horizontal da Terra. O sensor de 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. Características geográficas podem causar declinação natural na direção, portanto, alguns sistemas oferecem suporte a HeadingMagneticNorth e HeadingTrueNorth. Pense em qual dos dois seu aplicativo prefere, mas lembre-se de que nem todos os sistemas informarão um valor de norte verdadeiro. Os sensores de giroscópio e magnetômetro (um dispositivo que mede a magnitude da força magnética) combinam seus dados para determinar o rumo da bússola, o que tem como efeito geral estabilizar os dados (a intensidade do campo magnético é muito instável devido aos componentes do sistema elétrico).

Leituras de bússola em relação ao Pólo Norte Magnético

Aplicativos que desejam exibir uma bússola rosa ou navegar em um mapa normalmente usariam o sensor de bússola.

Para obter uma implementação de exemplo, consulte Usar a bússola.

Girômetro

O sensor Gyrometer mede 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 girometers podem sofrer de ruído nos dados ou de 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 gyrometer sofre de um viés e, em seguida, compensar adequadamente em seu aplicativo.

Giroscópio com inclinação, rotação e guinada

Um exemplo de um aplicativo que pode usar o sensor de giroscópio é um jogo que gira uma roleta com base em um empurrão rotacional rápido do dispositivo.

Para obter uma implementação de exemplo, consulte Usar o gyrometer.

Inclinômetro

O sensor Inclinometer indica os valores de guinada, arfagem e rolagem de um dispositivo e funciona melhor com aplicativos que dependem de como o dispositivo está orientado no espaço. O pitch e o roll são obtidos a partir do vetor de gravidade do acelerômetro e da integração dos dados do giroscópio. A guinada é determinada com base em dados do magnetômetro e do giroscópio (semelhante à direção da bússola). Os inclinômetros oferecem dados de orientação avançada de maneira facilmente digestível e compreensível. Use inclinômetros quando precisar da orientação do dispositivo, mas não precisar manipular os dados do sensor.

Inclinômetro com dados de inclinação, rolagem e guinada

Os aplicativos que alteram sua exibição para corresponder à orientação do dispositivo podem usar o sensor de inclinômetro. Além disso, um aplicativo que exibe um avião que acompanha a guinada, a arfagem e a rolagem do dispositivo também usaria os dados do inclinômetro.

Para obter uma implementação de exemplo, consulte Usar o inclinômetro.

Sensor de luz

O sensor LightSensor é capaz de determinar a luz ambiente ao redor do sensor. Isso permite que um aplicativo determine quando a configuração de luz em torno de um dispositivo foi alterada. Por exemplo, um usuário com um tablet pode sair de um ambiente interno para um externo em um dia ensolarado. Um aplicativo inteligente pode usar esse valor para aumentar o contraste entre a tela de fundo e a fonte que está sendo renderizada. Isso tornaria o conteúdo ainda legível na configuração mais brilhante e ao ar livre.

Para obter uma implementação de exemplo, consulte Usar o sensor de luz.

Sensor de orientação

A orientação do dispositivo é expressa por meio de quatérnio e de uma matriz de rotação. O OrientationSensor oferece um alto grau de precisão para determinar como o dispositivo está orientado no espaço em relação à direção absoluta. Os dados do OrientationSensor são derivados do acelerômetro, do gyrometer e do magnetômetro. Dessa forma, os sensores de inclinação e bússola podem ser derivados dos valores de quatérnio. Quatérnios e matrizes de rotação se prestam bem à manipulação matemática avançada e geralmente são usados na 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.

Dados do sensor de orientação

O sensor de orientação geralmente é usado em aplicativos avançados de realidade aumentada que pintam uma sobreposição em seu entorno com base na direção que a parte de trás do dispositivo está apontando.

Para obter uma implementação de exemplo, consulte Usar o sensor de orientação.

Pedômetro

O sensor Pedometer controla o número de etapas executadas pelo usuário que carrega o dispositivo conectado. O sensor é configurado para acompanhar o número de etapas durante um determinado período de tempo. Vários aplicativos de fitness gostam de acompanhar o número de etapas executadas para ajudar o usuário a definir e atingir várias metas. Essas informações podem ser coletadas e armazenadas para mostrar o progresso ao longo do tempo.

Para obter uma implementação de exemplo, consulte o exemplo pedometer.

Sensor de proximidade

O sensor Proximity pode ser usado para indicar se os objetos são detectados ou não pelo sensor. Além de determinar se um objeto está ou não dentro do intervalo do dispositivo, o sensor de proximidade também pode determinar a distância até o objeto detectado. Um exemplo de uso disso é o de um aplicativo que precisa sair do modo de suspensão quando um usuário entra em um raio 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 uma implementação de exemplo, consulte o exemplo de sensor de proximidade.

Orientação simples

O SimpleOrientationSensor detecta a orientação de quadrante atual do dispositivo especificado ou se ele está com a face para cima ou para baixo. Ele tem seis estados possíveis SimpleOrientation (NotRotated, Rotated90, Rotated180, Rotated270, FaceUp, FaceDown).

Um aplicativo de 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 uma implementação de exemplo, consulte o exemplo de sensor de orientação simple.