Les télémètres HC-SR04, proposés sur le site robotique.tech, utilisent des ultrasons pour mesurer la distance à laquelle se trouve un objet. Ces capteurs se distinguent par leur large plage de mesure et leur excellente réactivité.
Dans cet exemple, un microcontrôleur compatible Arduino Uno® est utilisé pour visualiser les distances mesurées.
Pour émettre des ultrasons à 40 kHz, un signal de 10 µS est envoyé sur la broche Trigger du module via une sortie digitale de la carte Arduino Uno®. La capsule émettrice du module génère alors les ultrasons.
La capsule réceptrice du module capte les ultrasons réfléchis par l’objet. Cette information est ensuite transmise à une entrée digitale du microcontrôleur via la broche Echo.
Ces composants et modules sont donnés à titre indicatif et peuvent être remplacés par d’autres modèles équivalents.
L’exemple de code ci-dessous permet la mesure de la distance grâce au capteur HC-SR04. Cette valeur est affichée dans le moniteur série de l’IDE Arduino®.
Le moniteur série est accessible via l’icône ou via la combinaison de touches CTRL + MAJ + M.
#define Broche_Echo 7 // Broche Echo du HC-SR04 sur D7 // #define Broche_Trigger 8 // Broche Trigger du HC-SR04 sur D8 //
// Definition des variables
int MesureMaxi = 300; // Distance maxi a mesurer // int MesureMini = 3; // Distance mini a mesurer //
long Duree; long Distance;
void setup()
{
pinMode(Broche_Trigger, OUTPUT); // Broche Trigger en sortie // pinMode(Broche_Echo, INPUT); // Broche Echo en entree // Serial.begin (115200);
}
void loop() {
// Debut de la mesure avec un signal de 10 µS applique sur TRIG // digitalWrite(Broche_Trigger, LOW); // On efface l’etat logique de TRIG // delayMicroseconds(2);
digitalWrite(Broche_Trigger, HIGH); // On met la broche TRIG a « 1 » pendant 10µS // delayMicroseconds(10);
digitalWrite(Broche_Trigger, LOW); // On remet la broche TRIG a « 0 » //
// On mesure combien de temps le niveau logique haut est actif sur ECHO // Duree = pulseIn(Broche_Echo, HIGH);
// Calcul de la distance grace au temps mesure //
Distance = Duree*0.034/2; // *** voir explications apres l’exemple de code *** //
// Verification si valeur mesuree dans la plage //
if (Distance >= MesureMaxi || Distance <= MesureMini) {
// Si la distance est hors plage, on affiche un message d’erreur // Serial.println(« Distance de mesure en dehors de la plage (3 cm à 3 m) »);
}
else {
// Affichage dans le moniteur serie de la distance mesuree // Serial.print(« Distance mesuree : »);
Serial.print(Distance); Serial.println(« cm »);
}
delay(1000); // On ajoute 1 seconde de delais entre chaque mesure //
(Durée totale (aller-retour ultrasons) * La vitesse du son (0.034 cm/µs)) / 2 (Aller-retour des ultrasons)