Voilà, je rencontre un petit problème avec mon capteur SHARP GP2D12. En fait, j'utilise un petit bout de code pour me retourner les infos du capteur :
/* This is a simple code that reads an input from an analog pin on the Arduino and relays it back to the computer */
int irReader = 1; // the analog input pin for the ir reader
int irVal = 0; // stores value from Ir reader
void setup() {
Serial.begin(9600); // begins serial communication with the computer
}
void loop() {
irVal = analogRead(irReader); // read the value from the ir sensor
Serial.println(irVal); // sends ir val to computer
}
Ensuite, avec les valeurs sortantes, je me réfère à ce graphique, et je m'aperçois que si je veux obtenir les bons résultats je dois multiplier par 2 ma valeur irVal :
D'autre part, au lieu de me sortir un voltage, Arduino me refile des valeurs, mais à quoi correspondent-elles (vous pouvez voir d'ailleurs sur le graphique ci-dessus que ça va de 0 à 600)??? Si on lit la datasheet officielle, on voit bien un graphique qui indique une distance par rapport à un voltage... C'est ici si vous voulez jeter un coup d'oeil : http://users.csc.calpoly.edu/~cmclark/CPE480/ProjectWebSites/GTAI/GP2D12-DATA-SHEET.pdf
sensorValue = analogRead(sensorPin); // read the pot value
// the sensor actually gives results that aren't linear.
// this formula converts the results to a linear range.
int range = (6787 / (sensorValue - 3)) - 4;
Serial.println(range, DEC); // print the sensor value
de mon côté je cherche comment analyser de 0 à 10 cm en plus des 10 à 80 cm?
Effectivement, j'ai utilisé ce code là et ça marche pas mal! Pour ce qui est des distances de 0 à 10cm, c'est une autre paire de manches. Tu peux toujours t'y atteler en calibrant le capteur tous les 1cm de 0 à 10, mais je doute que ce soit vraiment efficace... :-/
oui le problème étant que je voudrais éviter ce problème des 10 cm
et avoir un capteur qui va de 0 à 80 et non pas de 10 à 80 et entre 0 à 10 qui renvoie des valeurs équivalente à ce que l'on a entre 10 et 80.
En gros sur un robot ça veut dire qu'il faut toujours mettre ce capteur en retrait de 10 cm dans la coque du robot sinon on ne peut pas savoir si on est à 50 cm ou 5 cm par exemple?
Ben disons que si tu veux que ton capteur détecte un obstacle à la lisière de ton robot alors oui il faudrait plutôt penser à les intégrer à 10cm en profondeur, et encore je ne sais pas si ce serait très efficace, il ne faudrait pas que ça "morde" sur les découpes de la coque du robot (si coque il y a) qui sont cencé laisser passer les IR.
Tu peux imaginer un positionnement des capteurs comme ça (dessin n°1) à la place d'un positionnement standard (dessin n°2) par ex.
Personnellement, je me sert des GP2D12 pour détecter des obstacles de proximité, tout en faisant en sorte que mon robot puisse avoir une marge de manoeuvre convenable pour emprunter un autre chemin. Si tu fais en sorte que ton robot s'arrête à la lisière de l'obstacle, il n'aura peut-être pas assez de place pour pivoter, reculer ou avancer. Ce sont des paramètres à prendre en compte...
PS : Ah oui, j'oubliais, si tu galères vraiment avec l'IR, passe aux Ultra-sons, t'auras plus de problème...
enfoncer les capteurs à 10 cm n'est pas une bonne idée, vous aurez plein de reflets avec votre carcasse.
le GP2D120 n'est pas plus précis, il a juste un range différent, plus court. Voyez mes tests sur le Sharp GP2D120 : Capteur de distance infra-rouge (Sharp) - PoBot (avec une Arduino et un "oscillo" sous Processing si ça vous intéresse, très simple à utiliser)
En fait, pour couvrir toute la distance de 0 à très loin, il faut utiliser plusieurs capteurs. Non seulement ça vous permettra de recouper vos résultats (par exemple pour le Sharp GP2x, vérifier que vous n'êtes pas dans le pic du début de la courbe) et d'avoir un traitement plus simple au niveau de votre algorithme de contrôle.
Pour tester la distance courte de 0 à 10 cm, on peut utiliser des capteurs Sharp IS471F ou des modules à 2? tout fait :