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 (Common ground with module)
▶ 10μs High Pulse to Start Measurement
▶ Low Level to Reset
Raspberry Pi: Any GPIO (e.g., GPIO17)
▶ High Duration = Round-Trip Time of Ultrasonic Waves
▶ Max High Time: 38ms (Timeout for No Obstacle)
Raspberry Pi: GPIO with **Voltage Divider** (5V→3.3V)
Raspberry Pi/GND
Explication :
The Echo pin is the key to obtaining the distance information. Once the ultrasonic waves are sent out, the Echo pin goes high. It remains high until the reflected waves are received by the ultrasonic receiver. The duration for which the Echo pin is high is directly proportional to the time it takes for the ultrasonic waves to travel to the obstacle and back. By measuring this time duration, we can calculate the distance to the obstacle using the formula . In a C++-based Arduino project, you can use the pulseIn() function to measure the duration of the high-level pulse on the Echo pin.
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 :
Distance Calculation: The final step is to calculate the distance to the obstacle. The formula for calculating the distance in centimeters is . The factor 0.0343 comes from the speed of sound in air, which is approximately 343 m/s. Since the waves travel to the obstacle and back (a round-trip), we divide the total distance traveled by 2 to get the one-way distance to the obstacle. For example, if the time measured for the Echo pin to be high is 2000μs, then the distance would be calculated as cm. This calculation is the same whether you're using the HC-SR04 in a simple hobbyist project or a complex industrial application.
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);
}
In the setup function, we first initialize the serial communication at a baud rate of 9600, which allows us to view the distance readings in the Arduino Serial Monitor. Then, we set the trigPin as an output pin and the echoPin as an input pin.
In the loop function, we start by setting the trigPin to LOW for 2 microseconds to ensure a clean start. Then, we set it HIGH for 10 microseconds to trigger the ultrasonic transmitter in the HC-SR04. After that, we set the trigPin back to LOW.
The pulseIn() function is then used to measure the duration of the high-level pulse on the echoPin. This duration represents the time it took for the ultrasonic waves to travel to the obstacle and back. We then calculate the distance using the formula distance = duration * 0.0343 / 2, where 0.0343 is the speed of sound in cm/μs and we divide by 2 because the waves travel to the obstacle and back.
Finally, we print the calculated distance to the Serial Monitor and add a 500-millisecond delay before the next measurement.
Conseils
- Mesure précise de la durée :
When using the pulseIn() function, it's important to note that it measures the duration of a pulse. In the case of the HC-SR04, this is the time the Echo pin is high. To ensure accurate measurements, make sure there are no other electrical interferences that could affect the pulse duration. Also, be aware that if the obstacle is too far away, the pulse may time out. You can set a timeout value in the pulseIn() function to handle such cases gracefully. For example, long duration = pulseIn(echoPin, HIGH, 20000); where 20000 is the timeout value in microseconds.
- É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
To solve this issue, you can use a voltage divider circuit. A simple voltage divider using a 1kΩ and a 2kΩ resistor can be used to convert the 5V output from the Echo pin of the HC-SR04 to a 3.3V-compatible signal for the Raspberry Pi. The formula for calculating the output voltage of a voltage divider is , where is the input voltage (5V in this case), is the first resistor (1kΩ), and is the second resistor (2kΩ). Plugging in the values, we get , which is within the safe range for the Raspberry Pi GPIO pin.
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()
In this code, we first import the necessary libraries, RPi.GPIO for controlling the GPIO pins on the Raspberry Pi and time for adding delays. We then set the GPIO mode to BCM (Broadcom SOC channel numbering). We define the TRIG and ECHO pins and set up the TRIG pin as an output and the ECHO pin as an input.
The measure_distance function is where the magic happens. It sends a 10μs high - level pulse to the TRIG pin to trigger the HC - SR04. Then, it waits for the ECHO pin to go high (indicating the start of the echo) and records the start time. It then waits for the ECHO pin to go low (indicating the end of the echo) and records the end time. The time difference between the start and end times is used to calculate the distance. The distance is calculated by multiplying the pulse duration by the speed of sound in cm/s (34300 cm/s) and dividing by 2 (since the sound travels to the obstacle and back).
In the try block, we continuously measure the distance and print it to the console every second. If the user presses Ctrl + C (KeyboardInterrupt), the program cleans up the GPIO pins and exits gracefully.
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);
}
In the setup function, we initialize the serial communication at a baud rate of 115200. We then set the trigPin as an output pin and the echoPin as an input pin.
In the loop function, the process of triggering the HC - SR04 and measuring the distance is the same as in the Arduino code. We send a 10μs high - level pulse to the trigPin to trigger the sensor, measure the duration of the high - level pulse on the echoPin using pulseIn , and calculate the 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
Range: 2cm–400cm (Abstract 1, 6)
Accuracy: ±3mm (ideal conditions, Abstract 1)
Voltage: 5V (fixed, Abstract 1)
Pros: No light interference, longer range (Abstract 5)
Cons: Reduced near-range accuracy, ultrasonic noise sensitivity (Abstract 1)
Infrared
Range: Typically <100cm (Abstract 1, 5)
Accuracy: ±5mm–1cm (affected by color/material, Abstract 5)
Voltage: 3.3V–5V (flexible, Abstract 5)
Pros: Small size, low cost (Abstract 1)
Cons: Ambient light/color interference (Abstract 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
Range: 2cm–400cm (Abstract 1, 4)
Accuracy: ±3mm (Abstract 4)
Update Rate: 60ms (Abstract 4)
Cost: ~$2–3 (Abstract 1)
Weakness: 15° cone angle, environmental noise (Abstract 1)
Laser/ToF (VL53L0X)
Range: 5cm–200cm (Abstract 1, 3)
Accuracy: ±1mm–3mm (Abstract 3)
Update Rate: 20ms (faster, Abstract 4)
Cost: ~$10–15 (Abstract 1)
Strength: 5° narrow beam, interference-resistant (Abstract 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
Range: 2cm–400cm (Abstract 2, 6)
Accuracy: ±3mm (nominal, Abstract 2)
Voltage: 5V only (Abstract 6)
Feature: GPIO-only, no temperature compensation (Abstract 3)
Issue: Random values beyond 400cm (Abstract 6)
US-100
Range: 2cm–450cm (Abstract 2, 3)
Accuracy: ±2mm (better in tests, Abstract 3)
Voltage: 3.3V–5V (Abstract 3)
Feature: Temperature compensation (UART mode), error codes (Abstract 6)
Downside: Higher cost ($5–8), UART setup required (Abstract 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.




