Mesurer la célérité d’un son (première générale)

Programme de première générale 2019 - Enseignement de spécialité.

Exploiter la relation entre la durée de propagation, la distance parcourue par une perturbation et la célérité, notamment pour localiser une source d’onde. Déterminer, par exemple à l’aide d’un microcontrôleur ou d’un smartphone, une distance ou la célérité d’une onde.

Présentation du module HC-SR04

Les modules du type HC-SR04 sont des émetteurs-récepteurs ultrasonores fonctionnant par réflexion. Ils sont utilisés généralement dans des applications comme télémètre (< 5 m).

Montage ultrason - Arduino

Module HC-SR04

Fonctionnement

  • Le module est alimenté entre GND et Vcc (généralement 5 V ou 3,3 V sur certains modules).
  • Le déclenchement d’une mesure (émission d’une salve) se fait par une brève impulsion (> 10 µs) sur l’entrée trig.
  • La durée que prend l’onde pour aller de l’émetteur au récepteur est celle de l’impulsion renvoyée sur la sortie echo.

Modification du module

Tel qu’il est vendu, ce module n’a peu d’intérêt en sciences physiques car les signaux électriques sur l’émetteur et le récepteur ne sont pas accessibles. Il est possible de résoudre ce problème en y soudant des connecteurs supplémentaires (voir photo ci-dessous) et de visualiser les signaux correspondants à l’oscilloscope ou avec une interface d’acquisition.

Branchement du module HC-SR04 modifié

Montage ultrason - Arduino

Montage avec oscilloscope ou interface d’acquisition

Mesures obtenues dans Latis avec Sysam SP5

Mesures à l’oscilloscope pour une distance de 30 cm

Mesure de la célérité du son

La manipulation consiste à relever la durée de l’écho sonore à l’aide du microcontrôleur pour différentes distances et déduire la célérité du son.

\[c = \dfrac{2 \times d}{\Delta t}\]

Algorithme

TRIG <- 0

REPETER :
   TRIG <- Vcc                        # Début impulsion sur Trig
   Attendre 10 µs
   TRIG <- 0                          # Fin impulsion sur Trig
   Dt   <- Durée impulsion sur Echo   # Mesure
   Afficher Dt
   Attendre 1 s

Pour plus de précision, il est possible de modifier le programme afin de réaliser plusieurs mesures de la durée de l’écho et d’en déduire sa moyenne.

Arduino (C/C++)

Montage ultrason - Arduino

Montage célérité son

// Mesure de la durée de l'écho sonore

#define pinTrig 8       // Trig sur broche 8
#define pinEcho 9       // Echo sur broche 9

long dureeEcho;         // Durée de l'Echo

void setup() {
  pinMode(pinTrig,OUTPUT);      // Broche Trig en sortie
  digitalWrite(pinEcho,LOW);    // Sortie Trig à l état bas
  pinMode(pinEcho,INPUT);       // Broche Echo en entrée
  Serial.begin(9600);           // Paramétrage du port série
}

void loop() {
  digitalWrite(pinTrig,HIGH);            // Début impulsion de declenchement
  delayMicroseconds(10);                 // Attendre 10 microseconde
  digitalWrite(pinTrig,LOW);             // Fin impulsion (Etat bas)
  dureeEcho = pulseIn(pinEcho,HIGH);     // Mesure de la durée de l'impulsion sur Echo
  Serial.print("Durée (µs) = ");          // Affichage sur port série
  Serial.println(dureeEcho);
  delay(1000);                           // Attendre 1s
}

Arduino (Python/Nanpy)

# Réalisé avec une version modifiée de Nanpy par Eurosmart
from nanpy import SerialManager, Ultrasonic
from time import sleep

port = SerialManager(device='/dev/ttyACM0')   # Sélection du port série (exemple : device = 'COM6')

moduleUltrason = Ultrasonic(trig=8, echo=9, useInches=False, connection=port) # Déclaration du module HC-SR04
sleep(0.1)                                    # Temporisation

for i in range(10):
   duree = moduleUltrason.get_duration()     # Durée en µs pour l'aller-retour du son
   print("Durée =", duree, "µs")             # Affichage
   sleep(1)                                  # Temporisation

Résultats :

Durée = 1456 µs
Durée = 1453 µs
Durée = 1451 µs
Durée = 1450 µs
Durée = 1453 µs
Durée = 1453 µs
Durée = 1447 µs
Durée = 1444 µs
Durée = 1452 µs
Durée = 1446 µs

Application : réalisation d’un télémètre

Connaissant la célérité du son, la distance par rapport à un obstacle est calculée par le microcontrôleur à l’aide de la relation suivante :

\[d = \dfrac{c \times \Delta t}{2}\]

Il suffit d’ajouter le calcul de la distance juste après la mesure de la durée.

Arduino (C/C++)

// Mesure de la durée d'une distance

#define pinTrig 8       // Trig sur broche 8
#define pinEcho 9       // Echo sur broche 9

long dureeEcho;         // Durée de l'Echo
float distance;         // Distance en module et réflecteur
float vitesse = 345 ;   // Vitesse obtenue

void setup() {
pinMode(pinTrig,OUTPUT);      // Broche Trig en sortie
digitalWrite(pinEcho,LOW);    // Sortie Trig à l état bas
pinMode(pinEcho,INPUT);       // Broche Echo en entrée
Serial.begin(9600);           // Paramétrage du port série
}

void loop() {
digitalWrite(pinTrig,HIGH);            // Début impulsion de declenchement
delayMicroseconds(10);                 // Attendre 10 microseconde
digitalWrite(pinTrig,LOW);             // Fin impulsion (Etat bas)
dureeEcho = pulseIn(pinEcho,HIGH);     // Mesure de la durée de l'impulsion sur Echo
distance = (vitesse*dureeEcho*1E-6)/2; // Calcul de la distance
Serial.print("Duree (us) = ");         // Affichage sur port série
Serial.println(dureeEcho);             //
Serial.print("Distance (m) = ");       // Affichage sur port série
Serial.println(distance);              //
delay(1000);                           // Attendre 1s
}

En autonome avec un écran LCD :

Montage ultrason - Arduino

Télémètre sur Educaduino-Lab LCD

//Application : télémètre sur écran LCD 2x16

#include <LiquidCrystal.h>        // Importation de la librairie LiquidCrystal
#define pinTrig 8       // Trig sur broche 8
#define pinEcho 9       // Echo sur broche 9

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);  // Brochage de l'afficheur

float distance;         // Distance en module et réflecteur
long dureeEcho;         // Durée mesurée
float vitesse = 345 ;   // Vitesse obtenue


void setup() {
 pinMode(pinTrig,OUTPUT);      // Broche Trig en sortie
 digitalWrite(pinEcho,LOW);    // Sortie Trig à l état bas
 pinMode(pinEcho,INPUT);       // Broche Echo en entrée
 lcd.begin(16, 2);               // fixe le nombre de colonnes et de lignes de l afficheur
}

void loop() {
 digitalWrite(pinTrig,HIGH);                   // Début impulsion de déclenchement
 delayMicroseconds(10);                        // Attendre 10 microseconde
 digitalWrite(pinTrig,LOW);                    // Fin impulsion (Etat bas)
 dureeEcho = pulseIn(pinEcho,HIGH);            // Mesure de la durée de l'impulsion sur Echo
 distance = (vitesse*dureeEcho*1E-6)/2;    // Calcul de la distance
 lcd.setCursor(0,0);                           // place le curseur au début de la ligne 0
 lcd.print("Distance en m");                  // Affiche la légende
 lcd.setCursor(0,1);                           // place le curseur au début de la ligne 1
 lcd.print(distance);                          // Affiche la valeur de la distance
 delay(1000);                                  // Attendre 1s
}

Arduino (Python/Nanpy)

# Réalisé avec une version modifiée de Nanpy par Eurosmart
from nanpy import SerialManager, Ultrasonic
from time import sleep

port = SerialManager(device='/dev/ttyACM0')   # Sélection du port série (exemple : device = 'COM6')

moduleUltrason = Ultrasonic(trig=8, echo=9, useInches=False, connection=port) # Déclaration du module HC-SR04
sleep(0.1)                                    # Temporisation

vitesse_son = 345                             # vitesse du son 345 m/S dans l'air

for i in range(10):
   duree = moduleUltrason.get_duration()     # Durée en µs pour l'aller-retour du son
   print("Durée =", duree, "µs")             # Affichage
   distance = (vitesse_son*duree*1E-6)/2;    # Calcul de la distance en m
   print("Distance = ", distance, "m")       # Affichage
   sleep(1)                                  # Temporisation

Résultats :

Durée = 1997 µs
Distance =  0.34448249999999997 m
Durée = 1996 µs
Distance =  0.34431 m
Durée = 2019 µs
Distance =  0.34827749999999996 m
Durée = 8214 µs
Distance =  1.416915 m
Durée = 8181 µs
Distance =  1.4112225 m
Durée = 8177 µs
Distance =  1.4105325 m
Durée = 1822 µs
Distance =  0.314295 m
Durée = 1915 µs
Distance =  0.3303375 m

A retenir

  • Le module HC-SR04 fournit un signal Echo pour la mesure automatique de la durée de propagation du son.
  • La fonction pulseIn() mesure cette durée.