Capteurs de température et applications

Thermistance CTN

DéfinitionCaracté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.\)

Thermistance CTN 470

MéthodeMontage 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)}}\)

Mesure de la température à l'aide d'une thermistance montée en pont diviseurInformations[1]
Mesure et affichage de la température avec une carte Micro:bit et une CTN montée en pont diviseurInformations[2]

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.

1
from microbit import *
2
from math import log
3
R=543.0 #Valeur de la résistance associée à la thermistance
4
B=3450.0 #Caractéristique de la thermistance
5
A=0.004407 #Caractéristique de la thermistance
6
while True:
7
    tension=pin0.read_analog()*3.3/1023.0 #On lit la tension sur la broche 0
8
    RCTN=R/(3.3/tension-1.0) #Calcul de la résistance CTN
9
    Tk=B/(log(RCTN/A)) #Température en kelvin
10
    Tc=Tk-273.0 #Conversion en celsius
11
    display.scroll(int(Tc)) #Affichage sur la matrice de DEL
12
    #print(int(Tc))
13
    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 ?

RemarqueQuestionnement 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.

Exercice - Mesure d'une température à l'aide d'une thermistance et d'un microcontrôleurInformations[3]

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.

Exploitation du montage avec thermistance pour simuler une alarme de température
Informations[4]

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...

Deux montages pour simuler une alarme de températureInformations[5]

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.

1
""" Simulation d'une alarme de température : DEL verte OK ; DEL rouge -> Trop chaud """
2
3
from microbit import *
4
from math import log
5
R = 543.0  # Valeur de la résistance associée à la thermistance
6
B = 3450.0  # Caractéristique de la thermistance
7
A = 0.004407  # Caractéristique de la thermistance
8
Tseuil = 25.0  # On définit le seuil de déclenchement de l'alarme
9
10
while True:
11
    tension = pin0.read_analog()*3.3/1023.0  # On lit la tension sur la broche 0
12
    RCTN = R/(3.3/tension-1.0)  # Calcul de la résistance CTN
13
    Tk = B/(log(RCTN/A))  # Température en kelvin
14
    Tc = Tk-273.0  # Conversion en celsius
15
    
16
    if (Tc > Tseuil):
17
        pin2.write_digital(1)  # On allume la DEL rouge, on éteint la verte.
18
        pin1.write_digital(0)
19
    
20
    if (Tc < Tseuil):
21
        pin2.write_digital(0)  # On allume la DEL verte, on éteint la rouge.
22
        pin1.write_digital(1)
1
""" Simulation d'une alarme de température : Alarme sonore si la température dépasse le seuil défini"""
2
3
from microbit import *
4
from math import log
5
import music
6
7
R = 543.0 #Valeur de la résistance associée à la thermistance
8
B = 3450.0 #Caractéristique de la thermistance
9
A = 0.004407 #Caractéristique de la thermistance
10
Tseuil = 25.0  # On définit le seuil de déclenchement de l'alarme
11
12
# Pour ne pas surcharger le code dans les structures conditionnelles, on définit une fonction mesure_temp()
13
# qui renvoie la valeur de la température
14
15
def mesure_temp():
16
    tension=pin1.read_analog()*3.3/1023.0 #On lit la tension sur la broche 0
17
    RCTN=R/(3.3/tension-1.0) #Calcul de la résistance CTN
18
    Tk=B/(log(RCTN/A)) #Température en kelvin
19
    Tc=Tk-273.0 #Conversion en celsius
20
    return(Tc)
21
22
Tempe=mesure_temp()  # On effectue une première mesure de la température.
23
24
while True:
25
    while Tempe<Tseuil:
26
        Tempe=mesure_temp()  # Tant que la température est inférieure au seuil, on ne fait
27
        # rien d'autre que de mesurer la température
28
29
    while Tempe>Tseuil:
30
        Tempe = mesure_temp()  # Tant que la température dépasse le seuil, on joue
31
        # un son de fréquence 1000 Hz en continu (-1 pour la durée)
32
        music.pitch(1000,-1)

ComplémentExploiter 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.

1
"""Simulation d'une alarme de température : smiley content -> OK
2
smiley pas content -> trop chaud"""
3
4
from microbit import *
5
from math import log
6
R = 543.0 #Valeur de la résistance associée à la thermistance
7
B = 3450.0 #Caractéristique de la thermistance
8
A = 0.004407 #Caractéristique de la thermistance
9
Tseuil = 22.  # On définit le seuil de déclenchement de l'alarme
10
while True:
11
    tension=pin0.read_analog()*3.3/1023.0 #On lit la tension sur la broche 0
12
    RCTN=R/(3.3/tension-1.0) #Calcul de la résistance CTN
13
    Tk=B/(log(RCTN/A)) #Température en kelvin
14
    Tc=Tk-273.0 #Conversion en celsius
15
    
16
    if (Tc > Tseuil):
17
        display.show(Image.SAD)  # On affiche un smiley fâché
18
    if (Tc < Tseuil):
19
        display.show(Image.HAPPY)  # On affiche un smiley content

ComplémentAmé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émentExploitation 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 :

1
"""Alarme de température distante - Code pour la carte qui effectue la mesure et envoie le message adéquat"""
2
3
from microbit import *
4
from math import log
5
import radio
6
7
Tseuil = 24.  # On définit le seuil de déclenchement de l'alarme
8
9
def mesure_temp():
10
    R = 543.0 #Valeur de la résistance associée à la thermistance
11
    B = 3450.0 #Caractéristique de la thermistance
12
    A = 0.004407 #Caractéristique de la thermistance
13
    tension = pin0.read_analog()*3.3/1023.0 #On lit la tension sur la broche 0
14
    RCTN = R/(3.3/tension-1.0) #Calcul de la résistance CTN
15
    Tk= B /(log(RCTN/A)) #Température en kelvin
16
    Tc = Tk-273.0 #Conversion en celsius
17
    return(Tc)
18
19
radio.on()
20
21
while True:
22
    tempe = mesure_temp()
23
    print(tempe)
24
    if (tempe > Tseuil+0.05):
25
        radio.send("chaud")  # On affiche un smiley fâché
26
    if (tempe < Tseuil-0.05):
27
        radio.send("ok")  # On affiche un smiley content
28
    sleep(500)

Pour la carte réceptrice qui affiche le smiley :

1
"""Code pour la carte RECEPTRICE de l'alarme de température"""
2
3
from microbit import *
4
import radio
5
radio.on()
6
while True:
7
    message=radio.receive()
8
    if message == "ok":
9
        display.show(Image.HAPPY)
10
    if message == "chaud":
11
        display.show(Image.SAD)