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. Deux lignes sont à compléter : la conversion de la pente en J·s, puis le travail d’extraction. Le reste, y compris le tracé de la droite et des points, est fourni.

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,3eV2{,}3\ \text{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