Capteur à ultrasons HC-SR04 et Arduino.
Le capteur HC-SR04 est un détecteur de distance à basse précision fondé sur la technologie des ultrasons. On peut l’utiliser dans la réalisation de plusieurs projets, comme système de détection d’obstacles pour véhicules ou robots, détecteur de présence…
Table de matières:
Comment fonctionne le capteur HC-SR04?
Le module HC-SR04 est un capteur de distance d’usage fréquent pour projets de robotique qui intègre un émetteur à ultrasons et un récepteur. On s’en sert pour calculer à quelle distance se trouve un obstacle situé face au capteur. L’émetteur utilise d’écho-sondeurs qui vont rebondir sur l’obstacle et seront captés au retour grâce au récepteur. Le laps de temps entre l’émission du signal et son retour au récepteur détermine la distance entre l’émetteur et l’obstacle.
Comment calcule-t-on la distance à l’obstacle?
Voici la formule de la vitesse moyenne:
Vitesse= Distance parcourue / Temps du parcours
On sait que la vitesse du son est de 343 m/s à 20 º C, avec un 50% de taux d’humidité et au niveau de la mer. Si on converse les unités:
343 (m/s) x 100 (cm/m) x 1/1000000 (s/µs) = 0,0343 cm/µs
Le son parcourt 0,0343 cm à chaque microseconde, et il prend 29,2 microsecondes pour parcourir un centimètre. Ainsi, on peut calculer la distance qui existe à partir du laps de temps entre l’émission de l’impulsion et le retour de celle-ci. Prenons en compte que cette pulsation arrive d’abord à l’obstacle, et après, doit retourner vers le récepteur; de façon que le parcours total est le double de ce que l’on veut vraiment mesurer.
Distance parcourue = Vitesse x Temps du parcours
Distance à l’obstacle = ( Vitesse x temps) / 2
Imaginons qu’on reçoit une impulsion sur le capteur de 200 µs, si on aplique la formule ci-dessus: (200 µs x 0,0343 cm/µs) /2, on aura comme résultat 3,43 cm de distance.
Comment connecte-t-on le capteur à la plaque Arduino?
Il est nécessaire:
- Plaque Arduino ou équivalent.
- Capteur HC-SR04
- fils
- plaque d’essai ou breadboard.
Le capteur à ultrasons a 4 broches:
- VCC: source d’énergie 5 V.
- GND: masse
- TRIGGER: émetteur du signal. Relié au pin 12 de la plaque.
- ECHO: récepteur du signal. Relié au pin 11.
Programmation du capteur à ultrasons avec bibliothèque.
New Ping est une bibliothèque externe qu’améliore les résultats et préviens quelques problèmes apparus dans certains capteurs de distances. En plus, elle contient des fonctions qui fournissent l’obtention des distances.
Le premier pas à suivre, évidement, est le téléchargement et installation de cette bibliothèque.
Code:
// on ajoute NewPing
#include <NewPing.h>
/* On configure les pins où nous allons connecter le senseur */
#define PIN_TRIG 12 // Pin d'Arduino relié au pin Trigger du capteur à ultrasons
#define PIN_ECHO 11 // Pin d'Arduino relié au pin Echo
#define MAX_DISTANCE 100 // Distance maximale à détecter en cm.
/*Créer l'objet de la classe NewPing, on indique le pin Trigger, le pin Echo et la distance maximale, optionnel */
NewPing sonar(PIN_TRIG, PIN_ECHO, MAX_DISTANCE);
void setup() {
Serial.begin(9600);
}
void loop() {
// attente de 1 seconde entre les mesures
delay(1000);
// Obtenir la mesure du temps du voyage du son et la garder dans la variable temps
int temps = sonar.ping_median();
// écrire le temps mesuré dans le moniteur série
Serial.print("Temps: ");
Serial.print(temps);
Serial.println(" microsecondes");
// écrire la distance mesurée dans le moniteur série
Serial.print("Distance: ");
// US_ROUNDTRIP_CM constante permettant de mesurer la distance. Convertir le temps en distance (0 = indique hors de portée)
Serial.print(temps / US_ROUNDTRIP_CM);
Serial.println(" cm");
}
Le code réalisé avec New Ping est un code assez simple et compatible aussi avec la majorité de capteurs qu’utilisent l’interface à impulsion avec 3 ou 4 pins.
Programmation du capteur à ultrasons sans bibliothèque.
Il peut nous être très utile, par contre, savoir gérer le capteur à ultrasons sans bibliothèque. Pour cela, nous devons réaliser un tir précis programmant l’instruction LOW pendant 4 µs, et puis, pour l’activation du capteur, on produit une pulsation électrique de 10 µs.
On obtiendra l’intervalle de temps dans lequel la pulsation revient au capteur avec la fonction pulseIn(). Finalement, on calculera la distance en cm.
Code:
const int EchoPin = 11;
const int TriggerPin = 12;
void setup() {
Serial.begin(9600);
// on configure les pins de sortie et d'entrée
pinMode(TriggerPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop() {
int cm = ping(TriggerPin, EchoPin); // on appelle la fonction ping
Serial.print("Distance: ");
Serial.println(cm);
delay(1000);
}
int ping(int TriggerPin, int EchoPin) {
long duree, distanceCm; // variables pour calcules
// impulsion pour produire un tir précis
digitalWrite(TriggerPin, LOW); // produire une impulsion dans le pin trigger à LOW 4us
delayMicroseconds(4);
//impulsion pour activer de capteur
digitalWrite(TriggerPin, HIGH); //produire Trigger (tir) de 10us
delayMicroseconds(10);
digitalWrite(TriggerPin, LOW);
duree = pulseIn(EchoPin, HIGH); //on mesure le temps entre impulsions, en microsecondes
// La vitesse du son est de 343 m/s ou 29,2 microsecondes par cm
distanceCm = duree * 10 / 292/ 2; //on convertit la distance, en cm
return distanceCm; // on retourne la distance
}