Circuito de um acelerômetro

Circuito de um acelerômetro

Neste post será apresentada uma técnica de detecção de velocidade a partir dos dados de um acelerômetro

Detecção de deslocamento e velocidade usando acelerômetro.

A aceleração é a taxa de mudança de velocidade de um objeto. E a velocidade é a taxa de mudança de posição do mesmo objeto. Em outras palavras, a velocidade é a derivada da posição e a aceleração é a derivada da velocidade:

derivada

Assim como para ter o valor da velocidade, é possível através da integração

integracao

Neste caso, a integração pode ser vista como o calculo da área da curva, criada a partir da amostragem dos dados do acelerômetro.

curva

aprox

A amostragem pode criar intervalos em pequenas áreas. Para que a coerência entre os dados seja adequada, a taxa de amostragem deve ser a mesma. O tempo da amostragem é a base de cada area enquanto o valor do acelerômetro é a altura.

Contudo, devido a amostragem discreta, existe um erro acumulativo no cálculo da integral

areaerror1

Fig 1 Erro acumulativo a partir das amostragens

Esse erro é devido a amostragem, como mostrado na Figura 1. Uma maneira de lidar com ele é usando o método de aproximação de primeira ordem. Considerando que o resultado da integração é composto de duas áreas, Area 1 e Area 2.

areaerror2

Fig 2. Interpolação pelo método do trapézio

A primeira área é associada o valor da amostragem (um quadrado). A segunda área é um triângulo, formado pelo valor da amostragem anterior (n-1) e a atual (n) divida por dois. Com isso a área pode ser calculada em cada intervalo com a equação.

metodotrapezio

Fórmula 1. Cálculo da área

Onde T é o tempo da amostragem. Com esta aproximação o erro é menor. Contudo, os dados amostrados no acelerômetro ainda não são adequados para medir a movimentação. Logo a seguir são colocados quais condições devem ser atendidas.

Considerações para a construção de um algoritmo de estimativa de movimentação.

– O sinal do acelerometro não é livre de ruídos e deve ser filtrado. O filtro recomendado é o de médias móveis (moving average); seu valor deve ser processado após a coleta de vários valores

– Mesmo com a filtragem, alguns ruidos pode surgir devido a implementações ruins. A taxa de amostragem pode ser ajustada para ignorar alguns valores. (tipicamente ± 2 passos de amostras a cada 16 amostras).

– A calibração inicial é necessária e deve ser a mais acurada possível

– O valor real da aceleração é dado pela amostragem menos o valor calibrado. Com isso a aceleração terá valores negativos e positivos

– Uma alta frequencia de amostragem implica em uma redução nos erros acumulados

-O intervalo entre as amostragem deve sempre ser o mesmo. Contudo, uma interpolação entre os valores é recomendável para resultados mais precisos.

A partir dessas condições, a seguir será mostrado como efetuar o cálculo passo a passo.

Calibração

Em alguns modelos de acelerômetros, os valores retornados pelas medidas são sempre positivos, mesmo se a aceleração for negativa ou positiva. Neste caso e necessário efetuar um ajuste de referencial, através de uma calibração.

Fig 2 a) Acelerômetro                                                 b) Nivel zero                                                                          c) Medidas calibradas

A calibração acontece quando o acelerômetro não esta movimentando. O conjunto de valores medidos serão considerados como o zero. Valores menores serão associados a desaceleração, com referencial negativo  e valoras maiores, com referencial positivo serão associados a aceleração.

Abaixo um código exemplo de calibração, usado no acelerômetro MMA7260QT 3-Axis [1] sendo executado com o acelerômetro em repouso.

[sourcecode language=”java”]

void Calibrate(void){

  unsigned int count1;
  count1 = 0;

  do{
  ADC_GetAllAxis();//Função que atualiza os valores dos eixos X e Y
  sstatex = sstatex + Sample_X; //Acumula as amostras no eixo X
  sstatey = sstatey + Sample_Y;//Acumula as amostras no eixo Y
  count1++;
  }while(count1!=0x0400);//Amostragem de 1024 Hz
  sstatex=sstatex>>10;//Normaliza e guarda o referencial de calibração
  sstatey=sstatey>>10;//Normaliza e guarda o referencial de calibração
}[/sourcecode]

Após a calibração, as medidas do acelerômetro estarão coerentes com o ambiente de testes.

calibrados

Fig. 3 Dados calibrados

Como mostrado na Figura 3, a área A1 indica uma aceleração positiva, e a área A2 mostram as medidas de uma aceleração negativa.

Filtragem

Um filtro passa baixa é uma maneira de remover parte dos ruídos gerados na medida do acelerômetro. A redução é necessária em algoritmos de detecção de posição e velocidade pois reduz os erros acumulados.

Uma média móvel pode ser aplicada para reduzir. A filtragem consiste nesse caso na redução do conjunto de medidas em uma média acumulada

[sourcecode language=”java”]
void Filter(void)

{

do{
accelerationx[1]=accelerationx[1] + Sample_X;
accelerationy[1]=accelerationy[1] + Sample_Y;
count2++;}while (count2!=0x40);//executa 64 amostras

accelerationx[1]= accelerationx[1]>>6;
accelerationy[1]= accelerationy[1]>>6;
}
[/sourcecode]

Ajustes e controle

Em alguns casos, mesmo após a calibração, dependendo da precisão do acelerômetro, medidas espúrias são geradas. Para isso, é necessário uma etapa de controle para filtrar mais uma vez os dados.

[sourcecode language=”java”]
if ((accelerationx[1] <=3)&&(accelerationx[1] >= -3)) //Janela de controle aplicada sobre o eixo X
{accelerationx[1] = 0;}

[/sourcecode]

Integração

Após a calibração e filtragem, a Fórmula 1 pode ser aplicada localmente em cada conjunto de amostras, permitindo com isso a partir da aceleração encontrar a velocidade. No caso do deslocamento/posição, o mesmo pode ser encontrando integrando mais uma vez.

[sourcecode language=”java”]
//primeira integração eixo X
velocityx[1] = velocityx[0] + accelerationx[0] + ((accelerationx[1] – accelerationx[0])>>1)
//segunda integração eixo Y
positionX[1] = positionX[0] + velocityx[0] + ((velocityx[1] – velocityx[0])>>1);
[/sourcecode]

integrais

Detecção de parada

Para detectar a parada, é necessário considerar o momento inercial nas medidas do acelerômetro. Por exemplo, uma medida de movimentação de um objeto, pode ser descrita pelo gráfico a seguir. É acelerado até um determinado instante e em seguida a força contrária é aplicada para sua parada. Ao fim do movimento, algumas leituras do acelerômetro são geradas.

exemplo

Uma maneira de lidar é contabilizar quantas vezes os valores oscilam ao redor do zero

[sourcecode language=”java”]
if (accelerationx[1]==0) { countx++;}
else { countx =0;}
if (countx>=25)//apos 25 medias iguais a zero, considere a parada

{
velocityx[1]=0;
velocityx[0]=0;
} [/sourcecode]

Conclusão

O uso do acelerômetro para inferência de movimentação é possível desde que se considere os problemas com relação a calibração e filtragem das medidas. Contudo, o erro cumulativo não permite que os acelerômetros tenham a precisão adequada para uma série longa de medidas. Para uma detecção mais precisa, é recomendado o uso do GPS. O acelerômetro pode ser usado inclusive como apoio na detecção da movimentação e indicação da posição atual, no momento que a identificação do GPS falhar, mas as informações prévias de localização já serem conhecidas.

Referencias:

[1] FreeScale Application Notes: AN3397, AN4068, AN4399

One thought on “Acelerômetros: Uso Em Celulares E Detecção De Velocidade. Parte 2

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

*
*
Website