Sensores

Sensores mostram à sua aplicação a relação entre um dispositivo e o mundo físico à sua volta. Os sensores podem indicar à sua aplicação a direção, orientação e movimento do dispositivo. Estes sensores podem ajudar a tornar o seu jogo, aplicação de realidade aumentada ou aplicação utilitária mais útil e interativo, fornecendo uma forma única de input, como usar o movimento do dispositivo para organizar as personagens no ecrã ou simular estar num cockpit e usar o dispositivo como volante.

Como regra geral, decida desde o início se a sua aplicação dependerá exclusivamente de sensores ou se os sensores oferecerão apenas um mecanismo de controlo adicional. Por exemplo, um jogo de condução que utiliza um dispositivo como volante virtual pode ser controlado alternativamente através de uma interface gráfica no ecrã – desta forma, a aplicação funciona independentemente dos sensores disponíveis no sistema. Por outro lado, um labirinto de inclinação de mármore poderia ser programado para funcionar apenas em sistemas que tenham os sensores adequados. Tem de tomar a decisão estratégica de confiar totalmente nos sensores. Tenha em atenção que um esquema de controlo por rato/toque privilegia um maior controlo em detrimento da imersão.

Tópico Descrição
Calibrar sensores Sensores num dispositivo baseado no magnetómetro – a bússola, o inclinómetro e o sensor de orientação – podem necessitar de calibração devido a fatores ambientais. A enumeração MagnetometerAccuracy pode ajudar a determinar um curso de ação quando o seu dispositivo precisa de calibração.
Orientação do sensor Os dados dos sensores das classes OrientationSensor são definidos pelos seus eixos de referência. Estes eixos são definidos pela orientação horizontal do dispositivo e giram com o dispositivo à medida que o utilizador o roda.
Usa o acelerómetro Aprenda a usar o acelerómetro para responder ao movimento do utilizador.
Usa a bússola Aprenda a usar a bússola para determinar o rumo atual.
Usar o giroscópio Aprenda a usar o giroscópio para detetar alterações nos movimentos do utilizador.
Utilize o inclinómetro Aprenda a usar o inclinómetro para determinar a arfagem, rotação e guinada.
Use o sensor de luz Aprenda a usar o sensor de luz ambiente para detetar alterações na iluminação.
Utilizar o sensor de orientação Aprenda a usar os sensores de orientação para determinar a orientação do dispositivo.

Agrupamento em lote de sensores

Alguns sensores suportam o conceito de agrupamento. Isto varia consoante o sensor individual disponível. Quando um sensor implementa o batching, recolhe vários pontos de dados ao longo de um intervalo de tempo especificado e depois transfere todos esses dados de uma só vez. Isto é diferente do comportamento normal, em que um sensor reporta as suas descobertas assim que realiza uma leitura. Considere o diagrama seguinte que mostra como os dados são recolhidos e depois entregues, primeiro com entrega normal e depois com entrega em lote.

Recolha lote de sensores

A principal vantagem do agrupamento de sensores é prolongar a vida útil da bateria. Quando os dados não são enviados imediatamente, isso poupa energia ao processador e impede que os dados precisem de ser processados imediatamente. Partes do sistema podem dormir até serem necessárias, o que gera uma poupança significativa de energia.

Podes influenciar a frequência com que o sensor envia lotes ajustando a latência. Por exemplo, o sensor Accelerometer tem a propriedade ReportLatency. Quando esta propriedade é definida para uma aplicação, o sensor enviará dados após o tempo especificado. Pode controlar quanto dado é acumulado numa determinada latência definindo a propriedade ReportInterval .

Há algumas ressalvas a ter em conta relativamente à definição da latência. A primeira ressalva é que cada sensor tem um MaxBatchSize que pode suportar com base no próprio sensor. Este é o número de eventos que o sensor pode armazenar em cache antes de ser forçado a enviá-los. Se multiplicares o MaxBatchSize pelo ReportInterval, isso determina o valor máximo de ReportLatency . Se especificar um valor superior a este, será usada a latência máxima para que não perca dados. Além disso, várias aplicações podem definir cada uma uma latência desejada. Para satisfazer as necessidades de todas as aplicações, será utilizado o período de latência mais curto. Por causa destes factos, a latência que define na sua aplicação pode não corresponder à latência observada.

Se um sensor estiver a usar relatórios por lote, chamar o GetCurrentReading irá limpar o lote atual de dados e iniciar um novo período de latência.

Acelerômetro

O sensor 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. Note-se que os valores da força G incluem a aceleração devido à gravidade. Se o dispositivo tiver o SimpleOrientation de FaceUp numa tabela, então o acelerómetro leria -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. Note-se que o vetor gravitacional deve normalizar-se para 1 para um dispositivo estacionário.

Os diagramas seguintes ilustram:

  • V1 = Vetor 1 = Força devido à gravidade
  • V2 = Vetor 2 = eixo -Z do chassis do dispositivo (aponta para fora da parte traseira do ecrã)
  • Θi = Ângulo de inclinação (inclinação) = ângulo entre o eixo -Z do chassis do dispositivo e o vetor da gravidade

Acelerómetro Medição do acelerómetro

Aplicações que podem usar o sensor acelerómetro incluem um jogo em que uma bola de gude no ecrã rola na direção em que inclinas o dispositivo (vetor gravitacional). Este tipo de funcionalidade corresponde muito de perto à do Inclinómetro e também poderia ser obtida com esse sensor, recorrendo a uma combinação de arfagem e rolamento. O uso do vetor gravitacional do acelerómetro simplifica um pouco esta situação, fornecendo um vetor de inclinação do dispositivo facilmente manipulável matematicamente. Outro exemplo seria uma aplicação que emite o som do estalar de um chicote quando o utilizador agita rapidamente o dispositivo no ar (vetor de aceleração linear).

Para um exemplo de implementação, veja Use o acelerómetro.

Sensor de atividade

O sensor Activity determina o estado atual do dispositivo ligado ao sensor. Este sensor é frequentemente utilizado em aplicações de fitness para registar quando um utilizador que transporta um dispositivo está a correr ou a caminhar. Consulte ActivityType para uma lista de possíveis atividades que podem ser detetadas por esta API de sensores.

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

Altímetro

O sensor Altímetro devolve um valor que indica a altitude do sensor. Isto permite-lhe acompanhar uma variação de altitude em metros a partir do nível do mar. Um exemplo de aplicação que poderia usar isto seria uma aplicação de corrida que regista as variações de altitude durante a corrida para calcular as calorias queimadas. Neste caso, estes dados do sensor podem ser combinados com o sensor Atividade para fornecer informações de rastreio mais precisas.

Para um exemplo de implementação, consulte o exemplo do altímetro.

Barómetro

O sensor Barómetro permite a aplicação obter leituras barométricas. Uma aplicação meteorológica poderia usar esta informação para fornecer a pressão atmosférica atual. Isto poderia ser usado para fornecer informações mais detalhadas e prever potenciais alterações meteorológicas.

Para um exemplo de implementação, veja a amostra barómetro.

Bússola

O sensor Bússola devolve uma direção 2D em relação ao norte magnético com base no plano horizontal da Terra. O sensor bússola não deve ser usado para determinar a orientação específica do dispositivo nem para representar qualquer coisa no espaço 3D. As características geográficas podem causar declinação natural no rumo, por isso alguns sistemas suportam tanto o HeadingMagneticNorth como o HeadingTrueNorth. Pense em qual deles a sua aplicação prefere, mas lembre-se de que nem todos os sistemas indicarão um valor de norte verdadeiro. Os sensores giroscópio e magnetómetro (um dispositivo que mede a magnitude da força magnética) combinam os seus dados para produzir a direção da bússola, o 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).

Leituras da bússola em relação ao Polo Norte Magnético

As aplicações que pretendam apresentar uma rosa dos ventos ou navegar num mapa normalmente utilizam o sensor da bússola.

Para um exemplo de implementação, veja Use a bússola.

Girometro

O sensor Girometro mede velocidades angulares ao longo dos eixos X, Y e Z. Estes são muito úteis em aplicações simples baseadas em movimento, que não se preocupam com a orientação do dispositivo, mas sim com a rotação do dispositivo a velocidades diferentes. Os giroscópios podem sofrer de ruído nos dados ou de uma polarização constante ao longo de um ou mais eixos. Deve consultar o acelerómetro para verificar se o dispositivo está em movimento, de modo a determinar se o giroscópio sofre de polarização, e depois compensar em conformidade na sua aplicação.

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

Um exemplo de aplicação que pode usar o sensor do girometro é um jogo que faz girar uma roleta com base num movimento rápido e acionado do dispositivo.

Para um exemplo de implementação, veja Usar o giroscópio.

Inclinómetro

O sensor Inclinometer indica os valores de guinada, arfagem e rolamento de um dispositivo e funciona melhor com aplicações que dependem da forma como o dispositivo está orientado no espaço. A inclinação e o rolamento são derivados tomando o vetor de gravidade do acelerómetro e integrando os dados do giroscópio. O ângulo de guinada é determinado a partir dos dados do magnetómetro e do giroscópio (semelhante à direção indicada pela bússola). Os inclinómetros oferecem dados avançados de orientação de forma fácil e compreensível. Use inclinómetros quando precisar de orientação do dispositivo, mas não precisa de manipular os dados do sensor.

Inclinómetro com dados de inclinação, rolamento e guinada

As aplicações que alteram a sua visão para corresponder à orientação do dispositivo podem usar o sensor do inclinómetro. Além disso, uma aplicação que mostre um avião que corresponda à guinada, inclinação e rolamento do dispositivo também usaria as leituras do inclinómetro.

Para um exemplo de implementação, veja Usar o inclinómetro.

Sensor de luz

O sensor LightSensor é capaz de determinar a luz ambiente em redor do sensor. Isto permite que uma aplicação determine quando o nível de iluminação em redor de um dispositivo se alterou. Por exemplo, um utilizador com um tablet pode passar de um espaço interior para o exterior num dia soalheiro. Uma aplicação inteligente poderia usar este valor para aumentar o contraste entre o fundo e a fonte que está a ser renderizada. Isso tornaria o conteúdo ainda legível num ambiente exterior mais luminoso.

Para um exemplo de implementação, veja Usar o sensor de luz.

Sensor de orientação

A orientação do dispositivo é expressa tanto por quatérnio como por uma matriz de rotação. O OrientationSensor oferece um elevado grau de precisão na determinação de como o dispositivo está situado no espaço em relação à direção absoluta. Os dados do OrientationSensor são derivados do acelerómetro, giroscópio e magnetómetro. Assim, tanto os sensores do inclinómetro como os da bússola podem ser derivados dos valores dos quaterniões. Quaternions e matrizes de rotação prestam-se bem à manipulação matemática avançada e são frequentemente usados em programação gráfica. Aplicações que usam manipulação complexa devem favorecer o sensor de orientação, pois muitas transformações são baseadas em quaternions e matrizes de rotação.

Dados do sensor de orientação

O sensor de orientação é frequentemente usado em aplicações avançadas de realidade aumentada que pintam uma sobreposição ao seu redor com base na direção para onde a parte traseira do dispositivo aponta.

Para um exemplo de implementação, veja Usar o sensor de orientação.

Pedómetro

O sensor Pedómetro regista o número de passos dados pelo utilizador que transporta o dispositivo ligado. O sensor está configurado para acompanhar o número de passos ao longo de um determinado período de tempo. Várias aplicações de fitness gostam de registar o número de passos dados para ajudar o utilizador a definir e alcançar vários objetivos. Esta informação pode depois ser recolhida e armazenada para mostrar o progresso ao longo do tempo.

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

Sensor de proximidade

O sensor Proximidade pode ser usado para indicar se os objetos são ou não detetados pelo sensor. Para 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 ao objeto detetado. Um exemplo em que isto pode ser usado é com uma aplicação que quer sair de um estado de sono quando um utilizador se aproxima de um intervalo especificado. O dispositivo pode estar num estado de suspensão de baixa potência até que o sensor de proximidade detete um objeto, e depois pode entrar num estado mais ativo.

Para um exemplo de implementação, veja a amostra sensor de proximidade.

Orientação simples

O SimpleOrientationSensor deteta a orientação atual do quadrante do dispositivo especificado ou se está virado para cima ou virado para baixo. Tem seis possíveis estados SimpleOrientation possíveis (NotRotated, Rotated90, Rotated180, Rotated270, FaceUp, FaceDown).

Uma aplicação leitora que altere o seu ecrã consoante o dispositivo ser mantido paralelo ou perpendicular ao solo usaria os valores do SimpleOrientationSensor para determinar como o dispositivo está a ser mantido.

Para um exemplo de implementação, consulte o exemplo simples do sensor de orientação.