Inclinometro con ADXL335: come migliorare?
scopo:
misurare l'ibardata di un corpo che giace su di un piano ortogonale al terreno (es. una finestra). l'asse z punta contro l'osservatore mentre x e y giacciono paralleli al piano/finestra.
hardware:
adxl335, accelerometro analogico 3v, +-3g, 3 assi.
(datasheet: https://www.sparkfun.com/datasheets/components/smd/adxl335.pdf)
tecnica:
calcolo dell'arcotangente tra x e y e uscita del valore in gradi (0-360)
domande:
il programma è scritto bene ed in maniera essenziale? con questo settaggio hardware e software, sto già ottenendo il massimo della risoluzione e della sensibilità possibili?
programma:
/////////////////////////////////////////////////
misurare l'ibardata di un corpo che giace su di un piano ortogonale al terreno (es. una finestra). l'asse z punta contro l'osservatore mentre x e y giacciono paralleli al piano/finestra.
hardware:
adxl335, accelerometro analogico 3v, +-3g, 3 assi.
(datasheet: https://www.sparkfun.com/datasheets/components/smd/adxl335.pdf)
tecnica:
calcolo dell'arcotangente tra x e y e uscita del valore in gradi (0-360)
domande:
il programma è scritto bene ed in maniera essenziale? con questo settaggio hardware e software, sto già ottenendo il massimo della risoluzione e della sensibilità possibili?
programma:
/////////////////////////////////////////////////
code: [select]
/////////////////
//adxl335, il programma legge gli assi x e y e restituisce l'angolo di imbardata (phi)
//nota: l'adxl è montato con il piano del chip ortogonale al piano terrestre, l'imbardata è intesa considerando tale piano di riferimento.
//////////////////////////////////////////////////////////////////
//analog read pins
const int xpin = a0;
const int ypin = a1;
const int zpin = a2;
//taratura: valori vanno settati ricercando manualmente minimi e massimi
int minvalx = 398;
int maxvalx = 598;
int minvaly = 393;
int maxvaly = 593;
//to hold caculated values
double phi;
void setup(){
serial.begin(9600);
analogreference (external); //l'adxl esce valori in un range di 0-3000mv. l'adc di arduino legge gli analog e // li confronta su una scala 0-5000mv.
//per perdere minor risoluzione possibile si cambia il range di riferimento dell'adc // con la funzione analogreference() e
//si collega una tensione regolata vicina ai 3v su aref (es. 3v3 di arduino).
}
void loop(){
//read analog values accelerometer
int xread = analogread(xpin);
int yread = analogread(ypin);
//convert read values degrees -90 90 - needed atan2
int xang = map(xread, minvalx, maxvalx, -90, 90);
int yang = map(yread, minvaly, maxvaly, -90, 90);
//con l'arcotangente 1)posso sapere in quale quadrante mi trovo e 2)linearizzo (rendo costante) la sensibilità interpolando le singole sensibilità di x e y
//57,2957795 è il fattore di conversione rad/gradi, necessario perchè atan2 esce valori in radianti.
//arctan spazza da -180 180, sposto l'intervallo 0->360 addizionando 180
[/color]
[color=navy]phi = (57.2957795* (atan2(-yang, xang)))+180; //imbardata
//output caculations
serial.print("xread: ");
serial.print(xread);
serial.print(" | xang: ");
serial.print(xang);
serial.print(" | yread: ");
serial.print(yread);
serial.print(" | yang: ");
serial.print(yang);
serial.print(" | phi: ");
serial.println(phi);
delay(200);
}[/color]
prima di tutto, essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentarti qui (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato regolamento ...
... poi, in conformità al suddetto regolamento, punto 7, devi editare il tuo post (in basso destra del post, bottone more -> modify) e racchiudere il codice all'interno dei tag code (... sono quelli che in edit inserisce il bottone fatto così: </>, tutto sinistra).
grazie,
guglielmo
... poi, in conformità al suddetto regolamento, punto 7, devi editare il tuo post (in basso destra del post, bottone more -> modify) e racchiudere il codice all'interno dei tag code (... sono quelli che in edit inserisce il bottone fatto così: </>, tutto sinistra).
grazie,
guglielmo
Arduino Forum > International > Italiano > Software (Moderator: leo72) > Inclinometro con ADXL335: come migliorare?
arduino
Comments
Post a Comment