Afficher la valeur d’un HC-SR04 sur écran LCD I2C 16×4 avec Arduino
Description :
Projet permettant de mesurer la distance à l’aide d’un capteur ultrason HC-SR04 et d’afficher la valeur en temps réel sur un écran LCD I2C 16×4 connecté à un Arduino.
Le capteur HC-SR04 émet des impulsions ultrasonores et mesure le temps de retour pour calculer la distance jusqu’à un obstacle. L’Arduino récupère cette mesure, la convertit en centimètres ou pouces, puis l’affiche sur le LCD, offrant un retour visuel clair et instantané.
Cette configuration est idéale pour des projets de robotique, des systèmes d’alerte de proximité, ou toute application nécessitant un affichage direct des distances mesurées. Le LCD I2C simplifie le câblage tout en permettant de présenter plusieurs informations simultanément sur les 16×4 caractères.
Prérequis :
- 1 x Carte Arduino Uno
- 1 x LCD 20×4 2004 avec adaptateur d interface série IIC I2C
- 1 x HC-SR04 capteur à Ultrason
- 1 x Breadboard
- Fils de connexion
Vidéo de démonstration :
Schéma de câblage :


Code :
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 4 line display
// La broche numérique 9 est reliée à trig HC-SR04. On lui donne le nom trigPin.
int trigPin = 9;
// La broche numérique 8 est reliée à echo HC-SR04. On lui donne le nom echoPin.
int echoPin = 8;
// Déclaration variable duration qui va servir à stocker une valeur au format long.
long duration;
// Déclaration variable distance qui va servir à stocker une valeur au format float.
float distance;
void setup() {
lcd.init();
lcd.backlight();
// Définit trigPin comme sortie.
pinMode(trigPin, OUTPUT);
// Définit echoPin comme entrée.
pinMode(echoPin, INPUT);
// placer le curseur sur la colonne 5, ligne 0
lcd.setCursor(5, 0);
// Imprime un message
lcd.print("Distance :");
}
void loop() {
// Debut de la mesure avec un signal de 10 µS applique sur trigPin //
digitalWrite(trigPin, LOW); // On efface l'etat logique de trigPin
delayMicroseconds(2);
// Met la broche numérique trigPin sur ON
digitalWrite(trigPin, HIGH);
// On attend 10 millisecondes
delayMicroseconds(10);
// Met la broche numérique trigPin sur OFF
digitalWrite(trigPin, LOW);
// On lit le temps d'impulsion sur echoPin et on stock la valeur dans la variable duration
duration = pulseIn(echoPin, HIGH);
// On calcule la distance par rapport à la durée de l'impulsion
// Puis on stocke la valeur dans la variable distance
distance = duration * 0.034 / 2;
// Si distance <= 50 cm on exécute les actions entre {}
if (distance <= 50) {
// placer le curseur sur la colonne 0, ligne 1
// (note : la ligne 0 est la première ligne, puisque le comptage commence par 0):
lcd.setCursor(4, 2);
// Imprime des espaces pour effacer ancienne valeur.
lcd.print(" ");
// placer le curseur sur la colonne 0, ligne 1
lcd.setCursor(6, 2);
// Imprime la distance qui est stockée dans distance
lcd.print(distance);
// Imprime un message
lcd.print(" cm");
}
// Sinon on exécute les actions entre {}
else {
// ETC ...
lcd.setCursor(4, 2);
lcd.print("Hors portee");
}
// Attend 500 millisecondes.
delay(500);
}
