Le capteur de distance GP2Y0A21 est un capteur infrarouge de chez Sharp permettant de détecter des obstacles situés à une distance entre 10 et 80cm.
Ce capteur infrarouge existe en plusieurs versions ayant des caractéristiques et performances différentes. Ce tutoriel reste valable pour la majorité d’entre elles à condition de modifier la règle de conversion (Exemple de version: GP2Y0A02, GP2Y0A710).
Matériel
- Ordinateur
- Arduino UNO
- Câble USB A/B
- GP2Y0A21
Principe de fonctionnement
Les capteurs de distance à infrarouge utilisent la lumière infrarouge pour calculer la distance à un objet par triangulation. Une led infrarouge envoie un signal lumineux invisible à l’oeil nu qui est réfléchi en présence d’un objet. Une barrette photorésistive capte la lumière réfléchit ce qui permet d’en déduire l’angle de réflexion et donc la distance. Le capteur renvoie une valeur analogique comprise entre 0 et 5V.
Schéma
Le capteur de distance GP2Y0A21 est alimenté en 5V. La broche Vcc du capteur peut être branché à la broche 5V du microcontrôleur, la broche GND à la masse du microcontrôleur et le signal est branché à une entrée analogique du microcontrôleur.
Le GP2Y0A21 peut être connecté selon le schéma suivant.
Code
Pour afficher la valeur physique du capteur, il faut connaitre la règle de conversion. Afin d’avoir un code propre et lisible, il est préférable de placer le code dans une sous fonction. Nous allons donc créer une fonction qui se charge de lire la valeur du capteur et de la convertir en valeur physique.
Puis, Nous lisons la valeur brute du capteur à l’aide de la fonction analogRead(), puis nous convertissons cette valeur en centimètre pour information. Pour déterminer la présence d’un obstacle, nous définissons un seuil de 200 en dessous duquel on considère qu’un obstacle est détecté.
Pour utiliser l’objet GP2Y0A21 nous utilisons le code suivant:
//Parameters const int gp2y0a21Pin = A0; //Variables int gp2y0a21Val = 0; void setup() { //Init Serial USB Serial.begin(9600); Serial.println(F("Initialize System")); //Init ditance ir pinMode(gp2y0a21Pin, INPUT); } void loop() { testGP2Y0A21(); } void testGP2Y0A21( ) { /* function testGP2Y0A21 */ ////Read distance sensor gp2y0a21Val = analogRead(gp2y0a21Pin); Serial.print(gp2y0a21Val); Serial.print(F(" - ")); Serial.println(distRawToPhys(gp2y0a21Val)); if (gp2y0a21Val < 200) { Serial.println(F("Obstacle detected")); } else { Serial.println(F("No obstacle")); } } int distRawToPhys(int raw) { /* function distRawToPhys */ ////IR Distance sensor conversion rule float Vout = float(raw) * 0.0048828125; // Conversion analog to voltage int phys = 13 * pow(Vout, -1); // Conversion volt to distance return phys; }
Applications
Sources
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie
bonjour
je possede un capteur pololu #1132 « GP2Y0D805Z0F » modele 3 broches mais je ne trouve pas la façon de
modifier la regle de conversion que vous indiquer
moi la portee max est :5 cm
et la mini :0;5 cm
merci d’avance pour votre aide
Bonjour,
il semble, d’après la fiche technique, que ce soit un détecteur de proximité. Il n’y a donc pas de règle de conversion.
Bonjour,
Je suis intéressé par le capteur GP2Y0D805Z0F. D’après ton expérience avec ce capteur, tu peux me donner un feedback sur son utilisation ? (range, précision,…)
Merci d’avance.