Capteurs de température et applications
Texte légal : Points du programme concernés
Classe de 2nde
Mesurer une grandeur physique à l'aide d'un capteur électrique résistif. Produire et utiliser une courbe d'étalonnage reliant la résistance d'un système avec une grandeur d'intérêt (température, pression, intensité lumineuse, etc.). Utiliser un dispositif avec microcontrôleur et capteur.
Thermistance CTN
Définition : Caractéristique des thermistances CTN
La thermistance utilisée ici est une CTN 470 : la résistance R25 à \(25\ \mathrm{°C}\) est égale à \(470\ \Omega\).
La dépendance entre la valeur de la résistance et la température est donnée par la relation :
\(R_{CTN}=R_{25}\times \text{e}^{B\times \left(\frac{1}{T}- \frac{1}{T_{25}}\right)}\)
La fiche technique de la thermistance utilisée ici donne \(B=3450\ \mathrm{K}\).
On exploitera dans la suite la relation suivante entre la valeur de la résistance et la température en kelvins : \(R_{CTN}=A\times \text{e}^{B/T}\).
Pour la thermistance utilisée :
\(\left \{\begin{aligned} B &=3450\ \mathrm K \\ A &\simeq 4{,}407\times 10^{-3}\ \Omega \end{aligned}\right.\)
Méthode : Montage en pont diviseur de tension
On réalise un pont diviseur de tension avec la thermistance et une résistance \(R=560\ \Omega\). La tension aux bornes de l'assemblage vaut \(+3{,}3\ \mathrm V\).
On mesure la tension aux bornes de la thermistance sur l'entrée analogique A0.
\(U_{CTN}=\dfrac{3{,}3}{1+\dfrac{R}{R_{CTN}}}\).
On en déduit \(R_{CTN}=\dfrac{R}{\dfrac{3{,}3}{U_{CTN}}-1}\).
Et enfin la température en kelvins : \(T=\dfrac{B}{\ln{\left(\dfrac{R_{CTN}}{A} \right)}}\)
Le programme ci-dessous permet de récupérer la valeur de la température et de l'afficher sur le panneau de DEL en mode défilement.
from microbit import *
from math import log
R=543.0 #Valeur de la résistance associée à la thermistance
B=3450.0 #Caractéristique de la thermistance
A=0.004407 #Caractéristique de la thermistance
while True:
tension=pin0.read_analog()*3.3/1023.0 #On lit la tension sur la broche 0
RCTN=R/(3.3/tension-1.0) #Calcul de la résistance CTN
Tk=B/(log(RCTN/A)) #Température en kelvin
Tc=Tk-273.0 #Conversion en celsius
display.scroll(int(Tc)) #Affichage sur la matrice de DEL
#print(int(Tc))
sleep(1000) #Une mesure toutes les secondes
Pour un affichage sur le moniteur série, décommenter la ligne print(int(Tc))
.
Comment modifier cette ligne pour pouvoir tracer l'évolution de la température au cours du temps grâce au traceur de courbes de l'éditeur Mu ?
Remarque : Questionnement préalable et expérience préliminaire
Un travail préliminaire peut consister à faire étudier aux élèves la dépendance de RCTN en fonction de la température à l'aide d'un ohmmètre et d'un thermomètre de référence.
On peut par ailleurs proposer l'étude du pont diviseur de tension lorsque la loi d'Ohm a été vue.
L'exercice ci-contre tiré du manuel collaboratif Le Livre Scolaire propose une étude théorique exploitant notamment la notion de pont diviseur.
Simuler une alarme de température
Comportement attendu
La vidéo ci-dessous montre le résultat attendu avec une DEL verte allumée pour une température inférieure au seuil d'alarme et une DEL rouge si la température est trop élevée.
Deux montages possibles
On propose d'exploiter le montage permettant de mesurer la température à l'aide d'une thermistance.
L'alarme est simulée au choix avec deux DEL ou par l'émission d'un son à l'aide d'un petit haut-parleur.
D'un point de vue programmation, c'est l'occasion d'introduire les conditions : if, elif, else...
Les deux programmes ci-dessous présentent les deux cas illustrés précédemment.
Vous pouvez y repérer la syntaxe des structures conditionnelles.
Attention : avec le haut-parleur, la lecture de la température s'effectue via la borne 1 de la carte. Par défaut, la borne 0 est réservée pour les commandes permettant de jouer un son.
""" Simulation d'une alarme de température : DEL verte OK ; DEL rouge -> Trop chaud """
from microbit import *
from math import log
R = 543.0 # Valeur de la résistance associée à la thermistance
B = 3450.0 # Caractéristique de la thermistance
A = 0.004407 # Caractéristique de la thermistance
Tseuil = 25.0 # On définit le seuil de déclenchement de l'alarme
while True:
tension = pin0.read_analog()*3.3/1023.0 # On lit la tension sur la broche 0
RCTN = R/(3.3/tension-1.0) # Calcul de la résistance CTN
Tk = B/(log(RCTN/A)) # Température en kelvin
Tc = Tk-273.0 # Conversion en celsius
if (Tc > Tseuil):
pin2.write_digital(1) # On allume la DEL rouge, on éteint la verte.
pin1.write_digital(0)
if (Tc < Tseuil):
pin2.write_digital(0) # On allume la DEL verte, on éteint la rouge.
pin1.write_digital(1)
""" Simulation d'une alarme de température : Alarme sonore si la température dépasse le seuil défini"""
from microbit import *
from math import log
import music
R = 543.0 #Valeur de la résistance associée à la thermistance
B = 3450.0 #Caractéristique de la thermistance
A = 0.004407 #Caractéristique de la thermistance
Tseuil = 25.0 # On définit le seuil de déclenchement de l'alarme
# Pour ne pas surcharger le code dans les structures conditionnelles, on définit une fonction mesure_temp()
# qui renvoie la valeur de la température
def mesure_temp():
tension=pin1.read_analog()*3.3/1023.0 #On lit la tension sur la broche 0
RCTN=R/(3.3/tension-1.0) #Calcul de la résistance CTN
Tk=B/(log(RCTN/A)) #Température en kelvin
Tc=Tk-273.0 #Conversion en celsius
return(Tc)
Tempe=mesure_temp() # On effectue une première mesure de la température.
while True:
while Tempe<Tseuil:
Tempe=mesure_temp() # Tant que la température est inférieure au seuil, on ne fait
# rien d'autre que de mesurer la température
while Tempe>Tseuil:
Tempe = mesure_temp() # Tant que la température dépasse le seuil, on joue
# un son de fréquence 1000 Hz en continu (-1 pour la durée)
music.pitch(1000,-1)
Complément : Exploiter l'afficheur de la carte pour éviter les montages supplémentaires
Si on ne souhaite pas faire câbler de composants supplémentaires aux élèves, on peut dans un premier temps exploiter le panneau de DEL de la carte Micro:bit. Ce dernier peut afficher des images pré-enregistrées dans la carte, notamment un smiley joyeux et un smiley triste.
Le programme ci-dessous exploite ces deux images.
"""Simulation d'une alarme de température : smiley content -> OK
smiley pas content -> trop chaud"""
from microbit import *
from math import log
R = 543.0 #Valeur de la résistance associée à la thermistance
B = 3450.0 #Caractéristique de la thermistance
A = 0.004407 #Caractéristique de la thermistance
Tseuil = 22. # On définit le seuil de déclenchement de l'alarme
while True:
tension=pin0.read_analog()*3.3/1023.0 #On lit la tension sur la broche 0
RCTN=R/(3.3/tension-1.0) #Calcul de la résistance CTN
Tk=B/(log(RCTN/A)) #Température en kelvin
Tc=Tk-273.0 #Conversion en celsius
if (Tc > Tseuil):
display.show(Image.SAD) # On affiche un smiley fâché
if (Tc < Tseuil):
display.show(Image.HAPPY) # On affiche un smiley content
Complément : Amélioration possible du programme
Comment faire en sorte de limiter les effets des fluctuations faibles de la température autour du seuil afin que l'alarme ne passe pas très rapidement de l'état actif à inactif ?
Complément : Exploitation de la communication radio de la carte Micro:bit
On peut séparer la mesure de l'affichage de l'alarme en utilisant la communication radio de la carte Micro:bit.
La carte effectuant la mesure de température envoie à la carte réceptrice un message en fonction du dépassement ou non du seuil.
La carte réceptrice active ou non l'alarme selon ce qu'elle reçoit comme message.
Ci-dessous, les deux programmes.
Pour la carte émettrice qui effectue la mesure :
"""Alarme de température distante - Code pour la carte qui effectue la mesure et envoie le message adéquat"""
from microbit import *
from math import log
import radio
Tseuil = 24. # On définit le seuil de déclenchement de l'alarme
def mesure_temp():
R = 543.0 #Valeur de la résistance associée à la thermistance
B = 3450.0 #Caractéristique de la thermistance
A = 0.004407 #Caractéristique de la thermistance
tension = pin0.read_analog()*3.3/1023.0 #On lit la tension sur la broche 0
RCTN = R/(3.3/tension-1.0) #Calcul de la résistance CTN
Tk= B /(log(RCTN/A)) #Température en kelvin
Tc = Tk-273.0 #Conversion en celsius
return(Tc)
radio.on()
while True:
tempe = mesure_temp()
print(tempe)
if (tempe > Tseuil+0.05):
radio.send("chaud") # On affiche un smiley fâché
if (tempe < Tseuil-0.05):
radio.send("ok") # On affiche un smiley content
sleep(500)
Pour la carte réceptrice qui affiche le smiley :
"""Code pour la carte RECEPTRICE de l'alarme de température"""
from microbit import *
import radio
radio.on()
while True:
message=radio.receive()
if message == "ok":
display.show(Image.HAPPY)
if message == "chaud":
display.show(Image.SAD)