Utiliser un capteur à ultrasons

Objectif

L'objectif de ce cours est de concevoir un télémètre capable de mesurer des distances.



Le principe de la mesure

Par l'intermédiaire du capteur à ultrasons, la carte Arduino va mesurer la durée Δt que met l'onde sonore pour parcourir une distance d jusqu’à un obstacle, se réfléchir puis revenir au récepteur.

L'onde a alors parcouru une distance correspondant à 2d.

Sachant que la distance parcourue est égale à la vitesse v de l'onde multiplié par la durée Δt, on peut écrire que : 2d = v x Δt soit d = v x Δt / 2

La vitesse du son est v = 340 m/s. Elle dépend de la température.



Le capteur à ultrasons

Nous utiliserons un capteur à ultrasons HC-SR04 capable d’émettre des ondes ultrasonores (40 kHz) et de recevoir l'écho d'un obstacle.
Ce capteur est capable de mesurer une distance de 2 cm à 400 cm environ avec une précision de 3 mm.

Pour mesurer la durée d'un aller-retour, il faut :

Le montage


Pour l'alimentation du capteur connecter :

Les autre broches du capteur sont branchées sur des broches numériques de la carte Arduino :





Le code

Le code est suffisamment commenté pour comprendre facilement son fonctionnement.

// Télémètre d'après le blog d'Eskimon
 
int vitesse = 340 ;  // vitesse du son 340 m/s
int Trig = 3;  // Déclencheur sur la broche 3
int Echo = 2;  // Réception sur la broche 2
 
void setup() {
    pinMode(Trig, OUTPUT);    // initialisation de la broche "Trig" comme étant une sortie
    pinMode(Echo, INPUT);     // initialisation de la broche "Echo" comme étant une entrée
 
    digitalWrite(Trig, LOW);  // Mettre "Trig" niveau bas
 
    Serial.begin(9600);
}
void loop()
{
 
   digitalWrite(Trig, HIGH);   // Un état haut de 10 microsecondes est mis sur la broche "Trig"
   delayMicroseconds(10);      // on attend 10 µs
   digitalWrite(Trig, LOW);    // On remet à l’état bas la broche Trig  
   unsigned long duree = pulseIn(Echo, HIGH);   // Lecture de la durée d’état haut sur la broche "Echo"
 
   if(duree > 30000)   // si la durée est supérieure à 30ms, l'onde est perdue
   {  
      Serial.print("Onde perdue, mesure échouée !");  
   }
   else
   {
      // On calcule la distance
 
      duree = duree/2;   // On divise cette durée par deux pour n'avoir qu'un trajet
      float temps = duree/1000000.0; //on met en secondes
      float distance = vitesse*temps; //on multiplie par la vitesse, d=v*t
 
      // On affiche la distance
 
      Serial.print("D = ");
      Serial.print(distance); 
      Serial.print(" m");
   }
 
   // petite pause
   delay(250);
}



Une ligne mérite d’être détaillée :

unsigned long duree = pulseIn(Echo, HIGH); 

La fonction pulseIn() renvoie la durée en microsecondes pendant laquelle le signal sur la sortie “Echo” est resté au niveau « High ».

Pour plus de détails sur la fonction pulseIn() : http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.PulseIn


A faire vous-même 1

Dans le code précédent, on admet que la vitesse des ultrasons est de 340 m/s.
Modifier ce code pour mesurer cette vitesse avec un obstacle situé à une distance d = 1 m.



A faire vous-même 2

Il est possible d'utiliser un capteur d'ultrasons pour détecter la présence d'une personne.
Écrire le code permettant de compter le nombre de personnes entrant dans une pièce. Ce nombre sera affiché sur le moniteur série ou sur l'écran LCD.



A faire vous-même 3

Au montage précédent, ajouter un interrupteur pour remettre le compteur à zéro.



A faire vous-même 4

Compléter le montage précédent avec une led qui s'allume lorsque le capteur d'ultrasons détecte une personne.



Statistiques du site