Le GP2Y0A21YK0F est un capteur de distance infrarouge de la famille Sharp, dont la plage de mesure va de 10 à 80 cm. Sa sortie est une tension analogique proportionnelle à la distance : une simple entrée analogique de microcontrôleur suffit pour connaître la position d’un obstacle, sans aucun protocole de communication.
Le module est livré avec son cordon à trois fils et son connecteur : aucune soudure n’est nécessaire, tout se branche. Comparé au capteur à ultrasons, il répond plus vite et ne se laisse pas tromper par les surfaces molles — en échange, sa portée est plus courte et sa sortie n’est pas linéaire.
Caractéristiques techniques
| Référence | GP2Y0A21YK0F (Sharp) |
|---|---|
| Plage de mesure | 10 à 80 cm |
| Alimentation | 4,5 V à 5,5 V |
| Consommation moyenne | 30 mA environ |
| Sortie | Analogique, une seule voie |
| Tension à 80 cm | 0,4 V environ |
| Variation de 80 cm à 10 cm | 1,9 V environ, soit 2,3 V à 10 cm |
| Période de mesure | 38 ms environ |
| Principe | Triangulation optique : diode infrarouge et détecteur PSD |
| Température de service | −10 °C à +60 °C |
| Connectique | Connecteur 3 broches, cordon fourni |
| Dimensions | Environ 29 × 13 × 13 mm, deux pattes de fixation |
Comment le capteur mesure la distance
Le module contient une diode infrarouge qui projette un faisceau, et un détecteur PSD (position sensitive detector) qui repère où se forme le point lumineux réfléchi sur sa surface. Plus l’objet est proche, plus ce point se déplace sur le détecteur : c’est de la triangulation optique, pas une mesure de temps de vol — contrairement à ce qu’on lit souvent sur ce type de capteur.
Deux conséquences pratiques :
- La sortie est inversée. Tension haute quand l’objet est proche, tension basse quand il est loin.
- La sortie n’est pas linéaire. La relation suit une courbe en puissance, pas une droite : un simple calcul de proportionnalité donne des distances fausses.
- La plage est bornée par construction. En dessous de 10 cm et au-delà de 80 cm, la tension n’est plus exploitable et le calcul redonne n’importe quoi.
- La lumière directe gêne. Soleil ou lampe forte braqués sur le récepteur perturbent la mesure ; la réflectivité de l’objet, elle, influence peu, grâce à la triangulation.
Brochage et câblage
Le cordon fourni porte trois fils, dans cet ordre sur le connecteur :
| Fil rouge | Alimentation, à relier au 5 V |
|---|---|
| Fil noir | Masse, à relier au GND — la référence commune |
| Fil jaune | Sortie analogique, à relier à une entrée A0 à A5 |
Le capteur réclame au minimum 4,5 V : il ne fonctionne pas sur une alimentation 3,3 V, et sa sortie dépasserait alors la tension d’une carte fonctionnant sous 3,3 V. Sur une alimentation partagée avec des moteurs, placer un condensateur électrolytique de 10 µF entre VCC et GND, au plus près du capteur, stabilise nettement les mesures.
Applications
- Détection et évitement d’obstacles sur un robot roulant, avec la distance en continu et non un simple tout ou rien.
- Suivi d’un objet ou d’une main à courte distance : poste interactif, borne, commande sans contact.
- Détection de passage ou de présence devant un plan de travail.
- Mesure de niveau ou de position d’un objet, sans aucun contact mécanique.
- Balayage sur servomoteur pour cartographier l’espace devant un robot mobile.
Mini-projet : télémètre à affichage sur écran LCD
Un montage complet qui mesure la distance et l’affiche en clair, plusieurs fois par seconde.
Matériel nécessaire
- un Arduino Uno R3 avec son câble USB ;
- le capteur GP2Y0A21YK0F et son cordon trois fils ;
- un afficheur LCD 16×02 en I2C, quatre fils seulement ;
- une plaque d’essai 830 points et des câbles Dupont.
Câblage
| Capteur, fil rouge | → Arduino 5V |
|---|---|
| Capteur, fil noir | → Arduino GND |
| Capteur, fil jaune | → Arduino A0 |
Écran, VCC | → Arduino 5V |
Écran, GND | → Arduino GND |
Écran, SDA | → Arduino A4 |
Écran, SCL | → Arduino A5 |
Programme
La mesure est moyennée sur huit lectures, puis la tension est bornée à la plage utile avant conversion en distance.
/*
* Telemetre infrarouge - capteur Sharp GP2Y0A21YK0F (10 a 80 cm)
*
* Composants, brochage et fiche complete : www.marocproduits.com
*
* Cablage capteur : rouge sur 5V, noir sur GND, jaune sur A0
* Ecran LCD 16x02 en I2C : SDA sur A4, SCL sur A5
*/
#include "Wire.h"
#include "LiquidCrystal_I2C.h"
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int brocheCapteur = A0;
// Moyenne de huit lectures pour lisser le bruit de mesure
float lireTension() {
long somme = 0;
for (int i = 0; i != 8; i++) {
somme += analogRead(brocheCapteur);
delay(5);
}
return (somme / 8.0) * (5.0 / 1023.0);
}
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("GP2Y0A21YK0F");
lcd.setCursor(0, 1);
lcd.print("Telemetre IR");
delay(1500);
lcd.clear();
}
void loop() {
float tension = lireTension();
// Plage utile : 0,40 V a 80 cm et 2,30 V a 10 cm.
// On borne la valeur : en dehors, la distance n'est plus fiable.
tension = constrain(tension, 0.40, 2.30);
// Courbe du capteur : la tension diminue quand la distance augmente
float distance = 27.86 * pow(tension, -1.15);
lcd.setCursor(0, 0);
lcd.print("Distance :");
lcd.setCursor(0, 1);
lcd.print(distance, 1);
lcd.print(" cm");
delay(100);
}Comment ça marche
analogRead()renvoie une valeur de 0 à 1023 sur dix bits ; la multiplication par 5,0 et la division par 1023 la convertissent en volts.constrain()force la tension dans la plage utile. C’est ce qui évite d’afficher une distance absurde quand rien ne se trouve devant le capteur : sans cette borne, une tension de 0,1 V donnerait un résultat fantaisiste.pow(tension, -1.15)applique la courbe du capteur. C’est la raison pour laquelle il faut lire le fil jaune sur une entrée analogique et non numérique : toute l’information est dans la valeur de la tension.- L’écran I2C ne consomme que deux broches, les autres restent libres pour la suite du montage.
Si l’écran reste noir, vérifiez l’adresse I2C : la plupart des modules répondent en 0x27, certains en 0x3F. Le programme peut aussi être testé sans écran, en remplaçant l’affichage par une écriture sur le moniteur série.
Variante : deux autres façons de mesurer une distance
- E18-D80NK — capteur infrarouge de 3 à 80 cm, mais à sortie tout ou rien : il signale un obstacle, il ne donne pas la distance.
- Capteur à ultrasons HC-SR04 — portée bien plus large, jusqu’à 4 mètres, mais temps de réponse plus long et sensibilité aux surfaces molles ou inclinées.
Questions fréquentes
Pourquoi les mesures sont-elles fausses en dessous de 10 cm ?
Sous 10 cm, le point lumineux réfléchi sort de la zone utile du détecteur : la tension remonte et le calcul redonne une distance trop grande. Le capteur n’est pas conçu pour cette plage — il faut le reculer, ou choisir un autre capteur pour le très court terme.
La sortie est-elle linéaire ?
Non. La tension suit une courbe en puissance inverse de la distance. La formule du programme est l’approximation usuelle de ce modèle ; pour plus de précision, on étalonne le montage avec une règle et quelques points de mesure, puis on ajuste les coefficients.
Faut-il des composants en plus ?
Aucun n’est obligatoire : le module contient son propre circuit de traitement et son régulateur. Un condensateur de 10 µF entre VCC et GND améliore la stabilité lorsque l’alimentation est partagée avec des moteurs ou un servomoteur.
Peut-il mesurer la distance d’une vitre ou d’un film transparent ?
Mal : le verre laisse passer le faisceau. Pour ce type de surface, il faut une autre technologie — un capteur à réflexion directe, ou un capteur à ultrasons qui, lui, rebondit sur la matière.
À combiner avec
- un servomoteur SG90 pour faire balayer le capteur et couvrir un demi-cercle devant le robot ;
- un moteur DC avec roue pour le châssis roulant qui porte l’ensemble ;
- un buzzer actif pour signaler par un son le franchissement d’un seuil d’approche ;
- le kit de robot éviteur d’obstacles, pour comparer deux approches sur un même robot.











Avis
Il n’y a pas encore d’avis.