Chapitre 12

Activités Python

Photon et effet photoélectrique

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 Ec=hνφE_c = h\nu - \varphi 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 :

  1. La pente sort en eV/Hz. Compléter h_exp : comment la convertir en J·s ?
  2. Que représente l’ordonnée à l’origine ? Compléter phi.
  3. Exécuter : comparer h_exp à la valeur admise, et phi au travail d’extraction du sodium (2,32{,}3 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()

← Retour au portail du chapitre