Innanzitutto salve a tutti: da poco nel mondo arduino, oltre ad essermi compratio un librone e a leggere le lezioni di alfieri sul sito, ho in mente il mio progetto.
Per realizzarlo ho bisogno di poter avere i dati in gradi dei valori forniti dall'accelerometro MMA7361L.
Ho visto che la cosa è stata trattata da altri, ma mi pare in modo non esuriente. Mi scuso da ora se il mio topic ne ripete magari un'altro...ma ho proprio bisogno di aiuto.
Il sensore FRESCALE MMA7361L viene alimentato a 3.3V e fornisce in uscita, per ciascun asse, un segnale analogico che varia tra 0.85V e 2.45V, essendo lo "zero" disposto esattamente a metà (1.65V).
Questo nel caso di misura di inclinazione a 1g (gravità) con la sensiblita posta a +/- 1.5g ove g è l'accelerazione di gravità (9.81 m/s2.
Quindi usando la funzione map si può conoscere l'inclinazione rispetto ad un asse.
Ecco un esempio:
#define Xpin A0
#define Ypin A1
#define Zpin A2
#define RangeMin 850 // millivolt
#define RangeMax 2450 // millivolt
unsigned long Vx, Vy, Vz; // tensione (mV) asse X, Y, Z
int GradiX, GradiY, GradiZ; // inclinazione in decimi di grado (da -900 a +900)
void setup() {
analogReference(EXTERNAL); // collegare AREF a +3.3V del modulo
Serial.begin(9600);
}
void loop() {
Vx = 3300 * analogRead(Xpin) / 1023; // conversione ADC ---> Vasse (mV)
GradiX = map(Vx, RangeMin, RangeMax, -900, 900); // decimi di grado
Vy = 3300 * analogRead(Xpin) / 1023; // conversione ADC ---> Vasse (mV)
GradiY = map(Vx, RangeMin, RangeMax, -900, 900); // decimi di grado
Vz = 3300 * analogRead(Xpin) / 1023; // conversione ADC ---> Vasse (mV)
GradiZ = map(Vx, RangeMin, RangeMax, -900, 900); // decimi di grado
Serial.println("X/tY/tZ");
Serial.print(GradiX / 10.0, 1);
Serial.print("/t");
Serial.print(GradiY / 10.0, 1);
Serial.print("/t");
Serial.print(GradiZ / 10.0, 1);
delay(100); // 100 ms
}
Edit: ho fatto qualche ottimizzazione al precedente listato e spero funzioni.