Quinta-feira, 10 de Abril de 2008

Arduino - acelerómetro - adxl330

O acelerómetro adxl330 é um sensor de aceleração sensível ao movimento nos 3 eixos (x,y,z) montado numa pequena placa com espaçamento DIP. Possui 6 pinos; VDD a 3 Volts, GND, X,Y e Z, sendo que o pino ST fica desconectado. Pode ser comprado por cerca de 35$ na loja online sparkfun onde se encontra também disponível para download o datasheet com informação técnica detalhada.



A sua ligação ao Arduino Deciemila ou ao Arduino BT é extremamente fácil, atendendo a que ambas as placas dispõem de  uma saída de 3V3. O sensor envia a informação do movimento através das saídas analógicas X,Y e Z.
.




O programa que nós testámos envia repetidamente os valores da aceleração nos 3 eixos para a porta de comunicações podendo ser lido a partir de qualquer aplicação de terminal parametrizado com uma velocidade de transferência de 9600 bauds.
O acelerómetro pode ser usado para registar a aceleração do movimento mantendo a placa sempre orientada na vertical ou, alternativamente, para registar a orientação da placa, mantendo-a fixa numa posição e orientando-a livremente (tilt).
No primeiro caso, integrando a velocidade podemos interpolar a posição através do método de integração de Euler:
ACEL=FORÇA/MASSA
VEL=VEL+ACEL
POS=POS+VEL
Se pretendermos usar o sensor para  conhecermos a orientação da placa nos 3 eixos (segundo caso) basta-nos ler directamente os valores X,Y e Z.
Quando os dados são lidos directamente a partir da instrução analogRead e com a placa em repouso, verificámos que os valores oscilam bastante. O código que apresentamos resolve esse problema implementando um filtro digital que suaviza os dados. O método usado é simples; guardam-se as últimas 7 amostras e calcula-se a média.
Se o objectivo for  implementar um sistema de interacção  com o PC, ligando a placa arduino ao Processing, Flash, Max  MSP  ou outro SDK, temos de ter em linha de conta que a aplicação terá de calibrar os dados. No nosso caso, com a placa em repouso, os valores obtidos nos 3 eixos situavam-se próximos do valor 340. Uma rotação de +-90º ao longo de cada um dos eixos provocava uma oscilação proporcional de +-60 unidades, o que resulta uma resolução ligeiramente inferior a 2º por unidade.


 

// 2007 mariovairinhos@sapo.pt

const int n=7;

int x[n+1];
int y[n+1];
int z[n+1];

int ax,ay,az;

void setup()
{
  // inicia a porta de comunicações
  // Serial com setup
  Serial.begin(9600);
}

void loop()
{
  // obtém o valor actual
  // get most recent value
  x[0] = analogRead(0);
  y[0] = analogRead(1);
  z[0] = analogRead(2); 
  // calcula a média móvel das últimas n amostras
  // get the average of the last n samples
  ax=0;ay=0;az=0;
  for(int i=n;i>=1;i--){
    ax=ax+x[i];x[i]=x[i-1];
    ay=ay+y[i];y[i]=y[i-1];
    az=az+z[i];z[i]=z[i-1];
  }
  ax=ax/n;
  ay=ay/n;
  az=az/n;
 
  // mostra o valor filtrado da aceleração
  // output filtered data
  Serial.print(" ace_x=");
  Serial.print(ax,DEC); 
  Serial.print(" ace_y=");
  Serial.print(ay,DEC);
  Serial.print(" ace_z=");
  Serial.print(az,DEC);
 
  Serial.println("");
}
tags:
publicado por nop às 17:28
link do post | comentar | favorito
|
2 comentários:
De Mário a 20 de Julho de 2008 às 13:19
Encontrei agora o seu blog. Aproveito para lhe dar os meus parabéns, ja que tem aqui uma boa fonte de entertenimento com electrónica/programação!
Continue! Já tenho o blog adicionado aos favoritos.
De nop a 20 de Julho de 2008 às 14:53
Agradeço o seu comentário!
Espero durante o próximo mês adicionar mais exemplos.
MárioV

Comentar post

pesquisar

 

tags

arduino

c/c++

codebits

deca

director

flash

iniciação

maa

materiais

mobile

oficina

opencv

relé

tui

ua

todas as tags

recentes

O NOP mudou de casa :)

Museu Municipal Penafiel ...

Mylamp - tutorial

Materiais - iniciação

Multimédia em Ambientes A...

Usa a cabeça - jogo do po...

Arduino - acelerómetro - ...

Arduino - input analógico...

Arduino - sonar Maxbotix...

Arduino - input analógico...

arquivos

Novembro 2012

Abril 2009

Outubro 2008

Setembro 2008

Abril 2008

Fevereiro 2008

links