Adxl335 + Arduino

Autor: Andrei -30/05/2011-

In acest tutorial va voi arata cum sa conectati un accelerometru Adxl335 la Arduino .

Adxl335 este un accelerometru analogic pe 3 axe . Fiind un accelerometru analogic este foarte simplu de utilizat . Pentru citirea acceleratiilor  se conecteaza porturile aferente fiecarei axe la  porturile analogice ale placii Arduino. In princiu asta este toata magia . Mai sunt cateva artificii dar in mare asta este tot :) .

Acum sa trecem la treaba.






Pentru testarea accelerometrului vom folosi schema si  codul de mai jos :





void setup(){
 Serial.begin(9600); 

 analogReference(EXTERNAL);

}

void loop(){

  float xAcc=readAcc(0);
  float yAcc=readAcc(1);
  float zAcc=readAcc(2);

  Serial.print("Acceleration ");
  Serial.print(" x:");
  Serial.print(xAcc,DEC);
  Serial.print(" y:");
  Serial.print(yAcc,DEC);
  Serial.print(" z:");
  Serial.print(zAcc,DEC);
  Serial.println();

  delay(100);

}

float readAcc(int port){

 int value=analogRead(port); 

 int miliVolts=map(value,0,1023,0,3300)-3300/2;

 float acc=(float)miliVolts/360;

 return acc;

}

Sa analizam codul sursa:

1. Functia setup


void setup(){
 Serial.begin(9600); 

 analogReference(EXTERNAL);

}

In prima  linie deschidem portul serial pentru comunicatii. O sa il folosim ca sa comunicam cu consola seriala a mediului de dezvoltare Arduino .

A doua linie este foarte importanta. Adxl335 este un senzor care functioneaza la 3V. El  comunica cu placa  Arduino generand un curent electric  cu o tensiune  intre 0 si 3V. Placa Arduino poate masura pe porturile analogice cureti electrici cu tensiuni intre 0 si 5V. Functia analogRead transforma tensiunea  intre 0 si 5V intr-un numar intre 0 si 1023.  Astfel ca functia analogRead sa functioneze corect in cazul senzorului nostru  trebuie sa schimbam tensiunea de referinta a convertorului analog digital (ADC) de pe placa Arduino de la 5V la tensiunea de alimentare a senzorului Adxl335.

Pasii necesari schimbarii tensiunii de referinta  :

- In functia setup notificam microcontrollerul ca tensiunea de referinta pentru ADC este externa

analogReference(EXTERNAL);

- Punem pe pinul AREF  tensiunea de alimentare a accelerometrului ADXL335

Mai multe detalii despre analogReference gasiti aici.

2. Functia loop

Dupa ce am setat microcontrollerul sa citeasca corect valorile accelerometrului  putem sa citim acceleratiile. Codul pentru citirea acceleratiei de pe o axa se gaseste in functia readAcc.


float readAcc(int port){

 int value=analogRead(port); 

 int miliVolts=map(value,0,1023,0,3300)-3300/2;

 float acc=(float)miliVolts/360;

 return acc;

}

- Citim valoarea pe care o intoarce convertorul analogic digital

int value=analogRead(port); 

- Transformam valoare citita in mV

int miliVolts=map(value,0,1023,0,3300)-3300/2;

-  Tranformam mV in multipli a lui g (acceleratia gravitationala). Adxl335 genereaza o tensiune de 360mV per g

float acc=(float)miliVolts/360;

Valoarea acc este valoare acceleratiei .

Dupa ce rulati programul ar trebui sa vedeti in Serial Monitor urmatoarele valori ( in cazul in care tineti senzorul la orizontala ) :


Pentru mai multe detalii despre accelerometrul Adxl335 verificati datasheet-ul .






Ceva neclar in articolul de mai sus ? Ai vrea sa discuti cu cineva despre proiectul tau ? Vino in fiecare marti seara de la ora 19:00 la Intalnirea Tehnorama, sau ne poti contacta direct.
Vezi aici detalii complete.

Despre... Andrei

Acest autor a publicat 23 articole.

Share

FacebookTwitterEmailWindows LiveTechnoratiDeliciousDiggStumbleponMyspaceLikedin

Comentarii


Sochirca Bogdan
June 14th, 2011

NU stiu daca sunt foarte exacte calculele tale
linia : float acc=(float)miliVolts/360
360 reprezinta bias-ul dar are aceasta valoare cand tensiunea de alimentare e 3,6 V
daca alimentam de la 3.3 de la Arduino cred ca trebuie sa impartim la 330
valoare e eproximativa deoarece in datasheet la 2v alimentat biasul este 195
asta daca am inteles eu bine cum se pune problema.
Oricum fain tutorialul .

Trimite un comentariu