MMA7361L - solito problema: conversione in gradi dei valori elettrici

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. :stuck_out_tongue:

Qualche suggerimento?

Un saluto

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni e a leggere il regolamento: Regolamento - qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections - qui le pinout delle varie schede by xxxPighi: Pinout - qui una serie di link [u]generali[/u] utili: Link Utili

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.

Ho letto la presentazione. Questo potrebbe essere utile --> http://hackaday.com/2010/08/03/diy-guided-missile-err-model-rocket/ Sketch --> https://sites.google.com/site/airwavershr/Home/guided-rocket/Rocket_Guidance.pde