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 .
Vezi aici detalii complete.





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 .