Acelerômetros: uso em celulares e detecção de velocidade. Parte 1
Celulares e tablets podem ser usados em diferentes orientações, horizontal ou vertical. As aplicações precisam considerar como a orientação pode causar impacto e adaptar ao mesmo, com a adaptação da interface para o modo vertical ou horizontal. Dentre os detectores de posição e orientação, o acelerômetro é o mais comum a ser utilizado. Contudo, seu uso pode ser mais amplo em outras aplicações.
O que é um acelerômetro?
Um acelerômetro é um dispositivo eletromecânico que mede as forças de aceleração. Estas forças podem ser estáticas, como força da gravidade ou dinâmicas, causadas pela movimentação ou vibração do acelerômetro.

Fig. 1 Circuito de um acelerômetro

Fig. 2 Acelerômetro em um iPhone 3
Quais são as aplicações mais comuns para os acelerômetros?
Pela medida de aceleração estática devido a gravidade, é possível encontrar qual é o ângulo que o dispositivo se encontra com relação ao eixo da Terra. Analisando a variação na aceleração é possível identificar que o dispositivo está se movendo.
Como o acelerômetro funciona?
Conceitualmente, o funcionamento do acelerômetro é demonstrado abaixo:

Fig. 3 Acelerômetro conceitual
A Figura 3 mostra um acelerômetro conceitual. Uma mola fixa em uma base (housing) ergue um peso, calibrada em uma extensão equivalente a 1G (G=força da gravidade).

Fig. 4 Elementos do acelerômetro
Ao movimentar o sistema, a Seismic Mass extende ou distende a mola, como mostrado na Fig. 5 e Fig. 6. O circuito acoplado ao Housing mede a força elástica aplicada na mola e retorna a aceleração. Cada elemento de medida pode ser colocado em cada eixo, Fig. 7.

Fig. 5 Mola extendida

Fig. 6 Mola encolhida

Fig. 7 Um elemento para cada eixo
Existem vários tipos de acelerômetros. Alguns usam o efeito piezelétrico que contêm estruturas microscópicas de cristal que são afetadas pelas forças que atuam no sensor, as quais geram uma tensão elétrica de acordo com a agitação. Outro tipo é detectando variações na capacitância em duas microestruturas eletrônicas próximas umas das outras. Se a força aplicada movimentar as estruturas, a capacitância irá modificar. Em diferentes implementações, o fator constante é que existem elementos eletro-eletrônicos que mudam o valor da tensão de saída proporcionalmente a aplicação das forças sobre o sensor.
A Figura 8 mostra um modelo de circuito de acelerômetro, usado em celulares.

Fig. 8 Circuito de um acelerômetro
Como mostra a Figura 9, o circuito é composto de um elemento móvel, o Seismic Mass, que vibra sobre a base (Housing) em caso de movimentação. Em cada vibração, as aletas do Seismic Mass se aproximam dos capacitores, alterando a capacitância.

Fig 9. Housing e Seismic Mass

Fig. 10 Medida do diferencial
Os circuitos medem o diferencial da tensão e retornam o mesmo para a saída do acelerômetro. Cada valor é proporcional a movimentação do mesmo, Fig. 10.
Caraterísticas dos sensores acelerômetros
Analógicos e digitais- A saída dos sensores de acelerômetro podem ser diferenciadas pelas saídas analógicas ou digitais. A necessidade de cada caso depende de qual será o hardware que fará a interface com o acelerômetro. A saída analógica dos acelerômetros tem um valor continuo para cada medida de aceleração. Por exemplo, 2.5V para 0g, 2.6V para 0.5g, 2.7V para 1g. Os acelerômetros digitais usualmente usam modulação de pulso (PWM) para seu output. Isto significa que uma sequencia de ondas em formato quadrado vão definir o valor proporcional de sua aceleração aplicada.
Quantidade de eixos – Cada acelerômetro pode vir com duas opções, 2 eixos (x,y) ou 3 eixos (x,y,z). Para aplicações com foco em posicionamento espacial, pode ser usado pelo menos um acelerômetro com 3 eixos ou dois acelerômetros de 2 eixos montados em planos ortogonais.
Medida máxima. – Se o objetivo é medir apenas variações com relação a gravidade da terra, um acelerômetro de 1.5g será o suficiente. Se a aplicação for a medida de movimentação de um veiculo, carro ou robô, um acelerômetro com ±2g permite uma precisão adequada para identificação das variações. Para projetos com detecção de variações repentinas, como acelerações bruscas em curto espaço de tempo, será necessário um com capacidade ±5g ou mais.
Sensitividade – Permite uma detecção mais rápida na variação da aceleração, permitindo melhor atuação. Melhor sensibilidade permite melhor acurácia nas medidas.
Largura de Banda – Para aplicações que envolvem medidas de movimentação de curta variação, uma largura de banda de 50Hz permite uma amostragem adequada. Para medidas mais precisas, a largura de banda deve ser da ordem de centenas de Hz.
Interpretação dos acelerômetros no Android
O Android retorna os valores do acelerômetro em termos absolutos. Os valores medidos do sensor de acelerômetro são sempre ajustados para a forma canonica do Android, de maneira que todos dispositivos reportem da mesma maneira. As medidas do acelerômetro não são ajustadas pelo Android em caso de mudança de orientação, sendo responsabilidade do desenvolvedor adaptar o mesmo para a aplicação.

Fig. 11 Orientação na tela. Fonte [1]
– Device Raw: os dados do acelerometro não são associados a nenhum contexto
– Canonical: Android especifica um quadro de coordenadas de forma que os valores positivos do eixo X sejam associados ao lado direito do dispositivo, o positivo do eixo Y seja associado ao topo do dispositivo e o eixo Z seja associado ao display;
– Screen: O gerenciador de janela indica a origem do acelerometro de acordo com a tela. A origem é associada ao canto esquerdo superior e o valor maximo é associado ao canto direito inferior, de forma que aumentar o valor do eixo X seja em sentido a direita da tela e aumentar o eixo Y seja descer na tela. O gerenciador de tela irá rotacionar a tela de acordo com as leituras deste sensor, sendo que seus valores são sempre associados a posição relativa;
– World: Sistema de coordenadas especifico para o OpenGL.
O código abaixo apresenta a conversão entre o modo canonical e o screen.
[sourcecode language=”java”]
static void canonicalToScreen( float[] canVec,float[] screenVec)
{
struct AxisSwap
{
signed char negateX;
signed char negateY;
signed char xSrc;
signed char ySrc;
};
static const AxisSwap axisSwap[] = {
{ 1, -1, 0, 1 }, // ROTATION_0
{-1, -1, 1, 0 }, // ROTATION_90
{-1, 1, 0, 1 }, // ROTATION_180
{ 1, 1, 1, 0 } }; // ROTATION_270
WindowManager windowMgr = (WindowManager)this.getSystemService(WINDOW_SERVICE);
int rotationIndex = windowMgr.getDefaultDisplay().getRotation();
const AxisSwap& as = axisSwap[rotationIndex];
screenVec[0] = (float)as.negateX * canVec[ as.xSrc ];
screenVec[1] = (float)as.negateY * canVec[ as.ySrc ];
screenVec[2] = canVec[2];
}
<pre>[/sourcecode]
No próximo post será apresentado um método de detecção de posição e velocidade a partir dos dados coletados no acelerômetro.
Referências:
[1] http://www.nvidia.com/object/white-papers.html
[2] http://www.engineerguy.com/elements/
[…] O responsável por detectar a posição na qual o dispositivo se encontra é o acelerômetro. Acelerômetros são dispositivos eletromecânicos capazes de detectar variações de acelerações nos três eixos […]