Mesurer des distances avec un capteur à ultrason HC-SR04 et un Arduino
Sommaire
Salut les makers, aujourd'hui je vous propose un tuto sur l'utilisation du capteur à ultrasons HC-SR04. Nous allons apprendre nous servir de ce capteur au travers d'un exercice simple : mesurer des distances.
1. Principe de fonctionnement du capteur
1.1 Ondes sonores pour mesurer une distance
Pour mesurer des distances, une technique bien connue consiste à utiliser les ondes sonores. Le principe est simple : on émet une onde sonore, celle-ci se propage jusqu'à rencontrer un obstacle, rebondi et revient dans l'autre sens. Sachant la vitesse de propagation d'une onde, il suffit de mesurer le temps entre l'émission et la réception pour en déduire la distance de l'obstacle.
Comme l'onde parcourt au final deux fois la distance (aller puis retour), il faut alors diviser par deux la distance calculée.
On peut donc établir la relation suivante :
$$d = \dfrac{c \times t}{2}$$
- $d$ : distance capteur/obstacle
- $c$: célérité du son dans l'air
- $t$: temps écoulé entre l'émission et la réception de l'onde
Une onde sonore se propage à environ $340 m.s^{-1}$ dans l'air à 15°C.
Imaginons que le temps mesuré soit de $588 µs$, la distance de l'obstacle est alors de $d = \dfrac{340 \times 588.10^{-6}}{2} = 0.1m$ soit 10 cm.
1.2 Fonctionnement du capteur
Le capteur HC-SR04 utilise ce même principe. Il dispose pour ça d'un émetteur d'onde sonore 40kHz et d'un récepteur.
Le spectre audible de l'oreille humaine s'étend de 16Hz à 16kHz, n'espérez donc pas entendre quoi que ce soit. Votre chat, quant à lui, risque d'entendre un sifflement s'il est dans les parages.
Il dispose de 4 broches :
- Vcc : Alimentation +5V DC
- GND : Masse
- Echo : Sortie de mesure
- Trig : Entrée de déclenchement de la mesure
Pour lui faire émettre une série d'ondes (8 exactement), il faut envoyer une impulsion d'au moins 10µs sur la broche Trig
.
En réponse, le capteur génère une impulsion sur la broche Echo
dont la durée est proportionnelle au temps écoulé entre l'émission de l'onde incidente et la réception de l'onde réfléchie.
Et comment on fait si l'onde ne rencontre jamais d'obstacle ?
Dans ce cas on risque d'attendre indéfiniement, c'est pourquoi on doit définir un TIMEOUT, durée au-delà de laquelle on considère qu'il n'y a pas d'obstacle.
Par exemple, si on définit le TIMEOUT à 25ms, ça donne une distance max de $25.10^{-3} \times 340 = 8.5m$.
Lorsqu'on regarde dans la documentation constructeur, on se rend compte que le capteur a une distance de captation comprise entre 2cm de 4m. Pas la peine donc de définir un TIMEOUT au-delà de ~12ms.
2. Câblage avec l'Arduino
Pour le câblage rien de plus simple. On relie les masses ensemble, le Vcc au 5V de l'Arduino, et les broches Trig
et Echo
sur deux broches numériques de l'Arduino, 2 et 3 par exemple :
3. Implémentation
Pour lire l'impulsion générée par le capteur, nous allons utiliser la fonction native pulseIn
.
#define TIMEOUT 12000UL // 12ms -> ~4m à 340m/s
#define TRIG_PIN 2
#define ECHO_PIN 3
#define SOUND_SPEED 340.0/1000 // Vitesse en mm/µs
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
digitalWrite(TRIG_PIN, LOW);
}
void loop() {
// Génération de l'impulion de 15µs
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(15);
digitalWrite(TRIG_PIN, LOW);
// Lecture de l'impulsion sur la broche Echo
long duration = pulseIn(ECHO_PIN, HIGH, TIMEOUT);
// Calcul de la distance en mm
long distance = SOUND_SPEED * duration / 2.0;
// Affichage de la distance
Serial.print("Distance : ");
Serial.print(distance);
Serial.print("mm");
}
On upload tout ça dans notre Arduino préféré et ...
Tada 🙂 !
4. Conclusion
Un projet très simple à mettre en oeuvre mais qui reste très intéressant.
Si votre but est uniquement de réaliser un télémètre, alors ce code suffit. Par contre, dans le cas de l'utilisation au sein d'un système plus complexe (genre un robot évitant des obstacles) il serait préférable d'utiliser des interruptions pour la génération et lecture des impulsions. Ainsi, ça évite de bloquer le programme lorsqu'il attend l'impulsion Echo
.
Have fun et à bientôt sur Fire-DIY !
Autres articles dans la catégorie Electronique :
Vos réactions (0) :
- Sois le/la premier(e) à commenter cet article !