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.


 

tags:
publicado por nop às 17:28
link do post | comentar | ver comentários (2) | favorito
|
Sábado, 5 de Abril de 2008

Arduino - input analógico - fotodíodo

O fotodíodo quando polarizado de forma inversa faz variar a resistência e pode ser aproveitado para medir a luminosidade. Para tal, basta ligá-lo em paralelo com uma resistência (geralmente na ordem dos 10k a 20k) e obtemos um divisor de voltagem que facilmente é lido pelo comando AnalogicRead.
O fotodíodo pode ser substituído por um LDR subindo o valor da resistência para cerca de 100k.
O LDR, ao contrário do fotodído, é não-polarizado mas em contrapartida não é sensível a frequências superiores a 100hz.
O seguinte circuito funciona como sensor de luminosidade cuja a variação é lida e reenviada repetidamente pela porta de comunicações.







void setup()
{
  Serial.begin(9600);
}
 
int valor;
void loop()
{
 while(true) {
      valor = analogRead(3);
      Serial.println(valor,DEC);
 }
}

tags:
publicado por nop às 00:55
link do post | comentar | favorito
|

Arduino - sonar Maxbotix LV-EZ1

O sonar Maxbotix LV-EZ1 é especialmente atractivo pela seu baixo preço, boa performance, dimensão reduzida e 3 tipos de output; serial, analógico e por impulsos (PWM). Pode detectar pessoas até 3 metros e objectos mais reflexivos em termos acústicos até 6 metros.
Está disponível online na loja sparkfun  assim como a partir da loja do próprio fabricante Maxbotix. O datasheet contém informação técnica detalhada e possui uma FAQ muito bem documentada.



O modo mais rápido de o ligar ao arduino é por via da saída analógica do sonar. O circuito torna-se muito semelhante ao circuito do potenciómetro.
Cada amostra é lida pelo comando AnalogRead, podendo variar entre o valor 0 e 1023.
O programa reenvia a amostra através da porta série, podendo -se ler a distância no Terminal em tempo real.
.







void setup()
{
  Serial.begin(9600);
}
 
int valor;
void loop()
{
 while(true) {
      valor = analogRead(3);
      Serial.println(valor,DEC);
 }
}



tags:
publicado por nop às 00:05
link do post | comentar | favorito
|
Sexta-feira, 4 de Abril de 2008

Arduino - input analógico - potenciómetro

O circuito para ligar um potenciómetro ao arduino. O programa lê o valor e reenvia-o pela porta de comunicações.







void setup()
{
  Serial.begin(9600);
}
 
int valor;
void loop()
{
 while(true) {
      valor = analogRead(3);
      Serial.println(valor,DEC);
 }
}

 

tags:
publicado por nop às 23:50
link do post | comentar | favorito
|

Arduino - interruptor de pressão (switch)

A primeira versão do circuito implementa uma resistência  "pull-down" em paralelo por forma a evitar que o valor lógico flutue quando o interruptor não está a ser pressionado.

pressionado - valor  lógico 1
não pressionado- valor lógico 0





A segunda versão do circuito implementa uma resistência  "pull-up" em paralelo por forma a evitar que o valor lógico flutue quando o interruptor não está a ser pressionado.

pressionado - valor  lógico 0
não pressionado- valor lógico 1









int valor;

void setup()
{
  pinMode(12, INPUT);
  Serial.begin(9600);
}

void loop()
{
  valor = digitalRead(12);
  Serial.println(valor,DEC);
}

 

tags:
publicado por nop às 23:39
link do post | comentar | favorito
|

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