Mesurer la distance en utilisant l’infra rouge avec le module Sharp IR et Arduino
Sponsorisé par DigitSpace
Produits utilisés : Capteur de proximité Sharp IR et écran OLED 0.96″ 128×64 Bleu/Jaune
Bonjour et bienvenue dans ce projet sponsorisé par DigitSpace, et il s’agit de mesurer une distance en utilisant le capteur de proximité Sharp IR GP2Y0A02YK0F. Les mesures sont effectuées dans les systèmes métrique et impérial, et nous utiliserons un écran OLED, ce qui offre de nombreuses possibilités : afficher les mesures avec différentes unités en même temps, passer de l’une à l’autre…
Le capteur émet des faisceaux de lumière infrarouge, qui sont réfléchis par des objets sur le capteur. La sortie peut être numérique, comme le module FC 51 IR, ce qui signifie qu’à une certaine distance, il vous donnera un niveau HAUT ou BAS, ou comme celui que nous utilisons ici, qui a une sortie analogique : Il vous donne une valeur de tension en fonction de la distance à laquelle l’objet est détecté, mais n’oubliez pas que cela dépend de la réflectivité de l’objet et des conditions d’éclairage.


Comme vous pouvez le voir, le capteur a un émetteur et un récepteur, et son look permet de le placer sur une tête de robot par exemple.
La plage de détection de capteur est entre 20 cm et 120 cm, peut être affecté par l’éclairage et l’objet à détecter, il faut d’abord tester le capteur vous même et tester le minimum et le maximum.
Dans notre projet on va aussi utiliser un afficheur OLED, Si vous voulez savoir comment utiliser l’afficheur OLED veuillez visiter ce tuto.

Schémas de câblage
Schéma 1: Branchement direct
Le capteur a trois broches Vcc/Gnd/Signal, le signal est analogique comme mentionné avant.

Schéma 2: Ajout de l’afficheur OLED
On ajouter l’afficheur OLED qui est alimenté en 3.3V et qui utilise SDA/SCL avec A4/A5, on ajoute aussi un bouton poussoir. Pour le bouton poussoir, j’aime utiliser ce câblage, et dans le code j’active le pull-up interne, le bouton est toujours à l’état HIGH et quand j’appuie il passe à l’état LOW, vous pouvez utiliser la méthode habituelle mais vous devez le câbler avec 5v et ajouter une résistance pull-down puis définir le pinMode comme Input only et dans le code activer l’état à l’état HIGH au lieu de LOW.

Librairies
Voici les libraries que j’ai utilisé:
- Capteur de proximité Sharp IR: Vous pouvez télécharger la librairie ici.
- Afficheur OLED: Adafruit SSD1306: Vous pouvez télécharger la librairie depuis Github ici, ou bien télécharger directement par ici.
- Afficheur OLED: Adafruit GFX-library: Vous pouvez télécharger la librairie depuis Github ici, ou bien télécharger directement par ici.
Vous pouvez toujours chercher les librairies qui vous conviennent vous même soit sur le gestionnaire de librairies de l’IDE soit sur les moteurs de recherches. Juste veiller à ne pas avoir deux librairies portante le même nom.
Codes
Vous pouvez copier les code ci-dessous ou bien les télécharger ici.
Code 1: Exemple de librairie modifié
On mesure et on affiche la distance sur le moniteur série en “cm”.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
/* Ceci est un code à utiliser avec Sharp IR capteur infrarouge de proximité * On mesure la distance et on l'affiche sur le moniteur série * Veuillez visiter https://SurtrTech.com pour plus de détail */ #include <SharpIR.h> //Librairie du capteur #define ir A0 //Broche sortie du capteur #define model 20150 //ou 1080 dépend du modèle il signifie la plage en cm 20-150 ou 10-80 //1080 pour GP2Y0A21Y //20150 pour GP2Y0A02Y String Data; //Chaine à afficher SharpIR IR_prox(ir,model); //instance du capteur void setup() { Serial.begin(9600); } void loop() { int dis_cm=IR_prox.distance(); //Mesurer la distance et l'enregistrer Data = "Distance = "+String(dis_cm)+(" cm"); Serial.println(Data); //On affiche la chaine e.g "Distance = 40 cm" delay(2000); //On repète chaque 2s } |
Code 2: Utilisation de l’afficheur OLED
Au lieu du moniteur série, on affiche la distance mesurée sur l’afficheur OLED, le bouton poussoir permet de changer du système métrique au système impérial.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
/* Ceci est un code à utiliser avec Sharp IR capteur infrarouge de proximité et afficheur OLED 128*64 + bouton poussoir * On mesure la distance et on l'affiche sur l'OLED, aussi le bouton poussoir permet de changer l'unité * Veuillez visiter https://SurtrTech.com pour plus de détail */ #include <SharpIR.h> //Librairies #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 //Résolutions OLED #define SCREEN_HEIGHT 64 #define OLED_RESET -1 #define ir A0 //Broche sortie du capteur #define model 20150 //ou 1080 dépend du modèle il signifie la plage en cm 20-150 ou 10-80 //1080 pour GP2Y0A21Y //20150 pour GP2Y0A02Y #define Button1 2 //Bouton poussoir bool Button1_state; //état du bouton, appuyé ou non short State=1; //Variable pour changer l'unité SharpIR IR_prox(ir,model); Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); void setup() { pinMode(Button1, INPUT_PULLUP); //Bouton poussoir, j'active la résistance de pullup interne display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); display.display(); delay(2000); } void loop() { int dis_cm=IR_prox.distance(); //Mesurer la distance Button1_state=digitalRead(Button1); //Vérifier l'état du bouton poussoir if(Button1_state==LOW){ //Si le bouton est appuyé if(State<3) //On véirifie la valeur actuelle de "State" State+=1; //Si inférieur à 3 on incrémente par 1 else //Si c'est 3 on retourne à 1 State=1; delay(200); //un délai est nécessaire pour ne pas lire l'état du bouton plusieurs fois } display.clearDisplay(); display.setCursor(20,20); if(State==1){ //En dépendant de la variable "State" on va afficher en une unité spécifique display.print(dis_cm*10); //On convertit la distance avant de l'afficher display.print(" mm"); } if(State==2){ display.print(dis_cm); display.print(" cm"); } if(State==3){ display.setTextSize(1); display.setCursor(40,0); display.print("USA Baby"); //Was just messing up you can remove it of course :D :D display.setTextSize(2); display.setCursor(20,20); float in_m=dis_cm/2.54; //Conversion à "inch" display.print(in_m); display.print(" in"); } display.display(); delay(50); display.clearDisplay(); } |
Résultats
Résultat 1:
On téléverse le code 1 et on ouvre le moniteur série.

Problème du capteur:
Le problème avec le module est qu’à des distances inférieures à 20 cm il commence à donner des valeurs étranges (40 cm 35 cm…) ce qui n’est pas approprié pour des applications à courte portée.
OU SUIS-JE LE SEUL À AVOIR CE PROBLÈME ? Alors testez et dites-moi.

Résultat 2:
On téléverse le code 2, et on appuie sur le bouton poussoir afin de changer l’unité de mesure.



C’est tout pour ce module, le seul soucis étant que le capteur ne donne pas d’alerte ou de valeur stable lorsqu’il mesure moins de 20cm, mais plutôt des fausses lectures….
Un grand merci à DigitSpace pour leur sponsoring.
Categories
Yassine View All
Automation and Electrical Engineer, Electronics amateur trying to share my little projects.

One thought on “Mesurer la distance en utilisant l’infra rouge avec le module Sharp IR et Arduino” Leave a comment ›