Code de recherche

Leçon 74 : Utilisation d'un module capteur infrarouge précis avec Arduino

Leçon 74 : Utilisation d'un module capteur infrarouge précis avec Arduino

Introduction

Ce guide montre comment utiliser deux capteurs de distance infrarouges (IR) Sharp ou plus avec un Arduino pour mesurer la distance et afficher les résultats sur le moniteur série. Bien qu'un seul capteur soit utile, de nombreuses applications réelles, comme une voiture intelligente, un bras robotique ou toute machine mobile, nécessitent des mesures de distance depuis plusieurs directions simultanément. Par exemple, vous pourriez installer un capteur à l'avant pour mesurer la distance devant, et un autre sur le côté droit ou gauche pour éviter les collisions. Ce tutoriel vous montre comment configurer votre Arduino pour gérer plusieurs capteurs efficacement, en s'appuyant sur une vidéo détaillée séparée qui explique les spécifications et le fonctionnement du capteur individuel.

Voici quelques idées de projets pratiques pour vous inspirer :

  • Construire un robot qui évite les obstacles en mesurant les distances sur ses côtés gauche, droit et avant.
  • Créer un assistant de stationnement intelligent qui utilise plusieurs capteurs pour guider un véhicule dans un espace restreint.
  • Développer un système de sécurité qui surveille une porte ou un couloir avec des capteurs placés à différents angles.
  • Réaliser une installation artistique interactive où la distance de la main d'un spectateur change ce qui est affiché.
Sharpt IR distance sensor

Dans cette vidéo, l'accent est mis sur le câblage et le code nécessaires pour faire fonctionner plusieurs capteurs IR Sharp. La démonstration utilise deux capteurs GP2Y0A21YK0F, qui mesurent des distances de 10 à 80 cm. Le code est structuré pour être facilement extensible, afin que vous puissiez ajouter un troisième, un quatrième, ou même plus de capteurs avec seulement quelques lignes de code.

Matériel et composants

Pour suivre ce projet, vous aurez besoin des composants suivants :

  • Une carte Arduino (par exemple, Uno, Mega).
  • Deux capteurs de distance IR Sharp ou plus (par exemple, GP2Y0A21YK0F).
  • Des fils de connexion (jumper wires).
  • Une plaque d'essai (breadboard) (optionnelle, pour des connexions plus faciles).

Guide de câblage

Le capteur IR Sharp a trois fils : rouge (alimentation), noir (masse) et jaune (sortie du signal). Le câblage est simple. Pour le premier capteur, connectez son fil rouge à la broche 5V de l'Arduino, le fil noir à une broche de masse (GND), et le fil jaune du signal à une broche analogique, par exemple A1. Pour le deuxième capteur, connectez son fil rouge à la même broche 5V ou à une autre, le fil noir à GND, et le fil jaune à une broche analogique différente, comme A2.

Si vous manquez de broches 5V, la vidéo propose une solution astucieuse. Vous pouvez utiliser n'importe quelle broche numérique comme source d'alimentation. Dans le code, la broche numérique 2 est configurée comme sortie et mise à HIGH, ce qui fournit un 5V constant. Vous connecteriez alors les fils rouges de vos capteurs à cette broche numérique au lieu de la broche 5V dédiée. Les fils de masse peuvent être connectés à n'importe quelle broche GND de l'Arduino. La vidéo montre une démonstration de cette configuration à [00:06:10].

Pour une référence visuelle des connexions, veuillez consulter le schéma de câblage ci-dessous :

Arduino wiring for multiple Sharp IR distance sensors
Arduino wiring for multiple Sharp IR distance sensors
Arduino wiring for Sharf IR distance sensor
Arduino wiring for Sharf IR distance sensor
Arduino wiring for Sharp IR sensor with LCD1602
Arduino wiring for Sharp IR sensor with LCD1602

Explication du code

Cette section se concentre sur les parties configurables par l'utilisateur du code, qui se trouvent toutes en haut du sketch. C'est ici que vous définirez vos broches et vos modèles de capteurs.

Premièrement, le code inclut la bibliothèque nécessaire pour les capteurs IR Sharp, #include <SharpIR.h>. Cette bibliothèque gère les calculs complexes nécessaires pour convertir la tension analogique du capteur en une lecture de distance.

Ensuite, vous définirez les broches analogiques pour chacun de vos capteurs. Le code d'exemple utilise #define IR1 A1 et #define IR2 A2. Si vous utilisez plus de deux capteurs, vous ajouteriez d'autres définitions ici, comme #define IR3 A3.

Une partie cruciale de la configuration consiste à définir le bon modèle pour votre capteur. Le code utilise #define model1 1080 et #define model2 1080. Ce nombre n'est pas arbitraire ; il indique à la bibliothèque quel capteur vous avez, car chaque modèle a une courbe tension-distance différente. Les commentaires du code fournissent une liste utile :

  • 2 à 15 cm GP2Y0A51SK0F utilisez 215
  • 4 à 30 cm GP2Y0A41SK0F / série GP2Y0AF30 utilisez 430
  • 10 à 80 cm GP2Y0A21YK0F utilisez 1080
  • 10 à 150 cm GP2Y0A60SZLF utilisez 10150
  • 20 à 150 cm GP2Y0A02YK0F utilisez 20150
  • 100 à 550 cm GP2Y0A710K0F utilisez 100550

Vous devez modifier cette valeur pour correspondre à votre capteur spécifique. Par exemple, si vous utilisiez un GP2Y0A02YK0F, vous changeriez la définition en #define model1 20150. Le code crée ensuite un objet pour chaque capteur, comme SharpIR SharpIR1(IR1, model1);. Cette ligne relie la broche et le modèle pour le premier capteur. Si vous ajoutez plus de capteurs, vous copieriez cette ligne et changeriez le nom de l'objet, la broche et le modèle en conséquence.

Dans la fonction setup(), le moniteur série est initialisé à 9600 bauds. C'est la vitesse à laquelle l'Arduino communique avec votre ordinateur. Le code inclut également une section pour utiliser une broche numérique comme source de 5V si nécessaire, comme expliqué dans la section de câblage. Cela se fait avec pinMode(2,OUTPUT); et digitalWrite(2, HIGH);.

Enfin, la fonction loop() contient la logique principale. Il y a un delay(500); au début, qui définit le temps entre chaque série de lectures à 500 millisecondes. Vous pouvez ajuster cela pour rendre les lectures plus ou moins fréquentes. Le cœur de la boucle est là où vous lisez la distance de chaque capteur en utilisant la fonction distance() de la bibliothèque, comme int dis1=SharpIR1.distance();. Les résultats sont ensuite imprimés sur le moniteur série avec un texte descriptif, comme Serial.print("Distance (1): ");, suivi de la valeur et de l'unité "cm".

Démonstration du projet en direct

Dans la vidéo, le présentateur démontre le montage avec deux capteurs. Comme vous pouvez le voir dans la démonstration à [00:07:44], le moniteur série affiche les relevés de distance des deux capteurs. Lorsqu'un objet est placé devant le premier capteur, le relevé pour « Distance (1) » change. De même, lorsqu'un objet est placé devant le deuxième capteur, le relevé pour « Distance (2) » se met à jour. La vidéo montre qu'en tenant une feuille de papier à distance, les capteurs lisent environ 23 et 24 cm. Lorsqu'un capteur est obstrué, son relevé chute à environ 17 cm, confirmant que chaque capteur fonctionne indépendamment et fournit des données de distance en temps réel pour sa direction respective. Cela valide la capacité du code à gérer plusieurs capteurs simultanément.

Chapitres

  • [00:00] Introduction à l'utilisation de plusieurs capteurs IR Sharp
  • [00:28] Applications pour plusieurs capteurs de distance
  • [01:34] Explication du code : bibliothèque et définitions de broches
  • [02:24] Configuration des modèles de capteurs et création d'objets
  • [04:15] Explication des fonctions setup et loop
  • [06:10] Guide de câblage pour plusieurs capteurs
  • [07:44] Démonstration en direct avec deux capteurs

Images

Sharpt IR distance sensor GP2Y0A21YK0F
Sharpt IR distance sensor GP2Y0A21YK0F
Arduino wiring for multiple Sharp IR distance sensors
Arduino wiring for multiple Sharp IR distance sensors
Arduino wiring for Sharf IR distance sensor
Arduino wiring for Sharf IR distance sensor
Sharpt IR distance sensor
Sharpt IR distance sensor GP2Y0A21YK0F
Arduino wiring for Sharp IR sensor with LCD1602
Arduino wiring for Sharp IR sensor with LCD1602
176-Using a Sharp IR sensor module with Arduino
Langue: C++
++
/*
 * Using two or more Sharp IR distance sensors with Arduino
 * Measure distance 

 * Download and resource page for this video https://robojax.com/RJT143
 * Watch video instructions for this video: https://youtu.be/WQ3oFyF5qeY
 * 
 * Watch main video explaining the Sharp IR distance sensor:
 * https://robojax.com?vid=robojax-sharp_IR
 * 
 * Written by Ahmad Shamshiri for Robojax.com on Saturday, December 1, 2018 
 * at 20:56 in Ajax, Ontario, Canada

 * 
  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

#include <SharpIR.h>

#define IR1 A1 // define signal pin
#define IR2 A2 // define signal pin

#define model1 1080 // for GP2Y0A21YK0F  used 1080
#define model2 1080 // for GP2Y0A21YK0F  used 1080

// Sharp IR code for Robojax.com
// ir: the pin where your sensor is attached
/*
2 to 15 cm GP2Y0A51SK0F  use 215
4 to 30 cm GP2Y0A41SK0F / GP2Y0AF30 series  use 430
10 to 80 cm GP2Y0A21YK0F  use 1080
10 to 150 cm GP2Y0A60SZLF use 10150
20 to 150 cm GP2Y0A02YK0F use 20150
100 to 550 cm GP2Y0A710K0F  use 100550
*/
SharpIR SharpIR1(IR1, model1);
SharpIR SharpIR2(IR2, model2);

void setup() {
    // Multiple Sharp IR Distance meter code for Robojax.com
 Serial.begin(9600);
 Serial.println("Robojax Sharp IR  ");

 // extra pin for 5V if needed
 pinMode(2,OUTPUT);// define pin 2 as output
 digitalWrite(2, HIGH);// set pin 2 HIGH so it always have 5V
  // Robojax.com 20181201
}

void loop() {
    // Sharp IR code for Robojax.com 20181201
    delay(500);   

  unsigned long startTime=millis();  // takes the time before the loop on the library begins

  int dis1=SharpIR1.distance();  // this returns the distance for sensor 1
  int dis2=SharpIR2.distance();  // this returns the distance for sensor 2
  // Sharp IR code for Robojax.com 20181201

  Serial.print("Distance (1): ");
  Serial.print(dis1);
  Serial.println("cm");
  
  Serial.print("Distance (2): ");
  Serial.print(dis2);
  Serial.println("cm");
     // Sharp IR code for Robojax.com
     
}
452-Lesson 74: Using Two Sharp Infrared Sensors with Arduino
Langue: C++
++
/*
  * Lesson 74: Using two or more Sharp IR distance sensors
 * Sharp IR (infrared) distance measurement module for Arduino
 * Measures the distance in cm. 
 * Written by Ahmad Shamshiri for Robojax.com 
 * on February 25, 2019 at 21:38 in Ajax, Ontario, Canada




 * Original library: https://github.com/guillaume-rico/SharpIR
 
 * Watch video instructions for this code: https://youtu.be/WQ3oFyF5qeY
 * 
 * Full explanation of this code and wiring diagram is available at
 * my Arduino Course at Udemy.com here: http://robojax.com/L/?id=62

 * Written by Ahmad Shamshiri on February 3, 2018 at 07:34
 * in Ajax, Ontario, Canada. www.robojax.com
 * 


If you found this tutorial helpful, please support me so I can continue creating 
content like this. 

or make a donation using PayPal http://robojax.com/L/?id=64



 *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

*/




 */
  // Sharp IR code for Robojax.com
#include 

#define IR A0 // define signal pin
#define model 1080 // used 1080 because model GP2Y0A21YK0F is used
// Sharp IR code for Robojax.com
// ir: the pin where your sensor is attached
// model: an int that determines your sensor:  1080 for GP2Y0A21Y
//                                            20150 for GP2Y0A02Y
//                                            430 for GP2Y0A41SK   
/*
2 to 15 cm GP2Y0A51SK0F	use 1080
4 to 30 cm GP2Y0A41SK0F / GP2Y0AF30 series	use 430
10 to 80 cm GP2Y0A21YK0F	use 1080
10 to 150 cm GP2Y0A60SZLF	use 10150
20 to 150 cm GP2Y0A02YK0F	use 20150
100 to 550 cm GP2Y0A710K0F	use 100550

*/
#include <SharpIR.h>

#define IR1 A1 // define signal pin
#define IR2 A2 // define signal pin

#define model1 1080 // for GP2Y0A21YK0F  used 1080
#define model2 1080 // for GP2Y0A21YK0F  used 1080

// Sharp IR code for Robojax.com
// ir: the pin where your sensor is attached
/*
2 to 15 cm GP2Y0A51SK0F  use 215
4 to 30 cm GP2Y0A41SK0F / GP2Y0AF30 series  use 430
10 to 80 cm GP2Y0A21YK0F  use 1080
10 to 150 cm GP2Y0A60SZLF use 10150
20 to 150 cm GP2Y0A02YK0F use 20150
100 to 550 cm GP2Y0A710K0F  use 100550
*/
SharpIR SharpIR1(IR1, model1);
SharpIR SharpIR2(IR2, model2);

void setup() {
    // Multiple Sharp IR Distance meter code for Robojax.com
 Serial.begin(9600);
 Serial.println("Robojax Sharp IR  ");

 // extra pin for 5V if needed
 pinMode(2,OUTPUT);// define pin 2 as output
 digitalWrite(2, HIGH);// set pin 2 HIGH so it always have 5V
  // Robojax.com 20181201
}

void loop() {
    // Sharp IR code for Robojax.com 20181201
    delay(500);   

  unsigned long startTime=millis();  // takes the time before the loop on the library begins

  int dis1=SharpIR1.distance();  // this returns the distance for sensor 1
  int dis2=SharpIR2.distance();  // this returns the distance for sensor 2
  // Sharp IR code for Robojax.com 20181201

  Serial.print("Distance (1): ");
  Serial.print(dis1);
  Serial.println("cm");
  
  Serial.print("Distance (2): ");
  Serial.print(dis2);
  Serial.println("cm");
     // Sharp IR code for Robojax.com
     
}

Fichiers📁

Fichier Fritzing

Autres fichiers