Le diapason émet-il vraiment un la à 440 Hz ? À quelle vitesse le son se propage-t-il dans la salle ? Et comment deux instruments peuvent-ils jouer la même note avec des sons différents ?
Objectifs
- Mesurer une période et calculer une fréquence.
- Mesurer la vitesse du son dans l'air.
- Classer des sons selon leur fréquence.
- Modéliser un son pur et un son composé avec Python.
Compétences travaillées
- Réaliser : brancher une chaîne de mesure, programmer.
- Analyser : exploiter un oscillogramme et un graphique.
- Valider : comparer à une valeur de référence.
- Communiquer : présenter un graphique légendé.
Le code s'exécute réellement dans ton navigateur. Au premier clic sur ▶ Exécuter, Python se télécharge (≈ 7 Mo, une seule fois, connexion Internet nécessaire). Le bouton Télécharger .py donne un fichier utilisable dans EduPython, Thonny, Basthon ou Capytale.
Raccourcis : Ctrl + Entrée exécute, Tab décale la ligne de 4 espaces.
Débutant en Python : fais les cinq activités dans l'ordre, en t'aidant des indices. À l'aise avec les variables et les boucles (en général à partir du deuxième trimestre) : l'activité 1 est facultative, commence directement à l'activité 2 et vise l'activité 5 sans indice.
Matériel
- un diapason (la3) sur sa caisse de résonance et un marteau en caoutchouc ;
- deux microphones, une interface d'acquisition (ou un oscilloscope) ;
- un mètre ruban ; deux règles en bois ou des mains pour claquer.
Variante : un smartphone avec une application d'acquisition (par exemple phyphox) fait aussi bien l'affaire pour le diapason.
Protocole
| \(d\) (m) | 0,20 | 0,40 | 0,60 | 0,80 | 1,00 |
|---|---|---|---|---|---|
| \(\Delta t\) (ms) |
Jeu de données pédagogique Diapason : 10 périodes durent 22,7 ms. Décalages mesurés : 0,59 ; 1,17 ; 1,76 ; 2,33 ; 2,92 ms pour les cinq distances. Ces valeurs correspondent à une salle à environ 20 °C, avec une précision de lecture de ±0,01 ms.
Les branches du diapason, fines, mettent peu d'air en mouvement : le son est faible. La caisse de résonance vibre avec elles et amplifie le son, sans changer sa fréquence. Les micros doivent être alignés avec la source pour que la distance supplémentaire parcourue par le son pour atteindre le second micro soit exactement \(d\). Sinon, la distance réellement parcourue serait différente de \(d\) et la vitesse calculée fausse.
À partir de la durée de 10 périodes, il calcule la période \(T\) (en s), la fréquence \(f = 1/T\), puis l'écart relatif avec la fréquence indiquée sur le diapason, 440 Hz. Comment lire le résultat ? Une fréquence proche de 440 Hz et un écart de moins de 1 %.
À faire : complète les lignes marquées ..., exécute, puis remplace la durée par ta mesure.
abs(...) en Python.f = 1 / T et ecart = abs(f - 440) / 440 * 100.duree_10T = 22.7
T = duree_10T / 10 / 1000
f = 1 / T
ecart = abs(f - 440) / 440 * 100
print("T =", T, "s")
print("f =", round(f, 1), "Hz")
print("écart avec 440 Hz :", round(ecart, 2), "%")
Résultats attendus. \(T = 0{,}002\,27\ \text{s}\), \(f = 440{,}5\ \text{Hz}\), écart 0,12 %.
Interprétation. La fréquence mesurée est en accord avec 440 Hz. Une erreur de lecture de 0,1 ms sur 22,7 ms correspond à 0,4 % : l'écart de 0,12 % est inférieur à cette précision.
Erreurs fréquentes. Oublier de diviser par 1 000 (f = 0,44 Hz) ou par 10 (f = 44 Hz).
Pour une série de sons dont on a mesuré la période, il calcule la fréquence et classe chaque son : infrason (moins de 20 Hz), audible (de 20 Hz à 20 kHz) ou ultrason (plus de 20 kHz). Comment lire le résultat ? Une ligne par son.
À faire : complète la limite dans la condition elif et le texte manquant, puis réponds à Q2.
f < 20, on sait déjà que \(f \geq 20\). Il suffit de tester si \(f\) est inférieure ou égale à 20 000.elif f <= 20000: et domaine = "ultrason".sources = ["grondement d'éléphant", "contrebasse (mi grave)", "voix d'homme", "diapason",
"sifflement", "sifflet à chien", "cri de chauve-souris"]
periodes_ms = [71.4, 24.3, 8.33, 2.27, 0.50, 0.040, 0.020]
for i in range(len(sources)):
f = 1 / (periodes_ms[i] / 1000)
if f < 20:
domaine = "infrason"
elif f <= 20000:
domaine = "audible"
else:
domaine = "ultrason"
print(sources[i], ":", round(f), "Hz ->", domaine)
Résultats attendus. Éléphant 14 Hz (infrason) ; contrebasse 41 Hz, voix 120 Hz, diapason 441 Hz, sifflement 2 000 Hz (audibles) ; sifflet à chien 25 000 Hz et chauve-souris 50 000 Hz (ultrasons).
Interprétation. Plus la période est courte, plus la fréquence est grande : les ultrasons ont des périodes de quelques dizaines de microsecondes. Les éléphants communiquent en partie par infrasons, inaudibles pour nous ; les chiens entendent des ultrasons jusqu'à environ 40 kHz.
Erreurs fréquentes. Écrire elif f < 20 000 avec un espace (erreur de syntaxe) ; inverser l'ordre des tests.
Une grande période correspond à une petite fréquence (\(f = 1/T\)) : 14 Hz, c'est le son le plus grave. Il est en dessous de 20 Hz, limite inférieure du domaine audible humain : c'est un infrason, perçu par d'autres éléphants à plusieurs kilomètres, mais pas par notre oreille.
Il place les points de mesure \((\Delta t\ ;\ d)\), calcule \(v = d/\Delta t\) pour chaque mesure, puis trace la droite du modèle \(d = v_{\text{moy}} \times \Delta t\). Pourquoi ? Si la vitesse est constante, \(d\) est proportionnelle à \(\Delta t\) : points alignés sur une droite passant par l'origine, de coefficient directeur \(v\). Comment le lire ? Des points très proches de la droite.
À faire : complète le calcul de chaque vitesse, puis la liste d_modele. Ajoute légende, titre et axes avec unités.
d[i] et dt[i] (en secondes).v.append(d[i] / dt[i]) ; d_modele.append(v_moy * dt[i]) ; plt.xlabel("Δt (ms)"), plt.ylabel("d (m)"), plt.legend().import matplotlib.pyplot as plt
d = [0.20, 0.40, 0.60, 0.80, 1.00]
dt_ms = [0.59, 1.17, 1.76, 2.33, 2.92]
dt = []
v = []
for i in range(len(d)):
dt.append(dt_ms[i] / 1000)
v.append(d[i] / dt[i])
v_moy = sum(v) / len(v)
print("vitesses (m/s) :", [round(x) for x in v])
print("vitesse moyenne :", round(v_moy), "m/s")
d_modele = []
for i in range(len(dt)):
d_modele.append(v_moy * dt[i])
plt.plot(dt_ms, d, 'o', color='red', label='mesures')
plt.plot(dt_ms, d_modele, '-', color='navy', label='modèle')
plt.title("Distance parcourue par le son en fonction de la durée")
plt.xlabel("Δt (ms)")
plt.ylabel("d (m)")
plt.legend()
plt.grid()
plt.show()
Résultats attendus. Vitesses : 339 ; 342 ; 341 ; 343 ; 342 m/s. Moyenne : 342 m/s. Les points sont pratiquement sur la droite du modèle.
Interprétation. \(d\) est proportionnelle à \(\Delta t\) : le son se propage à vitesse constante, environ 342 m/s, en accord avec 343 m/s à 20 °C (écart de 0,3 %). La première mesure, la plus courte, est la moins précise : 0,01 ms d'erreur sur 0,59 ms représente près de 2 %.
Erreurs fréquentes. Diviser par dt_ms[i] (vitesses 1 000 fois trop petites, 0,34 m/s) ; tracer le modèle avec dt en secondes et les mesures avec dt_ms (les deux séries ne se superposent plus).
La fonction signal(t, f, amplitudes) additionne des sinusoïdes de fréquences \(f\), \(2f\), \(3f\)… avec les amplitudes données :
Le programme trace sur 10 ms un son pur (diapason) et un son composé (modèle simplifié de clarinette), de même fréquence 220 Hz. Comment le lire ? Deux courbes de formes différentes, mais qui se répètent avec la même période.
À faire : complète la ligne de la boucle dans la fonction, exécute, puis réponds à Q3. Essaie ensuite tes propres amplitudes.
rang a pour fréquence rang * f et pour amplitude amplitudes[k].math.sin(2 * math.pi * F * t).u = u + amplitudes[k] * math.sin(2 * math.pi * rang * f * t).import math
import matplotlib.pyplot as plt
def signal(t, f, amplitudes):
u = 0
for k in range(len(amplitudes)):
rang = k + 1
u = u + amplitudes[k] * math.sin(2 * math.pi * rang * f * t)
return u
f = 220
diapason = [1]
clarinette = [1, 0, 0.5, 0, 0.3]
t_ms = []
u_pur = []
u_clar = []
for i in range(401):
t = i * 0.025e-3
t_ms.append(t * 1000)
u_pur.append(signal(t, f, diapason))
u_clar.append(signal(t, f, clarinette))
plt.plot(t_ms, u_pur, '-', color='blue', label='son pur (diapason)')
plt.plot(t_ms, u_clar, '-', color='red', label='son composé (clarinette)')
plt.title("Même note, deux timbres")
plt.xlabel("t (ms)")
plt.ylabel("tension (unité arbitraire)")
plt.legend()
plt.grid()
plt.show()
print("période de la note :", round(1 / f * 1000, 2), "ms")
Résultats attendus. Une sinusoïde bleue et une courbe rouge plus « carrée », avec des bosses. Les deux se répètent toutes les 4,55 ms (un peu plus de 2 périodes sur l'écran de 10 ms).
Interprétation. Les deux sons ont la même période, donc la même fréquence et la même hauteur. Leurs formes diffèrent : ils n'ont pas le même timbre. Le timbre dépend des harmoniques présents et de leurs amplitudes.
Erreurs fréquentes. Oublier rang (toutes les sinusoïdes ont alors la fréquence \(f\) et la courbe reste une sinusoïde) ; oublier u + (seul le dernier harmonique est gardé).
f = 220 en f = 440 ?Les deux courbes se répètent toutes les 4,55 ms environ : même période, donc même fréquence (220 Hz) et même hauteur. Leurs formes sont différentes : timbres différents. Avec \(f = 440\ \text{Hz}\), la période est divisée par 2 (2,27 ms) : on voit deux fois plus de motifs, chacun de même forme qu'avant. La note est plus aiguë (une octave au-dessus), le timbre est conservé.
Sami claque des mains face à un mur. Un micro placé contre ses mains enregistre le claquement puis son écho, 12,0 ms plus tard. Il veut calculer la distance du mur, qu'il a aussi mesurée au mètre ruban : environ 2 m. Son programme contient quatre erreurs : deux l'empêchent de fonctionner, deux donnent un résultat faux sans message.
print. Comment s'appelle la variable de vitesse ? Dans quelle unité est la durée ? Quel chemin le son parcourt-il pendant 12,0 ms ?"Distance du mur :" ; v → v_son ; durée en secondes : duree / 1000 ; diviser par 2 (aller-retour).v_son = 340
duree = 12.0
d = v_son * (duree / 1000) / 2 # erreurs 2, 3 et 4
print("Distance du mur :", round(d, 2), "m") # erreur 1 : virgule
Erreur 1 (bloquante). Dans le print, il manque une virgule entre le texte et round(d, 2) : erreur de syntaxe.
Erreur 2 (bloquante). La variable v n'existe pas : elle s'appelle v_son (NameError).
Erreur 3 (silencieuse). La durée est en millisecondes : le programme affiche 4 080 m, absurde pour un mur de cour.
Erreur 4 (silencieuse). Pendant 12,0 ms, le son fait l'aller-retour : il parcourt deux fois la distance du mur. Sans la division par 2, on trouve 4,08 m : plausible, mais deux fois la mesure au mètre ruban.
Résultat après correction. \(d = 2{,}04\ \text{m}\), en accord avec la mesure au mètre (environ 2 m).
Un ordre de grandeur ne suffit pas toujours : 4 m est « raisonnable ». Il faut une mesure indépendante (le mètre ruban : environ 2 m) ou un schéma du trajet du son (aller jusqu'au mur, puis retour). Un facteur 2 exact entre le calcul et la mesure signale presque toujours un aller-retour oublié.
Un microcontrôleur est un petit ordinateur sur une seule puce, qui pilote des capteurs et des actionneurs (haut-parleur, écran, moteur…). La carte micro:bit en contient un ; elle se programme en Python (MicroPython) depuis le site python.microbit.org, puis le programme est transféré sur la carte par câble USB.
Ce programme s'exécute sur la carte, pas dans cette page : l'éditeur de la page ne connaît pas les modules microbit et music.
À faire : copie ce programme dans l'éditeur micro:bit, transfère-le sur la carte et écoute. Place ensuite le microphone de l'expérience (ou une application d'analyse sonore sur smartphone) devant le haut-parleur et mesure la fréquence de la note à 440 Hz.
from microbit import *
import music
frequences = [262, 330, 392, 440, 523] # fréquences des notes (Hz)
for f in frequences:
display.scroll(str(f), delay=60) # affiche la fréquence
music.pitch(f, 800) # joue un son de fréquence f pendant 800 ms
sleep(300)
Les fréquences augmentent de 262 à 523 Hz : les sons sont de plus en plus aigus, la hauteur d'un son est liée à sa fréquence. La mesure donne une fréquence proche de 440 Hz, aux incertitudes près : la carte joue bien un la. En revanche, le timbre est différent de celui du diapason : la carte produit un signal en créneaux (et non sinusoïdal), riche en harmoniques, d'où un son plus « électronique ». Même hauteur, timbres différents : c'est la forme du signal qui change, comme dans l'activité 4.
La mesure de 10 périodes donne \(f = 440{,}5\ \text{Hz}\), soit un écart de 0,12 % avec 440 Hz, inférieur à la précision de mesure : le diapason émet bien un la3. La distance parcourue par le son est proportionnelle à la durée : il se propage à vitesse constante, environ 342 m/s dans la salle, en accord avec 343 m/s à 20 °C. Deux instruments jouant la même note produisent des signaux de même période (même hauteur) mais de formes différentes : leurs harmoniques n'ont pas les mêmes amplitudes, c'est le timbre.
Grille d'auto-évaluation
A = je sais faire seul · B = avec un peu d'aide · C = partiellement · D = à retravailler.
| Compétence | A | B | C | D |
|---|---|---|---|---|
| Mesurer une période sur un enregistrement | ||||
| Calculer une fréquence et un écart relatif | ||||
| Mesurer la vitesse du son | ||||
| Utiliser des conditions if / elif / else | ||||
| Modéliser un signal avec une fonction | ||||
| Repérer une erreur avec une mesure indépendante |
Fiche professeur
Organisation
Durée totale estimée : 130 min. En séance de 1 h 30 : partie expérimentale et activités 1 à 3 ; activités 4 et 5 et conclusion en fin de séance, à la maison ou en séance suivante. Le parcours « à l'aise » (activité 1 facultative) fait gagner environ 10 min.
Préparation
Diapasons 440 Hz et marteaux ; interface d'acquisition ou smartphones avec phyphox ; pour le prolongement, cartes micro:bit (V2 de préférence) et câbles USB, programme testé au préalable sur une carte.
Sécurité
Volume modéré pour les sons produits (protection de l'audition, lien avec la partie du cours sur le niveau sonore).
Points de vigilance
Mesurer plusieurs périodes pour réduire l'incertitude sur T. Pour la vitesse du son, la distance entre microphones doit être d'au moins 1 m.
Différenciation
Aide : Fournir un oscillogramme imprimé avec l'échelle ; faire mesurer 5 périodes plutôt qu'une.
Approfondissement : Prolongement micro:bit : comparer le timbre du signal en créneaux à celui du diapason.
Évaluation (sur 20)
Fréquence et période (activités 1 à 3, 6 pts) ; activité 4 (timbre, 4 pts) ; activité 5 (4 pts) ; Q5 (4 pts) ; prolongement facultatif (bonus 2 pts).
Les corrections détaillées des activités Python et des questions sont dans les encadrés de chaque partie.
Pour consolider : exercices 4, 6 et 10, puis le quiz du cours.
Exercices corrigés Retour au cours