Ce petit article a pour objectif de présenter un problème rencontré avec deux capteurs infra-rouge Sharp et si possible de trouver une solution.
Voici le problème : des parasites quand les deux capteurs Sharps sont utilisés ensemble.
Ces images sont obtenues simplement en envoyant aussi vite que possible les valeurs reçues sur les convertisseurs analogiques.
A gauche, les deux capteurs ensemble. A droite, un capteur seul (même chose avec le second).
D’autres vues du problème : on note comme une sinusoïde dans l’enveloppe des parasites.
A droite, le problème disparait quand il y a des obstacles devant les capteurs.
Pour une meilleure vue, on refait les tests avec l’échelle de temps : en abscisse le nombre de millisecondes et en ordonnées la valeur reçue du convertisseur analogique/numérique (10 bits donc 1024).
Voici le code source : il y a déjà une moyenne sur 10 valeurs qui est faite.
/**
* Test d’utilisation sur Pobot Easy de capteurs Sharp
*
* Matériel :
* - un robot Pobot Easy
* - deux capteurs 2YOA21
*
* (c) Julien Holtzer pour Pobot - mai 2010
*/
// pattes analogiques sur lesquelles les Sharp sont connectés
int pinLeft = 1 ;
int pinRight = 2 ;
int valuesL[10] ;
int valuesR[10] ;
int index = 0 ;
// la moyenne pour gauche et droite
int valueLeft = 0 ;
int valueRight = 0 ;
// la moyenne
int moyenne = 0 ;
void setup()
// liaison série
Serial.begin(38400) ;
void loop()
// remplir un tableau de valeurs
valuesL[index] = analogRead(pinLeft) ;
valuesR[index] = analogRead(pinRight) ;
index++ ;
if (index >= 10)
// le tableau est plein, on analyse son contenu
moyenneLeft() ;
moyenneRight() ;
// calcul de la moyenne
moyenne = (valueLeft + valueRight) / 2 ;
Serial.print(valueLeft) ;
Serial.print(" ") ;
Serial.print(valueRight) ;
Serial.print(" ") ;
Serial.print(0) ;
Serial.println(" ") ;
// repartir
index = 0 ;
int moyenneLeft(void)
valueLeft = 0 ;
for (int i = 0 ; i < 10 ; i++)
valueLeft += valuesL[i] ;
valueLeft /= 10 ;
int moyenneRight(void)
valueRight = 0 ;
for (int i = 0 ; i < 10 ; i++)
valueRight += valuesR[i] ;
valueRight /= 10 ;
Une idée ?