Mesurer la vitesse du son
En utilisant un capteur ultrason type HC_SR04, il est possible de chronométrer le temps qu'un ultrason met pour effectuer un trajet aller retour entre la carte microbit et un obstacle.
Le principe de ce capteur est le suivant : On envoie sur la broche trig une impulsion de 10 ms provoquant le déclenchement de la mesure. La broche echo passe alors au niveau haut le temps que le son parte et revienne du capteur vers l'obstacle.
En plaçant le capteur à 1m50 de son obstacle, j'ai pu mesurer une vitesse du son de 342 m/s ce qui n'est pas si mal.
Attention :
Le capteur HC_SR04 que j'utilise fonctionne en 5V. Si la broche trig accepte le 3,3V provenant de la carte, la broche echo renvoie 5V à la microbit qui ne va pas du tout apprécier, celle-ci fonctionnant à 3,3V.
Pour mon expérience, j'utilise le shield gator:bit V2 de sparkfun qui propose une protection contre les surtensions et me permet de protéger ma carte. Si vous n'avez pas ce shield, utilisez pour la broche echo un pont diviseur de tension avec 2 résistances afin de ramener la tension à 3V.
Le capteur doit posséder une alimentation dédiée de 5V, car la carte microbit ne ppeut fournir ce niveau de tension. Pensez toutefois à relier les masses GND de la microbit et de l'alimentation 5V.
Pour mon expérience je n'ai pas eu de problèmes à trouver cette alimentation car elle est fournie par le shield.
Complément :
Il existe des capteurs ultrason compatibles avec le niveau de tension de 3,3V. Cela simplifie grandement le montage. Renseignez vous avant l'achat.
Méthode : le programme
Voici le programme. Il est tout à fait accessible à un élève de seconde dans le cadre de SNT ou du cours de sciences physique.
Placer le capteur à 1m50 d'une paroi
Un appui sur le bouton A déclenche la mesure
La vitesse du son en m/s s'affiche sur l'écran en défilement continu.
from microbit import *
from machine import time_pulse_us
import time
def mesure(distance):
"""Calcule la vitesse du son en m/s
distance est exprimee en m
pin1 : Trig
pin2 : Echo"""
pin1.write_digital(1)
time.sleep_ms(10)
pin1.write_digital(0)
pin2.read_digital()
t2 = time_pulse_us(pin2, 1)
vitesse = distance * 1000000 / t2 * 2
return vitesse
while True:
if button_a.was_pressed():
v=mesure(1.5)
print(v)
display.show("v="+str(v)+" ", delay=500, loop=True, wait=False)
Complément : Fonction time_pulse_us
On utilise ici la fonction time_pulse_us(pin2, 1) qui attend que la broche pin2(premier paramètre) soit au niveau 1 (second paramètre) et qui renvoie la durée en us pendant laquelle cette broche reste au niveau 1. Il faut pour que la broche pin2 soit préalablement configurée en entrée d'où la ligne précédente : pin2.read_digital()
La fonction time_pulse_us() se trouve dans le module machine.