Ce guide complet est votre ressource unique pour explorer tout ce qu'il y a à savoir sur le HC-SR04. Nous commencerons par les bases, en comprenant son principe de fonctionnement fondamental, qui est la clé pour libérer son potentiel. Ensuite, nous aborderons des aspects importants tels que ses principales spécifications, comment l'interfacer avec des microcontrôleurs populaires, et nous nous plongerons même dans des scénarios d'utilisation avancés. À la fin de ce guide, vous serez parfaitement équipé pour exploiter tout le potentiel du HC-SR04 dans vos propres projets.
Qu'est-ce que le module capteur à ultrasons HC-SR04 ?
Le module capteur à ultrasons HC-SR04 est un dispositif remarquable et très polyvalent qui s'est taillé une place de choix dans le vaste paysage des projets électroniques. Ce qui le distingue vraiment, c'est son rapport qualité-prix, une caractéristique qui le rend accessible à un large éventail d'utilisateurs, des amateurs soucieux de leur budget aux professionnels à la recherche d'une solution abordable pour leurs projets.

Spécifications techniques
Il est essentiel de bien comprendre les spécifications techniques du module capteur à ultrasons HC-SR04 pour toute mise en œuvre de projet. Voici le tableau des spécifications techniques :
Explication :
- Portée : Le HC – SR04 a une portée opérationnelle allant de 2 cm à 400 cm (0,8 pouce à 157 pouces). Cette portée relativement large le rend adapté à une grande variété d'applications. Par exemple, dans un projet de robotique à petite échelle où le robot doit se déplacer dans une pièce, la portée de 2 à 400 cm permet de détecter efficacement les meubles ou les murs à proximité. Dans une application industrielle à plus grande échelle, il peut être utilisé pour mesurer la distance entre les composants d'une machine dans cette plage. Cependant, il est important de noter que la précision peut varier légèrement aux extrémités de cette plage.
- Résolution : avec une résolution de 0,3 cm, le HC-SR04 peut fournir des mesures de distance assez précises. Ce niveau de précision est suffisant pour la plupart des amateurs et de nombreuses applications industrielles. Dans un projet lié à l'impression 3D où le capteur est utilisé pour détecter la distance par rapport au plateau d'impression afin de permettre un nivellement automatique, la résolution de 0,3 cm permet de s'assurer que la tête d'impression se trouve à la bonne hauteur au-dessus du plateau, ce qui garantit des impressions de haute qualité.
- Alimentation électrique : il fonctionne avec une alimentation électrique de 5 V CC. Pendant son fonctionnement, il consomme un courant de 15 mA, ce qui représente une consommation d'énergie relativement faible. En mode veille, la consommation de courant est encore plus faible, inférieure à 2 mA. Cela en fait un choix économe en énergie pour les projets alimentés par batterie. Par exemple, dans un nœud de capteur IoT alimenté par batterie qui utilise le HC-SR04 pour la détection de distance, la faible consommation d'énergie garantit que la batterie peut durer plus longtemps.
- Angle de fonctionnement : l'angle de fonctionnement du HC-SR04 est inférieur à 15°. Cela signifie que le capteur a un champ de vision relativement étroit. Il est plus efficace pour détecter les obstacles qui se trouvent directement devant lui. Dans un système de sécurité domestique intelligent où le capteur est utilisé pour détecter les intrus qui s'approchent d'une porte, l'angle de fonctionnement étroit permet une détection ciblée des objets qui se dirigent directement vers le capteur, réduisant ainsi les fausses alarmes provenant d'objets situés dans la zone périphérique.
- Interface : le module dispose d'une interface à 4 broches, qui comprend les broches VCC, GND, Trig et Echo. La conception simple de cette interface facilite la connexion à divers microcontrôleurs et autres composants électroniques.
Explication du brochage
Raspberry Pi : 5V (masse commune avec le module)
▶ Impulsion HAUTE de 10 μs pour lancer la mesure
▶ Niveau BAS pour réinitialiser
Raspberry Pi : n'importe quel GPIO (p. ex. GPIO17)
▶ Durée à l'état HAUT = temps d'aller-retour des ondes ultrasonores
▶ Durée HAUTE maximale : 38 ms (délai d'expiration en l'absence d'obstacle)
Raspberry Pi : GPIO avec **diviseur de tension** (5 V→3,3 V)
Raspberry Pi : GND
Explication :
La broche Echo est la clé pour obtenir les informations de distance. Une fois les ondes ultrasonores émises, la broche Echo passe à l'état haut. Elle reste à l'état haut jusqu'à ce que les ondes réfléchies soient reçues par le récepteur ultrasonique. La durée pendant laquelle la broche Echo est à l'état haut est directement proportionnelle au temps mis par les ondes ultrasonores pour faire l'aller-retour vers l'obstacle. En mesurant cette durée, nous pouvons calculer la distance par rapport à l'obstacle à l'aide de la formule . Dans un projet Arduino basé sur le C++, vous pouvez utiliser la fonction pulseIn() pour mesurer la durée de l'impulsion à l'état haut sur la broche Echo.
Composants principaux et principe de fonctionnement
Composants clés
- Émetteur à ultrasons : il s'agit du composant responsable de la première étape du processus de mesure de la distance. Il émet des ondes ultrasonores à une fréquence de 40 kHz. Ces ondes à haute fréquence sont inaudibles pour l'oreille humaine, mais elles sont essentielles au fonctionnement du capteur. Lorsqu'il est déclenché, l'émetteur envoie ces ondes dans l'environnement environnant. Considérez-le comme un haut-parleur puissant qui émet des ondes sonores à une fréquence bien supérieure à celle que nous pouvons entendre. Dans une application robotique, par exemple, l'émetteur à ultrasons d'un robot enverrait ces ondes de 40 kHz dans la direction dans laquelle le robot se déplace, se préparant à détecter tout obstacle sur son chemin.
- Récepteur à ultrasons : comme son nom l'indique, le récepteur à ultrasons a pour fonction de capter les ondes ultrasonores qui ont été réfléchies par les obstacles se trouvant dans le champ d'action du capteur. Une fois que l'émetteur a envoyé les ondes, celles-ci se propagent dans l'air jusqu'à ce qu'elles rencontrent un objet. Les ondes rebondissent alors, et c'est au récepteur de capter ces ondes réfléchies. Il s'agit en quelque sorte d'un microphone très sensible capable de détecter les échos les plus faibles des ondes ultrasonores. Dans un système domotique où le HC-SR04 est utilisé pour détecter la présence d'une personne dans une pièce, le récepteur capterait les ondes qui rebondissent sur le corps de la personne.
- Circuit de commande : C'est le cerveau derrière l'opération. Le circuit de commande gère l'ensemble de la séquence de traitement du signal. Il coordonne les actions de l'émetteur et du récepteur. Lorsqu'il reçoit un signal de déclenchement, il ordonne à l'émetteur d'émettre les ondes ultrasonores. Il surveille ensuite attentivement le récepteur pour détecter les ondes réfléchies entrantes. Une fois les ondes reçues, le circuit de commande calcule le temps qu'elles ont mis pour atteindre l'obstacle et revenir. À partir de ce temps et de la vitesse connue du son dans l'air, il calcule la distance jusqu'à l'obstacle. Dans un environnement industriel, le circuit de commande d'un HC-SR04 utilisé pour des machines automatisées gère précisément ces opérations afin de garantir des mesures de distance précises pour le bon fonctionnement des machines.
Comment ça marche
Maintenant que nous connaissons les composants clés, examinons étape par étape comment le HC-SR04 mesure réellement la distance.
Signal de déclenchement :
Le processus commence par un signal de déclenchement. Lorsqu'une impulsion haute de 10 μs est appliquée à la broche Trig (déclencheur) du module HC-SR04, cela revient à donner au capteur une commande de « démarrage ». Cette impulsion électrique courte mais significative déclenche toute la séquence de mesure de distance. Par exemple, dans un projet basé sur Arduino, vous utiliseriez une simple ligne de code pour envoyer cette impulsion haute de 10 μs à la broche Trig du HC-SR04, lui indiquant de commencer le processus de mesure.
Wave Propagation:
Une fois déclenché, l'émetteur ultrasonique entre en action. Le module envoie une rafale de 8 impulsions ultrasoniques à une fréquence de 40 kHz. Ces impulsions sont comme une série de « balles soniques » invisibles qui sont projetées dans l'environnement. Après avoir envoyé ces impulsions, le module passe en mode veille, attendant patiemment que les ondes heurtent un obstacle et rebondissent. Dans un scénario réel, si vous utilisiez le HC-SR04 pour mesurer la distance par rapport à un mur dans une pièce, les 8 impulsions se déplaceraient vers le mur, se propageant en forme de cône avec un angle relativement étroit d'environ 15 degrés.
Détection d'écho :
La broche Echo est essentielle pour détecter les ondes réfléchies. Dès que les ondes ultrasonores sont émises, la broche Echo passe à l'état haut. C'est ainsi que le capteur indique qu'il a commencé le processus de mesure. Il attend ensuite le retour des ondes réfléchies. Lorsque le récepteur ultrasonore capte les ondes réfléchies, la broche Echo passe à l'état bas. La durée pendant laquelle la broche Echo reste à l'état haut est égale au temps de trajet aller-retour des ondes ultrasonores. Dans un projet Raspberry Pi, vous utiliseriez une fonction pour mesurer le temps pendant lequel la broche Echo est activée, ce qui est une étape cruciale dans le calcul de la distance.
Calcul de distance :
Calcul de la distance : La dernière étape consiste à calculer la distance par rapport à l'obstacle. La formule pour calculer la distance en centimètres est . Le facteur 0,0343 provient de la vitesse du son dans l'air, qui est d'environ 343 m/s. Comme les ondes font l'aller-retour vers l'obstacle, nous divisons la distance totale parcourue par 2 pour obtenir la distance simple (aller) jusqu'à l'obstacle. Par exemple, si le temps mesuré pour que la broche Echo soit à l'état haut est de 2000 µs, la distance sera calculée comme suit : cm. Ce calcul est le même que vous utilisiez le HC-SR04 dans un projet de loisir simple ou dans une application industrielle complexe.
Interfaçage avec les microcontrôleurs courants
Guide d'installation Arduino
Schéma de câblage
- VCC : connectez la broche VCC du HC-SR04 à la broche 5V de l'Arduino. Cela fournit l'alimentation nécessaire au module capteur. Une alimentation stable de 5V provenant de l'Arduino garantit le fonctionnement optimal du capteur.
- GND : la broche GND (masse) du HC-SR04 doit être connectée à la broche GND de l'Arduino. Cela établit une référence de masse commune pour le capteur et l'Arduino, ce qui est essentiel pour une communication électrique correcte.
- Trig : connectez la broche Trig (déclencheur) du HC-SR04 à la broche numérique 2 de l'Arduino. C'est la broche à laquelle l'Arduino enverra l'impulsion de niveau haut de 10 μs pour déclencher le processus de mesure de distance dans le HC-SR04.
- Echo : la broche Echo du HC-SR04 est connectée à la broche numérique 3 de l'Arduino. L'Arduino lira l'impulsion de haute durée sur cette broche pour calculer la distance jusqu'à l'obstacle.
HC - SR04 Arduino
VCC ------------ 5V
GND ------------ GND
Trig ------------ Digital Pin 2
Echo ------------ Digital Pin 3
Exemple de code
const int trigPin = 2;
const int echoPin = 3;
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
float distance = duration * 0.0343 / 2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
delay(500);
}
Dans la fonction setup, nous initialisons d'abord la communication série à une vitesse de 9600 bauds, ce qui nous permet de visualiser les lectures de distance dans le Moniteur série d'Arduino. Ensuite, nous définissons la broche trigPin comme une broche de sortie et la broche echoPin comme une broche d'entrée.
Dans la fonction loop, nous commençons par mettre la broche trigPin à l'état LOW pendant 2 microsecondes pour garantir un démarrage propre. Ensuite, nous la mettons à l'état HIGH pendant 10 microsecondes pour déclencher l'émetteur ultrasonique du HC-SR04. Après cela, nous remettons la broche trigPin à l'état LOW.
La fonction pulseIn() est ensuite utilisée pour mesurer la durée de l'impulsion à l'état haut sur la broche echoPin. Cette durée représente le temps pris par les ondes ultrasonores pour faire l'aller-retour jusqu'à l'obstacle. Nous calculons ensuite la distance à l'aide de la formule distance = duration * 0.0343 / 2, où 0,0343 est la vitesse du son en cm/μs et nous divisons par 2 parce que les ondes font l'aller-retour vers l'obstacle.
Enfin, nous affichons la distance calculée dans le Moniteur série et ajoutons un délai de 500 millisecondes avant la mesure suivante.
Conseils
- Mesure précise de la durée :
Lorsque vous utilisez la fonction pulseIn(), il est important de noter qu'elle mesure la durée d'une impulsion. Dans le cas du HC-SR04, il s'agit du temps pendant lequel la broche Echo est à l'état haut. Pour garantir des mesures précises, assurez-vous qu'il n'y a pas d'autres interférences électriques susceptibles d'affecter la durée de l'impulsion. Sachez également que si l'obstacle est trop éloigné, l'impulsion peut expirer. Vous pouvez définir une valeur de délai d'attente dans la fonction pulseIn() pour gérer ces cas élégamment. Par exemple, long duration = pulseIn(echoPin, HIGH, 20000); où 20000 est la valeur du délai d'attente en microsecondes.
- Éviter les sources de bruit :
Les ondes ultrasoniques peuvent être affectées par des sources de bruit intense. Lorsque vous placez le HC-SR04 dans votre projet, évitez les zones où le bruit est intense, comme à proximité de haut-parleurs ou dans un environnement industriel très bruyant. Le bruit peut interférer avec les ondes ultrasoniques émises par le capteur, ce qui peut entraîner des mesures de distance inexactes. Si vous devez utiliser le capteur dans une zone bruyante, envisagez d'utiliser des matériaux insonorisants ou des boîtiers pour protéger le capteur du bruit.
Intégration Raspberry Pi
Attention à la tension
Pour résoudre ce problème, vous pouvez utiliser un circuit diviseur de tension. Un simple diviseur de tension utilisant une résistance de 1 kΩ et une de 2 kΩ peut être utilisé pour convertir la sortie 5V de la broche Echo du HC-SR04 en un signal compatible 3,3V pour le Raspberry Pi. La formule pour calculer la tension de sortie d'un diviseur de tension est , où est la tension d'entrée (5V dans ce cas), est la première résistance (1 kΩ), et est la seconde résistance (2 kΩ). En remplaçant par les valeurs, nous obtenons , ce qui se trouve dans la plage de sécurité pour la broche GPIO du Raspberry Pi.
Câblage
- VCC : Connectez la broche VCC du HC-SR04 à la broche 5V du Raspberry Pi. Cela permet d'alimenter le module capteur HC-SR04.
- GND : la broche GND du HC-SR04 doit être connectée à la broche GND du Raspberry Pi afin d'établir une masse commune.
- Trig : Connectez la broche Trig du HC-SR04 à la broche GPIO 17 du Raspberry Pi. Le Raspberry Pi utilisera cette broche pour envoyer l'impulsion de déclenchement de niveau haut de 10 μs au HC-SR04.
- Echo : la broche Echo du HC-SR04, après être passée par le circuit diviseur de tension (résistances de 1 kΩ et 2 kΩ), est connectée à la broche GPIO 27 du Raspberry Pi. Le Raspberry Pi lira l'impulsion de haute durée sur cette broche pour calculer la distance.
HC - SR04 Raspberry Pi
VCC ------------ 5V
GND ------------ GND
Trig ------------ GPIO 17
Echo (through voltage divider) ------------ GPIO 27
Code Python
import RPi.GPIO as GPIO
import time
# Set the GPIO mode
GPIO.setmode(GPIO.BCM)
# Define the pins
TRIG = 17
ECHO = 27
# Set up the pins
GPIO.setup(TRIG, GPIO.OUT)
GPIO.setup(ECHO, GPIO.IN)
def measure_distance():
# Send a 10μs high - level pulse to trigger the sensor
GPIO.output(TRIG, True)
time.sleep(0.00001)
GPIO.output(TRIG, False)
# Wait for the echo to start
while GPIO.input(ECHO)==0:
pulse_start = time.time()
# Wait for the echo to end
while GPIO.input(ECHO)==1:
pulse_end = time.time()
pulse_duration = pulse_end - pulse_start
distance = pulse_duration * 17150 # Speed of sound in cm/s divided by 2
distance = round(distance, 2)
return distance
try:
while True:
dist = measure_distance()
print(f"Distance: {dist} cm")
time.sleep(1)
except KeyboardInterrupt:
print("Measurement stopped by User")
GPIO.cleanup()
Dans ce code, nous importons d'abord les bibliothèques nécessaires : RPi.GPIO pour contrôler les broches GPIO du Raspberry Pi et time pour ajouter des délais. Nous configurons ensuite le mode GPIO sur BCM (numérotation des canaux SOC de Broadcom). Nous définissons les broches TRIG et ECHO, puis configurons la broche TRIG comme sortie et la broche ECHO comme entrée.
La fonction measure_distance est l'endroit où la magie opère. Elle envoie une impulsion à l'état haut de 10 µs à la broche TRIG pour déclencher le HC-SR04. Ensuite, elle attend que la broche ECHO passe à l'état haut (ce qui indique le début de l'écho) et enregistre l'heure de début. Elle attend ensuite que la broche ECHO repasse à l'état bas (ce qui indique la fin de l'écho) et enregistre l'heure de fin. La différence de temps entre le début et la fin est utilisée pour calculer la distance. La distance est calculée en multipliant la durée de l'impulsion par la vitesse du son en cm/s (34300 cm/s) et en divisant par 2 (puisque le son fait un aller-retour vers l'obstacle).
Dans le bloc try, nous mesurons continuellement la distance et l'affichons dans la console chaque seconde. Si l'utilisateur appuie sur Ctrl + C (KeyboardInterrupt), le programme nettoie les broches GPIO et se ferme proprement.
ESP32 Configuration
Affectation des broches
Code Arduino IDE
const int trigPin = 14;
const int echoPin = 15;
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
float distance = duration * 0.0343 / 2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
delay(500);
}
Dans la fonction setup, nous initialisons la communication série à une vitesse de 115200 bauds. Ensuite, nous définissons la broche trigPin comme une broche de sortie et la broche echoPin comme une broche d'entrée.
Dans la fonction loop, le processus de déclenchement du HC-SR04 et de mesure de la distance est le même que dans le code Arduino. Nous envoyons une impulsion à l'état haut de 10 µs à la broche trigPin pour déclencher le capteur, mesurons la durée de l'impulsion à l'état haut sur la broche echoPin à l'aide de pulseIn et calculons la distance.
Idées de projets créatifs utilisant le HC-SR04
Robot évitant les obstacles
Les capteurs sont configurés pour détecter les obstacles provenant de différentes directions. Par exemple, un ensemble de capteurs est placé à l'avant du robot pour détecter tout obstacle se trouvant directement sur son chemin vers l'avant. De plus, des capteurs sont placés sur les côtés du robot pour détecter les obstacles qui pourraient s'approcher par les côtés. Lorsqu'un obstacle est détecté, le système de contrôle du robot, qui est souvent basé sur un microcontrôleur comme Arduino, calcule la distance jusqu'à l'obstacle à l'aide des données fournies par les capteurs HC-SR04.
Sur la base de ces informations de distance, le système de contrôle détermine ensuite l'action appropriée à entreprendre pour éviter l'obstacle. Cela implique généralement de diriger les moteurs de manière à modifier la direction du robot. Par exemple, si un obstacle est détecté sur le côté gauche du robot, le système de contrôle peut ordonner au moteur gauche de ralentir ou de faire marche arrière tandis que le moteur droit continue de fonctionner à une vitesse normale. Cela amène le robot à tourner vers la droite, s'éloignant ainsi de l'obstacle.
Pour réaliser ce projet, vous aurez besoin de plusieurs composants clés. Un Arduino sert de cerveau à l'opération. Il traite les données reçues des capteurs HC-SR04 et envoie des commandes aux moteurs. Les moteurs sont nécessaires pour entraîner les roues du robot, lui permettant ainsi de se déplacer. Un pilote de moteur, tel que le L298N, est essentiel pour contrôler les moteurs. Le L298N peut gérer les besoins en courant relativement élevés des moteurs et permet à l'Arduino de contrôler efficacement la vitesse et la direction des moteurs. Et bien sûr, plusieurs capteurs HC-SR04 sont nécessaires pour la détection avant et latérale. En combinant ces composants et en écrivant le code approprié pour les contrôler, vous pouvez créer un robot capable d'éviter les obstacles et pleinement fonctionnel.
Poubelle intelligente
Le capteur HC-SR04 est monté sur la poubelle de manière à pouvoir détecter la distance qui la sépare de tout objet situé devant elle. Lorsqu'une personne s'approche de la poubelle, le capteur mesure la distance entre la poubelle et la personne. Si la distance mesurée est inférieure à un seuil prédéfini (par exemple, 20 cm), cela indique qu'une personne est suffisamment proche de la poubelle pour pouvoir l'utiliser. À ce stade, le capteur envoie un signal à un servomoteur.
Le servomoteur est relié au couvercle de la poubelle et est chargé de l'ouvrir et de le fermer. Lorsqu'il reçoit le signal du capteur HC-SR04, le servomoteur tourne pour ouvrir le couvercle. Ce fonctionnement mains libres est non seulement pratique pour l'utilisateur, mais il permet également de garder la poubelle propre et hygiénique, car il n'est pas nécessaire de toucher directement le couvercle.
Lors de l'écriture du code pour ce projet, le réglage du seuil de distance est une étape cruciale. Vous devez calibrer soigneusement cette valeur en fonction des exigences spécifiques de votre poubelle intelligente. Si le seuil est trop élevé, le couvercle peut s'ouvrir inutilement lorsque quelqu'un se trouve encore à une certaine distance de la poubelle. À l'inverse, si le seuil est trop bas, le couvercle peut ne pas s'ouvrir à temps lorsque l'utilisateur s'approche. Un seuil de distance bien calibré garantit le fonctionnement optimal de la poubelle intelligente.
Moniteur de niveau d'eau
Le capteur HC-SR04 est installé au-dessus du réservoir d'eau. Il émet des ondes ultrasoniques vers le bas, en direction de la surface de l'eau. Ces ondes se propagent dans l'air et rebondissent lorsqu'elles atteignent la surface de l'eau. Le capteur mesure alors le temps nécessaire aux ondes pour atteindre la surface de l'eau et revenir. En utilisant la vitesse connue du son dans l'air, il est possible de calculer la distance entre le capteur et la surface de l'eau.
Dans de nombreux cas, le moniteur de niveau d'eau est intégré à un système IoT (Internet des objets). Il peut par exemple être connecté à une application Blynk. Les données calculées sur le niveau d'eau sont envoyées à l'application, ce qui permet aux utilisateurs de surveiller le niveau d'eau à distance. Cela est particulièrement utile pour les applications industrielles où la surveillance en temps réel des niveaux d'eau est cruciale pour le bon fonctionnement des processus.
Un aspect important à prendre en compte lors de la mise en place d'un moniteur de niveau d'eau est l'étalonnage. Comme le capteur est installé à une certaine hauteur au-dessus de la base du réservoir, cette hauteur doit être prise en compte dans les calculs de distance. Par exemple, si le capteur est installé à 50 cm au-dessus de la base du réservoir et que la distance calculée entre le capteur et la surface de l'eau est de 30 cm, le niveau d'eau réel dans le réservoir est de 20 cm. En calibrant avec précision la hauteur du capteur et en effectuant les calculs nécessaires, vous pouvez vous assurer que le moniteur de niveau d'eau fournit des lectures précises et fiables.
Dépannage des problèmes courants
Lectures incohérentes
Cause : réflexions multivoies ou alimentation instable
Une alimentation électrique instable est un autre facteur responsable. Si l'alimentation électrique du HC-SR04 n'est pas stable, cela peut entraîner un dysfonctionnement du capteur. Les fluctuations de tension peuvent affecter le bon fonctionnement de l'émetteur et du récepteur ultrasoniques, ce qui entraîne des mesures de distance erronées. Par exemple, si vous utilisez une batterie faible ou un adaptateur secteur avec une mauvaise régulation de tension, le capteur peut ne pas recevoir une alimentation électrique constante de 5 V, ce qui peut affecter ses performances.
Solution : ajoutez un boîtier de protection pour le capteur et utilisez une source d'alimentation régulée de 5 V.
L'utilisation d'une source d'alimentation régulée de 5 V est essentielle pour un fonctionnement stable. Une alimentation électrique avec régulation de tension intégrée, telle qu'un adaptateur mural de haute qualité ou un module d'alimentation à tension régulée, garantit que le HC-SR04 reçoit une tension constante de 5 V. Cela permet d'éliminer tout problème causé par les fluctuations de tension et d'améliorer la précision et la cohérence globales des lectures du capteur.
Aucun signal de sortie
Si vous utilisez le HC-SR04 avec un Raspberry Pi, n'oubliez pas de vérifier le circuit diviseur de tension. Comme mentionné précédemment, les broches GPIO du Raspberry Pi ne peuvent gérer que 3,3 V, et un diviseur de tension est souvent utilisé pour convertir la sortie 5 V de la broche Echo du HC-SR04 en un signal compatible 3,3 V. Si les composants du diviseur de tension (généralement des résistances) sont endommagés ou mal connectés, le Raspberry Pi peut ne recevoir aucun signal de sortie.
La logique du code pour le timing du déclenchement/écho est également un élément essentiel à vérifier. Assurez-vous que le code envoie le signal de déclenchement correct (une impulsion de niveau haut de 10 μs) à la broche Trig et qu'il mesure correctement la durée de l'impulsion de niveau haut sur la broche Echo. Un code incorrect peut empêcher le déclenchement du capteur ou entraîner une mauvaise interprétation du signal d'écho par le microcontrôleur, ce qui se traduit par une absence de sortie ou des calculs de distance incorrects. Par exemple, si les temps de retard dans le code sont mal réglés, cela peut perturber la séquence correcte de déclenchement du capteur et de lecture de l'écho.
Erreurs hors plage
Il est également important de gérer correctement les valeurs 0 ou ∞ (infini) dans le code. Une valeur de distance de 0 peut indiquer que le capteur est trop proche d'un objet, plus proche que sa portée minimale détectable. Dans ce cas, vous pouvez définir un seuil de distance minimale dans votre code et ajuster la valeur de distance en conséquence. De même, si le code calcule une valeur de distance extrêmement grande (proche de l'infini), cela indique probablement une erreur, telle qu'un problème de détection d'écho ou des calculs incorrects. Votre code doit être capable de gérer ces cas de manière appropriée, par exemple en enregistrant un message d'erreur ou en essayant de mesurer à nouveau la distance.
HC-SR04 vs autres capteurs de distance
vs. Capteurs infrarouges
HC-SR04
Portée : 2 cm–400 cm (Extrait 1, 6)
Précision : ±3 mm (conditions idéales, Extrait 1)
Tension : 5 V (fixe, Extrait 1)
Avantages : Pas d'interférence lumineuse, portée plus longue (Extrait 5)
Inconvénients : Précision réduite à courte portée, sensibilité aux bruits ultrasonores (Extrait 1)
Infrarouge
Portée : Généralement <100 cm (Extrait 1, 5)
Précision : ±5 mm–1 cm (affectée par la couleur/le matériau, Extrait 5)
Tension : 3,3 V–5 V (flexible, Extrait 5)
Avantages : Petite taille, faible coût (Extrait 1)
Inconvénients : Interférence de la lumière ambiante / de la couleur (Extrait 5)
Le tableau 1 met en évidence le compromis entre la détection longue portée robuste (2 cm à 400 cm) du HC-SR04 et la taille compacte/le faible coût des capteurs infrarouges, en soulignant l'immunité du HC-SR04 aux interférences lumineuses par rapport à la vulnérabilité des capteurs infrarouges à la lumière ambiante et à la couleur des matériaux.
vs. Capteurs laser
HC-SR04
Portée : 2 cm–400 cm (Extrait 1, 4)
Précision : ±3 mm (Extrait 4)
Taux de rafraîchissement : 60 ms (Extrait 4)
Coût : ~2 $–3 $ (Extrait 1)
Faiblesse : angle de cône de 15°, bruit environnemental (Extrait 1)
Laser/ToF (VL53L0X)
Portée : 5 cm–200 cm (Extrait 1, 3)
Précision : ±1 mm–3 mm (Extrait 3)
Taux de rafraîchissement : 20 ms (plus rapide, Extrait 4)
Coût : ~10 $–15 $ (Extrait 1)
Force : faisceau étroit de 5°, résistant aux interférences (Extrait 3)
Le tableau 2 compare le rapport coût-efficacité (2 à 3 dollars) et la large portée (400 cm) du HC-SR04 à la précision supérieure (±1 mm) et à la vitesse (taux de mise à jour de 20 ms) des capteurs laser/ToF, idéaux pour les applications nécessitant une grande précision dans des environnements contrôlés.
vs. États-Unis - Module 100
HC-SR04
Portée : 2 cm–400 cm (Extrait 2, 6)
Précision : ±3 mm (nominale, Extrait 2)
Tension : 5 V uniquement (Extrait 6)
Caractéristique : GPIO uniquement, pas de compensation de température (Extrait 3)
Problème : Valeurs aléatoires au-delà de 400 cm (Extrait 6)
US-100
Portée : 2 cm–450 cm (Extrait 2, 3)
Précision : ±2 mm (meilleure lors des tests, Extrait 3)
Tension : 3,3 V–5 V (Extrait 3)
Caractéristique : Compensation de température (mode UART), codes d'erreur (Extrait 6)
Inconvénient : Coût plus élevé (5 $–8 $), configuration UART requise (Extrait 3)
Le tableau 3 présente la portée améliorée (450 cm), la meilleure précision (±2 mm) et la compatibilité 3,3 V/5 V du US-100 par rapport à la simplicité du HC-SR04 (GPIO uniquement), soulignant la fonction de compensation de température du US-100 pour une utilisation industrielle à un coût plus élevé (5 à 8 dollars).
Techniques avancées et optimisations
Calibrage multicapteur
Cependant, lorsque plusieurs capteurs sont utilisés, les interférences peuvent devenir un problème important. Les interférences se produisent lorsque les ondes ultrasonores émises par un capteur interfèrent avec le fonctionnement d'un autre capteur. Cela peut entraîner des lectures inexactes, car les capteurs peuvent interpréter à tort les ondes interférentes comme des échos provenant d'obstacles réels.
Plusieurs techniques peuvent être utilisées pour atténuer les interférences de diaphonie. Une approche consiste à multiplexer les capteurs dans le temps. Cela implique d'activer les capteurs un par un, en laissant un intervalle de temps suffisant entre chaque activation. Par exemple, si vous disposez de quatre capteurs HC-SR04 sur un robot, vous pouvez activer le capteur 1, attendre qu'il termine son cycle de mesure, puis activer le capteur 2, et ainsi de suite. Vous vous assurez ainsi que les ondes ultrasonores d'un capteur ne se superposent pas à celles d'un autre capteur, ce qui réduit les risques de diaphonie.
Une autre technique consiste à utiliser des matériaux de blindage. Placer une barrière physique, telle qu'une fine feuille de métal ou un matériau absorbant le son, entre les capteurs peut aider à empêcher les ondes ultrasonores d'un capteur d'atteindre un autre. Cela peut être particulièrement utile dans les situations où les capteurs sont placés à proximité les uns des autres.
L'étalonnage est également crucial lorsque vous utilisez plusieurs capteurs. Chaque capteur peut avoir des caractéristiques légèrement différentes, telles que la sensibilité ou l'angle du faisceau. En étalonnant les capteurs, vous pouvez tenir compte de ces différences et vous assurer que les données de tous les capteurs sont cohérentes. Cela peut impliquer de mesurer la distance par rapport à un objet connu avec chaque capteur et d'ajuster les lectures en fonction des différences.
Filtrage du bruit
Une méthode couramment utilisée est le filtre à moyenne mobile. Le filtre à moyenne mobile fonctionne en calculant la moyenne d'une série de lectures de distance consécutives. Par exemple, au lieu d'utiliser une seule lecture de distance, vous pouvez prendre les 5 dernières lectures et calculer leur moyenne. Cela permet de lisser les lectures instables, car les petites fluctuations ont tendance à s'annuler mutuellement lorsqu'elles sont moyennées. En Python, la mise en œuvre d'un filtre à moyenne mobile simple pour les lectures de distance HC-SR04 pourrait ressembler à ceci :
distance_readings = []
num_readings = 5
def moving_average_filter(new_distance):
distance_readings.append(new_distance)
if len(distance_readings) > num_readings:
distance_readings.pop(0)
return sum(distance_readings) / len(distance_readings)
Une autre méthode de filtrage efficace est le filtre médian. Le filtre médian remplace chaque mesure de distance par la valeur médiane d'un ensemble de mesures consécutives. La médiane est moins sensible aux valeurs extrêmes ou aberrantes que la moyenne. Par exemple, si vous avez un ensemble de 5 mesures de distance [20, 22, 18, 50, 21], la valeur médiane est 21. En utilisant le filtre médian, la valeur aberrante de 50 n'affecterait pas de manière significative le résultat filtré. Dans Arduino, la mise en œuvre d'un filtre médian pourrait être la suivante :
const int numReadings = 5;
int readings[numReadings];
int readIndex = 0;
int total = 0;
int averageDistance = 0;
void addReading(int newReading) {
total = total - readings[readIndex];
readings[readIndex] = newReading;
total = total + readings[readIndex];
readIndex = readIndex + 1;
if (readIndex >= numReadings) {
readIndex = 0;
}
}
int getMedian() {
int sortedReadings[numReadings];
for (int i = 0; i < numReadings; i++) {
sortedReadings[i] = readings[i];
}
for (int i = 0; i < numReadings - 1; i++) {
for (int j = i + 1; j < numReadings; j++) {
if (sortedReadings[i] > sortedReadings[j]) {
int temp = sortedReadings[i];
sortedReadings[i] = sortedReadings[j];
sortedReadings[j] = temp;
}
}
}
return sortedReadings[numReadings / 2];
}
Modes de travail personnalisés
Cependant, certains modèles HC-SR04 proposent également les modes UART (Universal Asynchronous Receiver/Transmitter) et I2C (Inter-Integrated Circuit). En mode UART, le module peut communiquer avec un microcontrôleur à l'aide d'une communication série. Cela peut être utile dans les applications où un protocole de communication série plus standardisé est préférable, comme dans certains systèmes de contrôle industriels ou lors de l'intégration avec des appareils dotés d'interfaces UART intégrées.
Le mode I2C, quant à lui, permet la communication via un bus I2C. Cela est avantageux dans les configurations multi-appareils où plusieurs capteurs ou composants doivent communiquer avec un seul microcontrôleur. Le bus I2C permet une utilisation plus efficace des broches du microcontrôleur, car plusieurs appareils peuvent partager le même bus à deux fils (SDA – Serial Data Line et SCL – Serial Clock Line).
Pour configurer le module pour ces modes personnalisés, vous devez vous reporter à la documentation du module afin de déterminer les valeurs de résistance appropriées. Par exemple, pour activer le mode UART, vous devrez peut-être connecter une résistance spécifique entre deux broches du module. Une fois les résistances correctement configurées, le module peut être programmé pour communiquer dans le mode souhaité. Cela peut impliquer d'écrire un code différent dans votre microcontrôleur pour gérer les protocoles de communication UART ou I2C. Par exemple, dans un projet Raspberry Pi utilisant le HC-SR04 configuré en I2C, vous utiliseriez la bibliothèque smbus en Python pour communiquer avec le capteur via le bus I2C.
HC-SR04 : temporisation, adaptation de niveau et sources d'erreur
Le HC-SR04 estime la distance par le temps aller-retour d’une salve ultrasonore selon distance = temps d'écho × vitesse du son / 2. Les variantes peuvent différer ; vérifiez alimentation et niveau Echo et adaptez une sortie de 5 V avant une entrée limitée à 3,3 V.
- Générer le déclenchement : fournir la largeur exigée par le module précis et mesurer l’impulsion Echo.
- Fixer un délai maximal : arrêter l’attente sans écho afin de ne pas bloquer le logiciel.
- Corriger la vitesse : la température modifie la conversion et l’air mobile ajoute une erreur.
- Respecter la géométrie : surfaces molles, inclinées, étroites ou proches absorbent ou dévient la salve.
- Éviter les interférences : décaler plusieurs capteurs et rejeter les sauts impossibles par un filtrage borné.




