Mesurer la vitesse du son avec un microcontrôleur

L’expérience

Cet article présente l’utilisation d’un microcontrôleur et d’un capteur de distance (émetteur/récepteur d’ultrasons) dans le but de déterminer la vitesse du son dans l’air.
La détermination de la vitesse v du son repose sur la mesure de la durée t que met un écho de salve d’ultrasons à revenir vers sa source d’émission en se réfléchissant sur un obstacle placé à une distance d connue de la source.
Un calcul basique v = 2d / t donne finalement la vitesse (attention : ne pas oublier l’aller-retour et le facteur 2 dans la formule...)

Le matériel

Le microcontrôleur utilisé est la carte BBC micro:bit, couplée à un shield d’expansion pour faciliter le branchement du capteur. (référence : EF03405 ElecFreaks)
Le capteur est un émetteur/récepteur d’ultrasons qui se branche avec un câble SGV (3 fils : deux pour l’alimentation et un pour le signal) directement sur le shield (pin2 par exemple). (référence du capteur : ElecFreaks micro:bit Octopus sonar:bit)

Ce capteur émet une salve d’ultrasons lorsqu’il reçoit une impulsion de tension sur sa broche de signal (en Input) et renvoie sur la même broche (en Output) un pulse de tension de durée égale au temps nécessaire pour que la salve d’ultrasons revienne au récepteur.

Le montage

La photo ci-dessous présente le microcontrôleur connecté à l’ordinateur pour le transfert du programme et l’alimentation de la carte. Lorsque le programme est transféré, il est possible d’alimenter de façon indépendante le microcontrôleur (avec des piles).
La règle permet de connaître la distance du capteur à l’écran qui réfléchit l’écho ultrasonore.

JPEG - 150.6 ko
Montage (vue d’ensemble)

Détail du branchement du capteur (cable SGV) :

JPEG - 147.7 ko
Câblage du capteur sur le shield

Le code

À chaque appui sur le bouton A de la carte, on appelle la fonction mesure_vitesse qui renvoie la valeur de la vitesse du son. Un affichage de la vitesse sur la carte est alors activé (+ un rappel en console).
La fonction time_pulse_us doit être importée pour permettre de mesurer la durée du pulse délivré par le capteur.
Rappel : seule la pin2 de la carte est nécessaire pour déclencher la mesure du capteur, et lire son signal de retour.

  1. from microbit import *
  2. from machine import time_pulse_us
  3.  
  4. def mesure_vitesse(distance):
  5.     """ Calcule la vitesse du son en m/s
  6.    distance est exprimée en cm """
  7.  
  8.     # envoie une impulsion de 10 ms sur la pin2 pour démarrer une salve US #
  9.     pin2.write_digital(1)
  10.     sleep(10) # signal pendant 10 ms
  11.     pin2.write_digital(0)
  12.     # fin de l'impulsion
  13.  
  14.     pin2.read_digital() # configuration de pin2 en INPUT
  15.     duree = time_pulse_us(pin2, 1) # attend que pin2 passe à 1 puis renvoie la durée en µs pendant laquelle pin2 reste à 1
  16.  
  17.     vitesse = 2 * distance / (duree/1000000) # duree est en µs (+ aller retour) : vitesse en cm/s
  18.     vitesse = round(vitesse/100) # conversion en m/s (arrondie au m/s)
  19.     return vitesse
  20.  
  21. DISTANCE = 50 # distance utilisée pour mesurer la vitesse du son, exprimée en cm !
  22.  
  23. while True:
  24.     if button_a.was_pressed(): # bouton A pour effectuer une mesure
  25.         vitesse = mesure_vitesse(DISTANCE)
  26.         print(vitesse) # retour REPL dans la console de l'éditeur
  27.         display.show("v="+str(vitesse)+" ", delay=500, loop=True, wait=False)

Télécharger

Bilan

Les résultats obtenus pour la vitesse du son sont tout à fait convaincants. Évidemment en augmentant la distance, on gagne en précision (penser à adapter le code...). Le capteur reste toutefois limité à une distance de 4 m.
Et bien entendu, il est facile d’adapter le code pour transformer ce montage en télémètre. Le paramètre n’est plus la distance mais la vitesse du son que l’on pourra fixer à 340 m/s (varie légèrement avec la température).
Amusez-vous bien !

Partager

Imprimer cette page (impression du contenu de la page)