Go Down

Topic: moyenner ( lisser) une valeur analogique (Read 2552 times) previous topic - next topic

ead

ca y est, j ai recu mon Arduino !
Je m en sors a peu pres.
J ai une cellule IR en guise de capteur analogique.
Mais, j ai un probleme de traitement d info.
j aurais besoin de lisser les donnees (valeur moyenne sur plusieurs lectures)
un peu a l image de l exemple interpolate
http://processing.org/learning/examples/interpolate.html

mais avec ma variable (source analogique) et pas la souris.

J ai egalement trouve ceci:
http://www.tigoe.net/pcomp/code/archives/arduino/000710.shtml
...mais pour wiring, ...je ne comprend pas tout, je ne me sens pas capable de l adapter pour processing.
merci de votre aide, joyeuses fetes.
eric

Vincent

Salut

En gros tu veux la distance moyenne que te donne la cellule IR si j'ai bien compris. Je sais pas si c'est le mieux et si c'est ce que tu veux, mais faire 5 lectures toute les 200ms par exemple puis faire la moyenne des 5 est t'as la distance moyenne de l'objet ...  

a+  :)

ead

Quote
Salut

En gros tu veux la distance moyenne que te donne la cellule IR si j'ai bien compris. Je sais pas si c'est le mieux et si c'est ce que tu veux, mais faire 5 lectures toute les 200ms par exemple puis faire la moyenne des 5 est t'as la distance moyenne de l'objet ...  

a+  :)
c est bien cela.
N etant pas encore trop baleze en programmation, je vois pas trop comment executer cela...
T aurais une piste ?
merci d avance.


Vincent

Pour simplifier le programme, tu peux faire une fonction comme ça tu peux l'appeler à tout moments:

Code: [Select]


int pinIR = 2;

int eval1;
int eval2;
int eval3;
int eval4;
int eval5;
int evalMoy;

void setup(void) {
 pinMode(pinIR, INPUT);
}

void evalDistance() {
   
   eval1 = analogRead(pinIR);
   delay(200);
   eval2 = analogRead(pinIR);
   delay(200);
   eval3 = analogRead(pinIR);
   delay(200);
   eval4 = analogRead(pinIR);
   delay(200);
   eval5 = analogRead(pinIR);
   delay(200);
   
   evalMoy = (eval1 + eval2 + eval3 + eval4 + eval5)/5;

}

void loop(void) {
 
 evalDistance();
 
}



Un truc du genre devrait marcher. Sinon, on peut faire ça dans une boucle, pour alléger le programme et modifier la fréquence des lectures ...

ead

Quote
Pour simplifier le programme, tu peux faire une fonction comme ça tu peux l'appeler à tout moments:

Code: [Select]


int pinIR = 2;

int eval1;
int eval2;
int eval3;
int eval4;
int eval5;
int evalMoy;

void setup(void) {
 pinMode(pinIR, INPUT);
}

void evalDistance() {
   
   eval1 = analogRead(pinIR);
   delay(200);
   eval2 = analogRead(pinIR);
   delay(200);
   eval3 = analogRead(pinIR);
   delay(200);
   eval4 = analogRead(pinIR);
   delay(200);
   eval5 = analogRead(pinIR);
   delay(200);
   
   evalMoy = (eval1 + eval2 + eval3 + eval4 + eval5)/5;

}

void loop(void) {
 
 evalDistance();
 
}



Un truc du genre devrait marcher. Sinon, on peut faire ça dans une boucle, pour alléger le programme et modifier la fréquence des lectures ...


ok,
merci Vincent,
en effet j ai adapte ton principe de mesures successives, cela est moins erratique, mais pas encore parfait.
Mais j ai lu autre part qu une resistance et un condensateur (10kohm et 100pF )en parallele entre la broche de capture et la masse seront d un grand secours. Demain j achete tout ca.
bonnes fetes.



Vincent

La résistance et le condo. doivent servir de filtre, pour avoir un signal de meilleur qualité, mais tout dépend de ton capteur IR, certain ont je crois un signal déjà lissé

Bonne fêtes à toi aussi  :)


Go Up