R = U / I def temperature(R_mes):
Seconde · Chapitre 15 · TP expérimental et numérique

Loi d'Ohm et étalonnage d'une thermistance

Tu vas tracer la caractéristique d'un conducteur ohmique au multimètre, puis étalonner une thermistance dans un bain d'eau. Python t'aidera à vérifier la loi d'Ohm, à modéliser la caractéristique, puis à transformer ta thermistance en véritable thermomètre.

≈ 2 h 25 en toutMultimètres + 5 activités PythonSeul ou en binômePython s'exécute dans la page
← Tous les cours ← Retour au cours
Partie 1
Problématique

Comment vérifier qu'un dipôle suit la loi d'Ohm, et comment transformer une thermistance en thermomètre ?

Objectifs

  • Brancher correctement un voltmètre et un ampèremètre.
  • Tracer et modéliser la caractéristique d'un conducteur ohmique.
  • Réaliser la courbe d'étalonnage d'une thermistance.
  • Retrouver une température à partir d'une résistance mesurée.

Compétences travaillées

  • Réaliser : un montage électrique et des mesures.
  • Analyser : choisir un modèle (droite passant par l'origine).
  • Valider : comparer une valeur mesurée à une valeur annoncée.
  • Communiquer : présenter un graphique et une conclusion.
L'éditeur Python de cette page

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.

Choisis ton parcours

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.

1
Expérience : caractéristique et étalonnage
≈ 35 min · en salle de TP

Matériel

  • un générateur de tension réglable (0 à 6 V) ;
  • un conducteur ohmique marqué 220 Ω (tolérance 5 %) ;
  • deux multimètres et des fils ;
  • une thermistance CTN de 10 kΩ, un bécher d'eau, une bouilloire, un thermomètre de référence.

Protocole

Caractéristique. Brancher en série le générateur, le conducteur ohmique et un multimètre en ampèremètre (calibre mA). Brancher l'autre multimètre en voltmètre aux bornes du conducteur ohmique.
Pour \(U\) = 1, 2, 3, 4, 5 et 6 V, relever l'intensité \(I\).
Étalonnage. Plonger la thermistance et le thermomètre dans l'eau. Mesurer \(R\) avec un multimètre en ohmmètre, en ajoutant de l'eau chaude pour obtenir 20, 30, 40, 50, 60 et 70 °C. Attention à l'eau chaude.
\(U\) (V)1,02,03,04,05,06,0
\(I\) (mA)
\(\theta\) (°C)203040506070
\(R\) (kΩ)
Si tu ne peux pas faire l'expérience

Jeu de données pédagogique Caractéristique : \(I\) = 4,6 ; 9,0 ; 13,7 ; 18,1 ; 22,8 ; 27,2 mA pour \(U\) = 1,0 à 6,0 V. Étalonnage : \(R\) = 12,4 ; 8,1 ; 5,3 ; 3,6 ; 2,5 ; 1,8 kΩ de 20 °C à 70 °C. Valeurs construites à partir d'un conducteur ohmique de 220 Ω et d'une thermistance CTN de 10 kΩ, avec des écarts de mesure réalistes.

Q1
Pourquoi ne faut-il pas brancher l'ampèremètre aux bornes du conducteur ohmique ? Pourquoi attend-on quelques instants avant de lire \(R\) quand on change la température de l'eau ?

Un ampèremètre a une résistance très faible : branché en dérivation, il court-circuiterait le conducteur ohmique, le courant passerait presque entièrement par lui et pourrait faire fondre son fusible. Il doit être traversé par le courant du dipôle, donc branché en série. Pour l'étalonnage, la thermistance doit atteindre la même température que l'eau (et que le thermomètre de référence) : il faut attendre que la valeur de \(R\) se stabilise.

2
Activité 1 — Une mesure, une résistance
≈ 10 min · Niveau 1 : variables, condition simple
Ce que fait le programme

À partir d'une mesure \((U\ ;\ I)\), il calcule \(R = U/I\) et vérifie si la valeur est dans la tolérance annoncée (220 Ω ± 5 %, soit ± 11 Ω). Comment lire le résultat ? Une résistance en ohms et un verdict.

À faire : complète la conversion de l'intensité en ampères, exécute, puis teste une autre ligne du tableau.

Indice 1 — physique. \(1\ \text{mA} = 10^{-3}\ \text{A}\) : pour passer des mA aux A, on divise par 1 000.
Indice 2 — code. Le résultat doit utiliser la variable I_mA.
Indice 3 — code. I = I_mA / 1000
Correction de l'activité 1
U = 4.0
I_mA = 18.1

I = I_mA / 1000
R = U / I

print("R =", round(R), "ohms")
if abs(R - 220) <= 11:
    print("Conforme : la résistance est dans la tolérance de 5 %.")
else:
    print("Hors tolérance.")

Résultats attendus. \(R = 221\ \Omega\) : conforme.

Interprétation. La valeur mesurée est à 1 Ω de la valeur annoncée, bien dans la tolérance de ± 11 Ω. abs(R - 220) est l'écart entre la mesure et la valeur annoncée, sans tenir compte de son signe.

Erreurs fréquentes. Oublier la conversion (I = I_mA) : on trouve \(R = 0{,}22\ \Omega\), et le programme répond « Hors tolérance ».

3
Activité 2 — Le rapport U/I est-il constant ?
≈ 15 min · Niveau 2 : listes, boucle, moyenne
Ce que fait le programme

Il calcule \(U/I\) pour les six mesures, puis la moyenne. Pourquoi ? Si le dipôle suit la loi d'Ohm, ce rapport doit être le même pour toutes les mesures, aux incertitudes près. Comment lire le résultat ? Six valeurs voisines et leur moyenne.

À faire : complète le calcul de R dans la boucle, exécute, puis réponds à Q2.

Indice 1 — physique. Pour chaque mesure, \(R = U/I\) avec \(I\) en ampères.
Indice 2 — code. L'intensité de la mesure i est I_mA[i], en milliampères.
Indice 3 — code. R = U[i] / (I_mA[i] / 1000)
Correction de l'activité 2
U = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]
I_mA = [4.6, 9.0, 13.7, 18.1, 22.8, 27.2]

somme = 0
for i in range(len(U)):
    R = U[i] / (I_mA[i] / 1000)
    somme = somme + R
    print("U =", U[i], "V | I =", I_mA[i], "mA | U/I =", round(R), "ohms")

R_moy = somme / len(U)
print("Moyenne :", round(R_moy), "ohms")

Résultats attendus. \(U/I\) = 217 ; 222 ; 219 ; 221 ; 219 ; 221 Ω. Moyenne : 220 Ω.

Interprétation. Le rapport \(U/I\) est constant à ± 3 Ω près : le dipôle suit la loi d'Ohm, et sa résistance vaut 220 Ω, la valeur annoncée. La première mesure est la plus éloignée : à faible courant, l'erreur de lecture de 0,1 mA pèse plus lourd (0,1 sur 4,6, soit 2 %).

Erreurs fréquentes. Écrire U[i] / I_mA[i] / 1000 sans parenthèses : Python divise encore par 1 000 et donne des résistances un million de fois trop petites.

Q2
Pourquoi n'a-t-on pas mis la mesure \(U = 0\), \(I = 0\) dans les listes ? Que se passerait-il ?

Pour \(I = 0\), le calcul \(U/I\) est une division par zéro : Python s'arrêterait avec une ZeroDivisionError. Ce point n'apporte d'ailleurs aucune information sur la résistance : il indique seulement que la caractéristique passe par l'origine, ce que l'on vérifiera sur le graphique.

4
Activité 3 — Modéliser la caractéristique
≈ 15 min · Niveau 3 : nuage de points et modèle
Ce que fait le programme

Il trace les points de mesure \(U = f(I)\), puis la droite modèle \(U = R \times I\) avec \(R = 220\ \Omega\). Pourquoi ? Si le modèle est bon, la droite passe au plus près de tous les points. Comment le lire ? Les points doivent être répartis de part et d'autre de la droite, sans s'en écarter de plus que l'incertitude de mesure.

À faire : complète le calcul de la tension du modèle, exécute, puis commente le graphique.

Indice 1 — physique. Loi d'Ohm : \(U = R \times I\), avec \(I\) en ampères.
Indice 2 — code. L'intensité numéro i du modèle est I_mod[i], en mA : il faut la diviser par 1 000.
Indice 3 — code. U_mod.append(R * I_mod[i] / 1000)
Correction de l'activité 3
import matplotlib.pyplot as plt

U = [0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0]
I_mA = [0, 4.6, 9.0, 13.7, 18.1, 22.8, 27.2]
R = 220

I_mod = [0, 5, 10, 15, 20, 25, 30]
U_mod = []
for i in range(len(I_mod)):
    U_mod.append(R * I_mod[i] / 1000)

plt.plot(I_mA, U, 'o', color='red', label='mesures')
plt.plot(I_mod, U_mod, '-', color='navy', label='modèle U = 220 × I')
plt.title("Caractéristique du conducteur ohmique")
plt.xlabel("I (mA)")
plt.ylabel("U (V)")
plt.legend()
plt.grid()
plt.show()

Résultat attendu. Une droite passant par l'origine (de 0 V à 6,6 V pour 30 mA) ; les sept points de mesure sont pratiquement dessus.

Interprétation. La caractéristique est une droite passant par l'origine : le dipôle est un conducteur ohmique, et le modèle \(U = 220 \times I\) décrit bien les mesures. Le coefficient directeur de la droite est la résistance.

Erreurs fréquentes. Oublier la division par 1 000 : la droite monterait jusqu'à 6 600 V, et les points de mesure seraient écrasés contre l'axe horizontal.

5
Activité 4 — Un thermomètre en Python
≈ 20 min · Niveau 4 : fonction, parcours d'un tableau
Ce que fait le programme

La fonction temperature(R_mes) cherche, dans le tableau d'étalonnage, les deux points qui encadrent la résistance mesurée, puis estime \(\theta\) en assimilant la courbe à une droite entre ces deux points :

\(\theta = \theta_i + (\theta_{i+1} - \theta_i) \times \dfrac{R_i - R_{\text{mes}}}{R_i - R_{i+1}}\)

C'est le calcul de l'exercice 9. Si la résistance est hors du tableau, la fonction renvoie None (« rien ») : on ne peut pas extrapoler sans risque. Comment lire le résultat ? Une température pour chaque résistance testée.

À faire : complète la ligne return de la fonction, exécute, puis réponds à Q3.

Indice 1 — maths. On ajoute à \(\theta_i\) une fraction de l'écart de 10 °C : la fraction \(\dfrac{R_i - R_{\text{mes}}}{R_i - R_{i+1}}\), comprise entre 0 et 1.
Indice 2 — code. \(\theta_{i+1}\) s'écrit theta[i + 1] et \(R_i\) s'écrit R[i]. Mets des parenthèses autour du numérateur et du dénominateur.
Indice 3 — code. return theta[i] + (theta[i + 1] - theta[i]) * (R[i] - R_mes) / (R[i] - R[i + 1])
Correction de l'activité 4
theta = [20, 30, 40, 50, 60, 70]
R = [12.4, 8.1, 5.3, 3.6, 2.5, 1.8]

def temperature(R_mes):
    for i in range(len(theta) - 1):
        if R[i + 1] <= R_mes <= R[i]:
            return theta[i] + (theta[i + 1] - theta[i]) * (R[i] - R_mes) / (R[i] - R[i + 1])
    return None

for R_mes in [4.4, 10.0, 2.0, 15.0]:
    t = temperature(R_mes)
    if t is None:
        print("R =", R_mes, "kΩ -> hors du domaine d'étalonnage")
    else:
        print("R =", R_mes, "kΩ -> θ ≈", round(t, 1), "°C")

Résultats attendus. 4,4 kΩ → 45,3 °C ; 10,0 kΩ → 25,6 °C ; 2,0 kΩ → 67,1 °C ; 15,0 kΩ → hors du domaine d'étalonnage.

Interprétation. La fonction transforme une mesure électrique en température : c'est exactement ce que fait le circuit d'un thermomètre électronique. Pour 10,0 kΩ, la thermistance (10 kΩ à 25 °C) donne 25,6 °C : l'interpolation par segments de droite surestime légèrement la température, car la courbe réelle est arrondie. Des points d'étalonnage plus serrés réduiraient cet écart.

Erreurs fréquentes. Tester R[i] <= R_mes <= R[i + 1] : comme \(R\) diminue quand \(\theta\) augmente, cette condition n'est jamais vraie et la fonction renvoie toujours None.

Q3
Pourquoi la fonction refuse-t-elle de donner une température pour 15,0 kΩ ? Que faudrait-il faire pour mesurer des températures plus basses ?

15,0 kΩ est plus grand que la plus grande résistance du tableau (12,4 kΩ à 20 °C) : la température est inférieure à 20 °C, hors du domaine étudié. Prolonger la courbe au hasard serait risqué, car elle n'est pas droite. Pour mesurer des températures plus basses, il faut compléter l'étalonnage : mesurer \(R\) dans de l'eau à 10 °C, 0 °C (eau et glace)…

6
Activité 5 — Le programme de Jade
≈ 15 min · Niveau 5 : trouver et corriger des erreurs
La situation

Jade veut calculer la résistance moyenne à partir des six mesures de la caractéristique et l'écart à la valeur annoncée. Son programme contient quatre erreurs : deux l'empêchent de fonctionner, deux donnent un résultat faux sans message. Le résultat attendu est celui de l'activité 2 : 220 Ω, écart 0 Ω.

Indice 1 — méthode. Corrige d'abord ce que Python signale, une erreur à la fois. Puis compare le résultat à 220 Ω.
Indice 2 — où chercher. Que manque-t-il à la fin de la ligne for ? Le nom de la variable du premier print existe-t-il ? Dans quelle unité est I_mA ? Combien de mesures la boucle parcourt-elle vraiment ?
Indice 3 — les quatre corrections. Ajouter : après la ligne for ; R_moyenne → R_moy ; U[i] / (I_mA[i] / 1000) ; range(len(U)).
Correction de l'activité 5
U = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]
I_mA = [4.6, 9.0, 13.7, 18.1, 22.8, 27.2]

somme = 0
for i in range(len(U)):                # erreurs 1 et 4 : deux-points ; toutes les mesures
    R = U[i] / (I_mA[i] / 1000)        # erreur 3 : intensité en ampères
    somme = somme + R

R_moy = somme / len(U)
print("R moyenne =", round(R_moy), "ohms")      # erreur 2 : nom de variable
print("Écart à 220 ohms :", round(R_moy - 220), "ohms")

Erreur 1 (bloquante). Il manque les deux-points à la fin de la ligne for : erreur de syntaxe.

Erreur 2 (bloquante). R_moyenne n'existe pas : NameError.

Erreur 3 (silencieuse). L'intensité est laissée en milliampères : les résistances calculées sont 1 000 fois trop petites.

Erreur 4 (silencieuse). range(len(U) - 1) s'arrête à l'avant-dernière mesure : on additionne 5 valeurs mais on divise par 6. Avec les erreurs 1 à 3 corrigées, le programme afficherait 183 Ω, un écart de −37 Ω qui ferait croire à tort que la résistance est hors tolérance.

Résultat après correction. R moyenne = 220 ohms et Écart à 220 ohms : 0 ohms.

Q4
Après correction des erreurs 1 et 2, le programme affiche « R moyenne = 0 ohms » et « Écart à 220 ohms : -220 ohms ». Quels indices montrent que c'est faux ?

Une résistance nulle laisserait passer un courant énorme : avec 6 V, on mesurerait bien plus que 27 mA. Un calcul de tête avec une seule mesure (\(6{,}0 / 0{,}0272 \approx 220\ \Omega\)) contredit aussi le programme. Le résultat est environ 1 000 fois trop petit (0,18 Ω arrondi à 0) : c'est le signe d'un oubli de conversion des milliampères.

+
Prolongement — Un thermomètre avec un microcontrôleur
≈ 25 min · carte micro:bit, thermistance CTN de 10 kΩ, conducteur ohmique de 10 kΩ, plaque d'essai
Un microcontrôleur, c'est quoi ?

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.

Le montage

Brancher en série, entre la broche 3V et la broche GND de la carte : le conducteur ohmique \(R = 10\ \text{k}\Omega\), puis la thermistance. Relier le point commun aux deux dipôles à la broche 0. La carte mesure la tension aux bornes de la thermistance et la code par un nombre \(N\) entre 0 (0 V) et 1023 (tension d'alimentation).

D'après la loi des mailles et la loi d'Ohm (exercice 10 du chapitre), \(\dfrac{N}{1023} = \dfrac{R_{CTN}}{R_{CTN} + R}\), d'où \(R_{CTN} = R \times \dfrac{N}{1023 - N}\). La valeur exacte de la tension d'alimentation n'intervient pas.

À faire : réalise le montage, copie le programme (il reprend la fonction temperature de l'activité 4), transfère-le sur la carte et plonge la thermistance dans de l'eau à différentes températures. Compare à un thermomètre de référence.

from microbit import *

R = 10.0                                    # résistance fixe du montage (kΩ)
theta = [20, 30, 40, 50, 60, 70]            # étalonnage du TP : températures (°C)
R_eta = [12.4, 8.1, 5.3, 3.6, 2.5, 1.8]     # étalonnage du TP : résistances (kΩ)

def temperature(R_mes):
    for i in range(len(theta) - 1):
        if R_eta[i + 1] <= R_mes <= R_eta[i]:
            return theta[i] + (theta[i + 1] - theta[i]) * (R_eta[i] - R_mes) / (R_eta[i] - R_eta[i + 1])
    return None

while True:
    N = pin0.read_analog()                  # nombre entre 0 et 1023
    if 0 < N < 1023:
        R_ctn = R * N / (1023 - N)          # résistance de la thermistance (kΩ)
        t = temperature(R_ctn)
        if t is None:
            display.scroll("hors domaine")
        else:
            display.scroll(str(round(t)) + " C")
    sleep(1000)
Q+
À 25 °C, la thermistance a une résistance de 10 kΩ. Quelle valeur de \(N\) la carte doit-elle lire ? Quelle température affiche-t-elle alors ? Pourquoi le programme teste-t-il 0 < N < 1023 ?

Si \(R_{CTN} = R = 10\ \text{k}\Omega\), la thermistance reçoit la moitié de la tension : \(N \approx 1023/2 \approx 511\). Le programme calcule alors \(R_{CTN} \approx 10{,}0\ \text{k}\Omega\) et affiche environ 26 °C (25,6 °C par interpolation entre 20 et 30 °C) : l'écart de 1 °C vient de l'interpolation par segments de droite. Le test évite une division par zéro (\(N = 1023\), thermistance débranchée) et un calcul absurde (\(N = 0\), court-circuit). La carte devient un capteur de température : la grandeur physique est transformée en tension, puis en nombre, puis en température grâce à l'étalonnage.

7
Conclusion et auto-évaluation
≈ 10 min
Q5
Réponds à la problématique : comment vérifier qu'un dipôle suit la loi d'Ohm, et comment transformer une thermistance en thermomètre ?

On mesure plusieurs couples \((I\ ;\ U)\) avec un ampèremètre en série et un voltmètre en dérivation, puis on trace la caractéristique \(U = f(I)\). Si c'est une droite passant par l'origine (rapport \(U/I\) constant), le dipôle suit la loi d'Ohm \(U = RI\), et \(R\) est le coefficient directeur : ici 220 Ω, conforme à la valeur annoncée. Pour faire d'une thermistance un thermomètre, on l'étalonne : on mesure sa résistance à des températures connues, ce qui donne la courbe \(R = f(\theta)\). Une mesure de \(R\) permet ensuite de retrouver \(\theta\) par lecture inverse de la courbe, ou par le calcul (fonction temperature), uniquement dans le domaine étalonné.

Grille d'auto-évaluation

A = je sais faire seul · B = avec un peu d'aide · C = partiellement · D = à retravailler.

CompétenceABCD
Brancher un voltmètre et un ampèremètre
Convertir les mA et les kΩ
Vérifier la loi d'Ohm sur des mesures
Tracer une caractéristique et un modèle
Exploiter une courbe d'étalonnage
Repérer une erreur par un ordre de grandeur
Clique sur A, B, C ou D pour chaque compétence.
Fiche professeur

Organisation

Durée totale estimée : 145 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

Générateurs 0–6 V, conducteurs ohmiques 220 Ω, deux multimètres par binôme, thermistances CTN 10 kΩ, bouilloire. Pour le prolongement : cartes micro:bit, plaques d'essai, conducteurs ohmiques de 10 kΩ, programme testé au préalable sur une carte.

Sécurité

Eau chaude : bouilloire gérée par le professeur, béchers sur paillasse stable. Ne pas dépasser 6 V.

Points de vigilance

Branchements des multimètres (A en série, V en dérivation, borne COM) : vérifier chaque montage avant la mise sous tension. Conversion mA → A : erreur la plus fréquente.

Différenciation

Aide : Distribuer le schéma du montage à reproduire ; donner les intensités en A dans le tableau.

Approfondissement : Prolongement micro:bit : transformer la thermistance en thermomètre autonome.

Évaluation (sur 20)

Loi d'Ohm (activités 2 et 3, 6 pts) ; étalonnage et fonction temperature (activité 4, 6 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.

TP terminé, bravo !

Pour consolider : exercices 5, 9 et 10, puis le quiz du cours.

Exercices corrigés Retour au cours