Activité
Retrouver la constante de Planck
Consigne
Ouvrez la page des scripts du chapitre pour consulter le code et télécharger les fichiers .py.
Le script Ch12_millikan.py (dossier scripts/) rejoue la mesure historique de Millikan (1916) : des couples (fréquence, énergie cinétique maximale) mesurés sur le sodium, il tire la droite par régression linéaire — la pente est la constante de Planck. Il s’exécute tel quel, à deux lignes près (# À COMPLÉTER).
(La suite du script — le tracé de la droite et des points — est fournie et n’est pas à modifier.)
Questions :
- La pente sort en eV/Hz. Compléter
h_exp: comment la convertir en J·s ? - Que représente l’ordonnée à l’origine ? Compléter
phi. - Exécuter : comparer
h_expà la valeur admise, etphiau travail d’extraction du sodium ( eV). Pourquoi ce type de mesure a-t-il valu un prix Nobel à Millikan ?
Fiche O5 — Python et fiche M2 (régression linéaire) : tout y est rappelé.
Script élève
# -*- coding: utf-8 -*-
# Chapitre 12 — Refaire la mesure de Millikan
# Des mesures (fréquence, énergie cinétique maximale) sur le sodium :
# la droite Ec = h*nu - phi a pour pente la constante de Planck.
import matplotlib.pyplot as plt
from scipy.stats import linregress
# mesures : fréquence (Hz) et énergie cinétique maximale (eV)
nu = [6.0e14, 7.0e14, 8.0e14, 9.0e14, 10.0e14]
Ec = [0.21, 0.62, 1.04, 1.45, 1.86]
e = 1.60e-19 # charge élémentaire (C)
# --- régression linéaire avec la méthode de la fiche M2 ---
reg = linregress(nu, Ec)
pente = reg.slope # en eV/Hz
ordonnee = reg.intercept # en eV
h_exp = 0 # conversion eV/Hz -> J.s # À COMPLÉTER
phi = 0 # travail d'extraction (eV) # À COMPLÉTER
print("pente =", pente, "eV/Hz")
print("h_exp =", h_exp, "J.s (valeur admise : 6,63e-34 J.s)")
print("phi =", phi, "eV")
# --- trace ---
xs = [0] + nu
ys = []
xs_reduits = []
for x in xs:
ys.append(pente * x + ordonnee)
xs_reduits.append(x / 1e14)
nu_reduites = []
for x in nu:
nu_reduites.append(x / 1e14)
plt.plot(xs_reduits, ys, label="modèle ajusté")
plt.scatter(nu_reduites, Ec, color="orange", zorder=3,
label="mesures")
plt.axhline(0, color="gray", lw=0.8)
plt.xlabel("fréquence (10^14 Hz)")
plt.ylabel("Ec max (eV)")
plt.legend()
plt.grid(True)
plt.show()