SL.pro
Blog · · 9 minutos de leitura

Como funcionam os aplicativos de nível: o acelerômetro do celular explicado

Seu celular sabe para que lado é para baixo porque tem um sensor minúsculo chamado acelerômetro MEMS. Esse sensor mede como a gravidade puxa o celular em três direções ao mesmo tempo. Um aplicativo de nível lê esses três números, faz uma conta de trigonometria e mostra o ângulo para você. Ele repete isso centenas de vezes por segundo, dentro de um chip que você mal conseguiria enxergar a olho nu. Este artigo explica o que acontece de verdade.

Principais pontos
  • O acelerômetro mede como a gravidade se distribui entre três eixos. Ele não mede movimento quando o celular está parado.
  • A inclinação para frente e para os lados vem de fórmulas de arco tangente aplicadas a essas três leituras de gravidade.
  • O Spirit Level Pro passa as leituras brutas por uma média móvel exponencial (alpha=0,15) para a bolha parar de tremer.
  • Sensores MEMS variam com a temperatura, então calibre onde você vai trabalhar.
  • Para um celular parado apoiado numa superfície, o acelerômetro faz o serviço todo. Você não precisa do giroscópio.
Close-up macro photo of a Kionix MEMS tri-axis accelerometer chip from a mobile device
O chip do acelerômetro MEMS dentro do seu celular é menor que um grão de arroz, mas mede a gravidade com precisão.

O que é um acelerômetro MEMS?

MEMS quer dizer Sistemas Microeletromecânicos. O elemento sensor dentro do acelerômetro de um celular é minúsculo, uns poucos centenas de micrômetros de largura, menor que um grão de sal. Ele fica no mesmo silício que a eletrônica comum de um chip e é fabricado do mesmo jeito. É por isso que esses sensores são baratos e acabam em quase todo celular.

O mecanismo é simples depois que você imagina a cena. Uma massa minúscula fica pendurada em molas de silício gravadas no chip. Quando você inclina o chip, a gravidade puxa a massa um pouco para fora do centro. Esse movimento muda a distância entre uns dedos de metal em forma de pente, e mudar essa distância muda a capacitância entre eles. O chip lê essa variação e a transforma em um número de aceleração, medido em g.

Aqui está a parte que torna um nível possível. Quando o celular está parado, o acelerômetro não está lendo movimento. Ele está lendo quanto da gravidade puxa em cada um dos seus três eixos. A gravidade é uma força fixa e conhecida. Uma vez que você sabe como ela se reparte entre os três eixos, dá para descobrir exatamente como o celular está inclinado.

Como um acelerômetro de 3 eixos mede a inclinação?

Um acelerômetro de três eixos dá ao celular o seu próprio conjunto de direções: X vai da esquerda para a direita, Y vai de cima para baixo e Z vai da frente para trás. Deite o celular numa mesa e a gravidade puxa quase toda no eixo Z, então Z marca uns 9,81 m/s² e X e Y ficam perto de zero. Incline o celular e a gravidade se desloca: menos em Z, mais em X e Y, na proporção do ângulo.

Transformar essas três leituras em ângulos é trigonometria básica. A inclinação para frente e para trás é o pitch, a inclinação para os lados é o roll, e as duas saem de um arco tangente:

Pitch = arctan( Y / sqrt(X² + Z²) ) Roll = arctan( X / sqrt(Y² + Z²) )

Essas duas linhas são todo o núcleo matemático de um aplicativo de nível. Coloque os três valores brutos, faça a conta e você tem pitch e roll em radianos. Multiplique por 180/π para virar graus. Esse é o número na sua tela.

Você pode se perguntar por que o denominador usa a raiz quadrada dos outros dois eixos, e não só um. É para manter a leitura estável ao longo de uma volta inteira. Se você divide por um único eixo, a conta quebra perto da vertical, porque esse eixo cai a zero e você acaba dividindo por quase nada. Usar a magnitude combinada dos outros dois eixos evita isso.

Freescale Semiconductor 3-axis MEMS accelerometer breakout board on white background
Um acelerômetro de 3 eixos mede a força da gravidade nos eixos X, Y e Z ao mesmo tempo.
Veja a física funcionando em tempo real

O Spirit Level Pro mostra os ângulos de pitch e roll ao vivo, com suavização EMA, cinco níveis de tolerância e calibração com um toque. Sem precisar baixar nada.

Experimente o Spirit Level Pro grátis

Por que os dados brutos do sensor são tão instáveis?

A saída bruta do acelerômetro pula mais do que você imaginaria. Mesmo um celular totalmente parado mostra pequenas oscilações nas leituras. Parte disso é ruído elétrico do próprio sensor, parte é vibração que chega pela superfície e parte é erro de arredondamento quando o sinal analógico vira número. Mostre esse fluxo bruto na tela e a bolha treme sem parar, o que não serve para trabalho cuidadoso.

O ruído vem de algumas fontes. O ruído térmico é uma flutuação elétrica aleatória causada pelo calor. Você não consegue eliminá-lo, e ele define o mínimo de quão silencioso o sensor pode chegar a ser. O ruído de vibração vem do mundo à sua volta: o compressor de uma geladeira, passos, o trânsito lá fora. E o ponto zero do sensor deriva devagar por conta própria com o tempo. Cada um pede uma solução diferente.

A correção de software mais comum é um filtro passa-baixa. Ele deixa passar as mudanças lentas, como uma inclinação real, e segura as rápidas, como a vibração. A forma usual de fazer isso é uma média móvel exponencial, ou EMA. Cada leitura nova conta com um peso, o alpha, e o resto vem do último valor filtrado:

filtrado = alpha × leitura_nova + (1 - alpha) × filtrado_anterior

O Spirit Level Pro usa uma EMA com alpha=0,15. Chegamos a esse número testando vários valores na mão. Com alpha=0,05 a leitura ficava lisa como vidro, mas lenta, e a bolha atrasava em relação ao celular quando você o movia. Com alpha=0,3 ela acompanhava bem, mas tremia o suficiente para dificultar uma leitura precisa. Alpha=0,15 fica no meio-termo. A bolha parece viva sem parecer nervosa.

O que se troca por o quê: Um alpha maior faz a tela seguir a inclinação real mais depressa, mas também deixa passar mais vibração. Um alpha menor suaviza com mais força, porém adiciona atraso. Alpha=0,15 equilibra os dois e se estabiliza em cerca de 150 ms.

Qual é o papel do giroscópio?

O giroscópio mede a velocidade com que o celular está girando, em graus por segundo. Ele não mede para que lado o celular aponta. Essa diferença importa. Sozinho, o giroscópio não sabe dizer se o celular está nivelado. Ele só sabe se está girando e com que rapidez. Para uma leitura de nível com o celular parado, o acelerômetro já tem o que você precisa.

O giroscópio ganha seu lugar quando o celular está em movimento, pela fusão de sensores. Acelerômetros leem bem a inclinação parada, mas ficam lentos e ruidosos durante movimento rápido. Giroscópios acompanham bem a rotação rápida, mas derivam, porque seus pequenos erros se acumulam com o tempo. Um filtro complementar ou de Kalman mistura os dois: o giroscópio cuida do movimento rápido e o acelerômetro puxa a leitura de longo prazo de volta ao certo.

A maioria dos aplicativos de nível, o Spirit Level Pro inclusive, dispensa a fusão de sensores porque o trabalho é estático. Você apoia o celular, ele se acomoda, você lê o ângulo. O acelerômetro dá conta disso sozinho. A fusão de sensores importa mais quando algo está em voo, como um drone acompanhando o próprio movimento, do que quando você está conferindo uma prateleira.

Por que a calibração importa tanto?

Todo sensor MEMS sai de fábrica com um pequeno desvio embutido. É um viés definido na fabricação, e ele é o mesmo em toda leitura: uma quantidade fixa, numa direção fixa. Por isso o chip pode marcar um grau ou dois errado mesmo com o celular realmente plano. Esse é o maior motivo isolado de um aplicativo de nível parecer errado assim que você o abre.

A calibração resolve medindo esse desvio numa superfície em que você confia que está plana e guardando o valor. O Spirit Level Pro salva os valores no localStorage nas chaves calibrationPitch e calibrationRoll. Daí em diante, toda leitura subtrai esses números guardados antes de chegar à tela. O desvio some.

A diferença é grande. Pule a calibração e um celular com viés de 1,5° lê 1,5° errado em tudo. Ele pode mostrar 0,0° estando numa inclinação real de 1,5°. Calibre o mesmo celular e o erro cai para algumas décimas de grau. Esse é o maior ganho de precisão que você consegue de uma vez só, e não custa nada além de alguns segundos.

Como a temperatura afeta a precisão?

Sensores MEMS reagem à temperatura. As molas de silício que seguram a massa se dilatam e se contraem conforme o chip esquenta e esfria, o que desloca o ponto zero. Então leve o celular de um carro quente para uma garagem fria e a leitura deriva um pouco antes de o sensor se acomodar na nova temperatura. Não é um deslocamento enorme, mas é real.

A lição prática é simples: calibre na temperatura em que você vai trabalhar. Uma calibração feita num escritório quente não se sustenta por completo numa garagem fria. Você não precisa se preocupar com isso em todo trabalho. Para pendurar quadros ou conferir uma prateleira, a deriva é pequena demais para notar. Para trabalho apertado, dentro de algumas décimas de grau, dê ao celular um ou dois minutos para se acomodar depois de uma grande mudança de temperatura e então calibre.

Spirit level mounted on a camera showing how angular measurement works
Vários sensores trabalham juntos para determinar a orientação de um dispositivo em três dimensões.

iPhone x Android: o hardware do sensor é diferente?

É, e isso aparece na forma como o aplicativo se comporta. A Apple monta a própria pilha de movimento. iPhones do 6s em diante trazem um coprocessador de movimento da Apple que cuida dos dados do sensor à parte da CPU principal. Os topos de linha da linha Galaxy da Samsung usam peças da STMicroelectronics que juntam um acelerômetro de 3 eixos e um giroscópio de 3 eixos num só chip. Os Google Pixel já usaram sensores da Bosch e da TDK InvenSense, dependendo do ano.

Depois da calibração, um iPhone topo de linha e um Android topo de linha ficam mais ou menos iguais. A diferença que de fato importa é entre o topo de linha e o Android de entrada. Os aparelhos de entrada usam MEMS mais baratos, de resolução menor, e sua saída bruta é mais ruidosa. A calibração ainda assim os aproxima bastante, e para a maioria dos trabalhos caseiros o resultado é bom.

O que separa o iPhone num aplicativo de nível é menos o acelerômetro e mais aquele coprocessador de movimento. Ele continua coletando dados do sensor numa taxa alta mesmo quando o aplicativo não está aberto, então o filtro de suavização tem mais amostras para trabalhar. Isso explica boa parte do motivo de os iPhones parecerem tão suaves aqui, até contra celulares Android com sensores no papel igualmente bons.

Perguntas frequentes

Como funcionam os aplicativos de nível no celular?

Eles leem o acelerômetro MEMS do celular, que mede como a gravidade puxa em três eixos (X, Y, Z). Incline o celular e a gravidade se desloca entre esses eixos. O aplicativo roda fórmulas de arco tangente para obter pitch e roll, suaviza o resultado para acalmar o ruído do sensor e o mostra como uma bolha de nível ou um número. Tudo isso acontece centenas de vezes por segundo.

Qual é a precisão de um acelerômetro de celular para uso como nível?

Um celular topo de linha calibrado lê com erro de algumas décimas de grau. Celulares Android de entrada leem pior sem calibração, porque seus sensores são mais baratos e variam mais de unidade para unidade. O maior fator isolado é a calibração: ela remove o desvio de fábrica e aproxima quase qualquer celular. Para a maioria dos trabalhos caseiros e profissionais, um celular de gama média calibrado é preciso o suficiente.

Um aplicativo de nível usa o giroscópio?

Com o celular parado, não. O acelerômetro dá o ângulo de inclinação sozinho. O giroscópio mede a velocidade de rotação, não a posição, então não sabe dizer se o celular está nivelado, apenas com que rapidez está girando. Alguns aplicativos misturam os dois sensores para leituras mais suaves em movimento, mas para encostar o celular numa parede e ler o ângulo, o acelerômetro faz o serviço todo.

Por que meu aplicativo de nível lê um pouco errado mesmo numa superfície plana?

Normalmente é o desvio de fábrica. Todo chip MEMS tem um pequeno viés embutido que o faz ler um valor diferente de zero mesmo com o celular plano. Calibrar numa superfície em que você confia elimina isso. Outras causas são a deriva de temperatura, uma capa que levanta uma borda na superfície ou poeira embaixo do celular. Calibrar numa mesa de vidro limpa depois de qualquer mudança grande de temperatura resolve a maior parte.

O quadro completo

Os aplicativos de nível funcionam porque a física por trás deles é confiável. A gravidade é constante, o acelerômetro a mede o tempo todo e a trigonometria transforma três números num ângulo. O caminho do elemento sensor até a bolha é conta fixa do começo ao fim. Não tem adivinhação nisso.

O que torna um aplicativo de nível melhor que outro não é o hardware. Todo celular topo de linha já vem com sensores mais que suficientes. A diferença é o software: quão bem o fluxo bruto é filtrado, como a calibração é guardada e aplicada, quão bem os níveis de tolerância batem com os trabalhos reais. Acerte isso e um chip MEMS barato dá conta do recado tão bem quanto ferramentas dedicadas que custam muito mais.

Entender como o sensor funciona também deixa você melhor em usá-lo. Calibre na temperatura de trabalho. Tire a capa para leituras precisas. Deixe o número se acomodar por um segundo antes de confiar nele. Cada um desses hábitos vem direto de saber o que o hardware está fazendo.

Experimente Spirit Level Pro gratuitamente

Funciona em qualquer telefone ou tablet. Sem necessidade de download. Recursos Pro a partir de $10 uma única vez.

Abrir Spirit Level Pro

Nenhuma conta necessária · Funciona offline · 20 idiomas