Code de recherche

Code Arduino et vidéo pour le module de distance IR Sharp avec LCD1602 et module I2C

Code Arduino et vidéo pour le module de distance IR Sharp avec LCD1602 et module I2C

Ce guide de projet vous accompagnera pas à pas dans la construction d'un système de mesure de distance simple mais efficace utilisant un capteur de distance infrarouge (IR) Sharp et un écran LCD1602. Cette configuration vous permet de mesurer avec précision des distances dans une plage spécifique et de les afficher directement sur un écran, ce qui la rend idéale pour diverses applications d'électronique DIY.

Sharpt IR distance sensor

Des exemples d'utilisation pratiques et des idées de projets pour ce système incluent :

  • Construire un système d'aide au stationnement automatisé pour prévenir les dommages aux pare-chocs.
  • Créer un capteur simple de niveau d'eau pour réservoirs ou puits.
  • Développement d'un distributeur de liquide sans contact.
  • Mise en œuvre d'une alarme de sécurité basique détectant la proximité.
  • Création d'un indicateur de niveau de remplissage pour trémies ou bennes.
  • Conception d'un système d'évitement des collisions pour petits robots ou véhicules télécommandés.

Matériel/Composants

Pour mener à bien ce projet, vous aurez besoin des composants suivants :

  • Carte Arduino Uno ou carte compatible
  • Capteur de distance infrarouge Sharp (modèle GP2Y0A41SK0F, mesurant 4 à 30 cm)
  • LCD1602 avec module I2C (pour un câblage facile)
  • Plaque d'essai (optionnelle, pour le prototypage)
  • Fils de connexion
  • Câble USB pour l'alimentation et la programmation de l'Arduino

Guide de câblage

Arduino wiring for Sharp IR sensor with LCD1602
Arduino wiring for Sharp IR sensor with LCD1602

Brancher le capteur IR Sharp et l'écran LCD1602 équipé d'un module I2C à votre Arduino est simple, grâce au module I2C qui réduit le nombre de fils nécessaires pour l'écran.

Le capteur IR Sharp a trois fils : rouge (5V), noir (masse) et jaune (sortie). Branchez le fil rouge à la broche 5V de l'Arduino, le fil noir à n'importe quelle broche GND de l'Arduino, et le fil jaune de sortie à la broche analogique A0 de l'Arduino (dans la vidéo à 03:55).

Le LCD1602 avec module I2C comporte quatre fils : VCC, GND, SDA et SCL. Connectez la broche VCC au 5V de l'Arduino, et la broche GND à la masse (GND) de l'Arduino. Le fil SDA (ligne de données série) doit être connecté à la broche analogique A4 de l'Arduino, et le fil SCL (ligne d'horloge série) doit être connecté à la broche analogique A5 de l'Arduino (dans la vidéo à 02:42).

Explication du code

Le code Arduino fourni utilise deux bibliothèques principales :Wire.hpour la communication I2C etLiquidCrystal_I2C.hpour contrôler l'écran LCD, etSharpIR.hPour le capteur infrarouge Sharp. Les parties du code configurables par l'utilisateur sont principalement liées à la définition du capteur et à l'initialisation de l'écran LCD.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

La ligneLiquidCrystal_I2C lcd(0x27, 16, 2);initialise l'objet LCD. Le premier paramètre,0x27(dans la vidéo à 03:26), est l'adresse I2C par défaut pour la plupart des modules LCD I2C basés sur PCF8574. Si votre LCD ne fonctionne pas, vous devrez peut-être trouver sa bonne adresse (les alternatives courantes sont0x3F). Le deuxième paramètre,16, spécifie que votre écran LCD comporte 16 caractères par ligne, et le troisième paramètre,2, indique qu'il comporte 2 lignes.

#include <SharpIR.h>

#define IR A0 // define Sharp IR signal pin
#define model 430 // the model of the IR module
// Sharp IR code for Robojax.com
// ir: the pin where your sensor is attached
// model: an int that determines your sensor:
/*
 * GP2Y0A02YK0F --> "20150"
 GP2Y0A21YK --> "1080"
 GP2Y0A710K0F --> "100500"
  GP2YA41SK0F --> "430"
 */

SharpIR SharpIR(IR, model);

Ces lignes configurent le capteur IR Sharp.#define IR A0définit la broche analogique de l'Arduino où est connecté le fil de sortie du capteur Sharp IR#define model 430(dans la vidéo à 04:27) est crucial car il spécifie le modèle exact de votre capteur Sharp IR. La bibliothèque utilise ce numéro de modèle pour appliquer la conversion mathématique correcte de la tension analogique de sortie du capteur vers une distance en centimètres. Le bloc de commentaires répertorie divers modèles Sharp IR et leurs valeurs entières correspondantes qui doivent être utilisées ici. Par exemple, si vous utilisiez un GP2Y0A21YK, vous le changeriez430à1080.

void setup()
{
  lcd.begin();
  lcd.backlight();
}

Dans lesetup()fonction,lcd.begin()initialise l'écran LCD, etlcd.backlight()allume son rétroéclairage, rendant l'écran visible.

void loop()
{
  lcd.clear();
  lcd.print("Robojax IR Test");
  lcd.setCursor (0,1); // go to start of 2nd line
  int dis=SharpIR.distance();// gets the distance in cm
  String distance = String(dis);
  distance ="Distance: "+distance+"cm";
  lcd.print(distance);
  delay(500);
}

À l'intérieur deloop()fonction :

  • lcd.clear();efface tout texte précédent affiché sur l'écran.
  • lcd.print("Robojax IR Test");affiche un message statique sur la première ligne.
  • lcd.setCursor (0,1);déplace le curseur au début de la deuxième ligne (0 correspond à la première colonne, 1 à la deuxième ligne, car les lignes sont indexées à partir de 0).
  • int dis=SharpIR.distance();appelle ledistance()Fonction de la bibliothèque SharpIR pour lire la valeur du capteur et la convertir en un entier représentant la distance en centimètres (dans la vidéo à 05:06). C'est la fonction principale pour obtenir la mesure.
  • String distance = String(dis);convertit la distance entière en une chaîne de caractères, car vous ne pouvez pas concaténer directement des entiers avec des chaînes pour l'affichage.
  • distance ="Distance: "+distance+"cm";formate la chaîne pour inclure "Distance : " avant la valeur et "cm" après.
  • lcd.print(distance);affiche la chaîne de distance formatée sur l'écran LCD.
  • delay(500);Introduit une pause de 500 millisecondes (dans la vidéo à 06:00). Ce délai est important pour la précision et la stabilité du capteur Sharp. Vous pouvez ajuster cette valeur : l'augmenter peut améliorer la précision mais ralentir les mises à jour, tandis que la diminuer accélérera les mises à jour mais risque de réduire la précision.

Projet en direct / démonstration

Une fois les composants câblés et le code téléversé sur votre Arduino, le système commencera à mesurer et à afficher les distances. Le projet démontre des mesures précises à de courtes distances : par exemple, il affiche 12 cm lorsque l'objet est à 12 cm (dans la vidéo à :31) et 10 cm lorsque l'objet est à 10 cm (dans la vidéo à :37).

Cependant, à mesure que l'objet s'éloigne, en particulier au-delà de 15-20 cm, la précision peut diminuer. Par exemple, à 20 cm, l'affichage peut indiquer 21 cm (dans la vidéo à 07:06), et à 25 cm, il peut indiquer 28 ou 29 cm (dans la vidéo à 07:32). Ce comportement est caractéristique de ces capteurs infrarouges. Le capteur IR Sharp fournit une tension analogique qui varie avec la distance : à mesure que la distance augmente, la tension de sortie diminue (dans la vidéo à 07:56).

La relation entre la distance et la tension de sortie est non linéaire, surtout aux extrémités de la plage du capteur. Cette non-linéarité explique pourquoi la bibliothèque SharpIR est utile, car elle contient des données d'étalonnage permettant de convertir ces tensions variables en mesures de distance plus précises. Pour les applications nécessitant une précision plus élevée à plus longue portée, il peut être nécessaire de choisir un autre modèle Sharp IR conçu pour ces distances ou d'implémenter des courbes d'étalonnage personnalisées.

Chapitres

  • [00:06] Introduction et aperçu du projet
  • [01:10] Détails et brochage du capteur infrarouge Sharp
  • [02:09] Câblage du module LCD I2C
  • [02:58] Explication du code Arduino
  • [06:36] Démonstration de la mesure de distance
  • [07:47] Caractéristiques des capteurs et limites de précision
  • [08:48] Remarques finales et ressources

Images

LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
Sharpt IR distance sensor GP2Y0A21YK0F
Sharpt IR distance sensor GP2Y0A21YK0F
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
70-This is the Arduino code and video for a Sharp Infrared Sensor Module with LCD1602 and I2C.
Langue: C++
/*
 * Sharp IR  555 (infrared) distance measurement module with LCD1602 and I2C for Arduino
 * Measures the distance in cm.

 * Watch the video https://youtu.be/RHgMwtKLEnE

 *  * 

Original library: https://github.com/guillaume-rico/SharpIR


// Written and updated by Ahmad for Robojax.com
// on January 3, 2018 at 20:01 in Ajax, Ontario, Canada
// Get this code and other Arduino codes from Robojax.com
// Learn Arduino step by step in a structured course with all material, wiring diagrams, and libraries
// all in one place. 

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/>.

*/




#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

///////////////////***** start of Sharp IR
#include <SharpIR.h>

#define IR A0 // define Sharp IR signal pin
#define model 430 // the model of the IR module
// Sharp IR code for Robojax.com
// ir: the pin where your sensor is attached
// model: an int that determines your sensor:
/*
 * GP2Y0A02YK0F --> "20150"
 GP2Y0A21YK --> "1080"
 GP2Y0A710K0F --> "100500"
  GP2YA41SK0F --> "430"
 */

SharpIR SharpIR(IR, model);
/////////////////////**** end of Sharp IR

void setup()
{
  // Robojax code for LCD with I2C
  // initialize the LCD, 
  lcd.begin();
 
  // Turn on the backlight and print a message.
  lcd.backlight();
  // Robojax code for LCD with I2C


}

void loop()
{
  
  //start of loop Robojax code for LCD with I2C
  lcd.clear();
  lcd.print("Robojax IR Test");
  lcd.setCursor (0,1); // go to start of 2nd line
 int dis=SharpIR.distance();// gets the distance in cm
 String distance = String(dis);
 distance ="Distance: "+distance+"cm";
 lcd.print(distance);
  //lcd.print(millis() / 1000);
  delay(500);
 //end of loopcode Robojax code for LCD with I2C
}

Ce dont vous pourriez avoir besoin

Ressources et références

Aucune ressource pour le moment.

Fichiers📁

Bibliothèques Arduino (zip)

Fichier Fritzing