”Détermination de la vitesse du son dans l’air”
. Objectif
Dans cette activité, nous allons déterminer expérimentalement la vitesse de propagation des ondes sonores en mesurant, à l’aide d’un capteur à ultrasons (par exemple, le HC-SR04), la durée de propagation, Dt, de l’onde sonore entre l’émetteur et le récepteur situés à une distance, d, connue d’un obstacle.
Le programme ci-dessous est adapté pour un capteur ultrasonique à deux broches différentes pour l’émission et la réception des ultrasons.
Dans le cas d’un capteur ultrasonique à une broche commune pour l’émission et la réception des ultrasons, il suffit de déclarer la même broche pour ”trigger_pin” (émetteur US) et ”echo_pin” (récepteur US).
. Le programme
. Programme en Python (”Projet4/Activity1/PY/Activity1.py”)
Déroulement du programme :
– Importation des librairies et définition de fonctions :
. Le module ”ConnectToArduino.py”, contenant les fonctions de connexion à l’Arduino via le protocole ”Firmata Express”,
. Le module ”PymataExpressDef.Py” regroupant toutes les fonctions utiles à l’utilisation de ”Pymata-express” (fonction de déclaration des entrées et sorties, de lectures, d’écritures…) ,
. La bibliothèque ”time” pour la gestion des temps de pause,
. La fonction ”Get_Dt” pour obtenir la durée de propagation dans l’air de l’onde sonore,
. La fonction ”Set_Sonar_Pins” pour déclarer les broches du capteur ultrasonique,
. La fonction ”Sonar_Read” qui appelle la fonction ”Get_Dt”.
– Déclaration des constantes et variables :
. TRIGGER_PIN = 8 (cst correspondant au n° de la broche sur laquelle l’émetteur US est connecté)
. ECHO_PIN = 9 (cst correspondant au n° de la broche sur laquelle le récepteur US est connecté)
. PinButton = 7 (cst correspondant au n° de la broche sur laquelle le bouton poussoir est connecté)
. ValButton = 0 (variable pour stocker la valeur de l’état logique de la broche du bouton poussoir)
. OldValButton = 0 (variable pour stocker la valeur précédente de l’état logique de la broche du bouton poussoir)
. State=0 (variable correspondant à l’action à effectuer)
. OldState = 0 (variable pour stocker la valeur précédente de la variable state)
. Distance = 0 (variable correspondant à la distance en cm entre le capteur et l’obstacle)
. Vitesse = 0 (variable correspondant à la vitesse des ondes ultrasonores dans l’air en m/s)
. Dt = 0 (variable correspondant à la durée de propagation des ondes ultrasonores en µs entre le capteur et l’obstacle)
. DtMesure = 0 (variable correspondant à la durée de propagation des ondes ultrasonores en µs précédente)
. Distancechoisie = False (variable booléenne indiquant si la distance entre le capteur et l’obstacle a été saisie)
. PortComArduino (port COM sur lequel l’Arduino est connecté)
– Connexion à l’Arduino :
. Détection du port COM, tentative d’ouverture du port COM sélectionné et connexion à l’Arduino:
PortComArduino = SelectPortCOM()
board = OpenPortCom(PortComArduino)
. Si la connexion à l’Arduino est réussie :
– Déclaration des broches du capteur ultrasonique :
Set_Sonar_Pins(board, TRIGGER_PIN, ECHO_PIN)
– Déclaration de la broche du bouton poussoir en entrée digitale :
Set_DigitalInput_Pin(board, PinButton)
– Boucle principale du programme (boucle ”while True”) :
Résultats dans la fenêtre Python Shell :
. Programme en langage Arduino (”Projet4/Activity1/INO/Activity1/.ino”)
Déroulement du programme :
Résultats dans le moniteur série :