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.
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:
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).
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.
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.
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.
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.
O Android lida com o seguinte sistema de identificação espacial do acelerometro– 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/
One thought on “Acelerômetros: uso em celulares e detecção de velocidade. Parte 1”