Une CTN est un capteur résistif à coefficient de température négatif dont l’évolution de la résistance en fonction de la température est donnée par la figure suivante :
Principe de mesure d’une résistance
La plupart des modules pour capteur résistif utilise un pont diviseur de tension pour la mesure de la résistance du capteur. Par rapport au pont Wheatstone, cette méthode présente l’avantage d’être simple à mettre en oeuvre.
Montage 1
Le capteur est connecté à la masse. Il s’agit du montage le plus souvent rencontré.
Montage 2
Le capteur est connecté à l’alimentation Vcc.
Montage 3
En plus de la mesure de la tension du capteur, une mesure du courant est aussi réalisée à partir de la tension aux bornes de la résistance R par l’intermédiaire d’un amplificateur différentiel. La résistance du capteur est alors calculée avec la loi d’Ohm.
Mesure de la résistance de la CTN
L’ensemble formé du module pour capteur résistif et du microcontrôleur est vu comme un ohmmètre. Les programmes suivants ont donc pour objectif de mesurer la résistance de la CTN.
Arduino (Python/Nanpy)
L’entrée analogique A0 mesure la tension du capteur.
# Mesure de la résistance d'une CTN
from nanpy import ArduinoApi # Gestion de l'Arduino
from nanpy import SerialManager # Gestion port série
from time import sleep # Importation de sleep(seconde)
Vcc = 5.0 # Tension d'alimentation
Ro = 10000 # Résistance du pont
port = SerialManager(device='COM6') # Sélection du port série (à remplacer)
uno = ArduinoApi(connection=port) # Déclaration de la carte Arduino
while True :
U = uno.analogRead(0)*5/1023 # Lecture la tension sur A0
R = Ro*U/(Vcc-U) # Calcul de la résistance
print("R = ", R) # Affichage
sleep(1) # Temporisation d'une seconde
port.close() # Fermeture du port série
PyBoard (MicroPython)
Le montage ci-dessous utilise une carte Feather STM32F405 Express. L’entrée analogique A0 mesure la tension du capteur.
# Mesure de la resistance d'une CTN
from pyb import Pin, ADC, delay
adc = ADC(Pin("A0")) # Déclaration du CAN
Ro = 10e3 # Résistance série
while True:
N = adc.read() # Mesure de la tension
R = Ro*N/(4095-N) # Calcul de R
print("R =", R) # Affichage
delay(1000) # Temporisation
Micro:bit (MicroPython)
# Mesure de la resistance d'une CTN et calcul de la température
from microbit import *
Ro = 10e3 # Résistance série
while True:
N = pin0.read_analog() # Mesure de la tension
R = Ro*N/(1023-N) # Calcul de R
print("R =", R) # Affichage
sleep(1000) # Temporisation
Caractéristique R=f(T)
Courbe d’étalonnage
Les mesures suivantes peuvent être effectuées avec le microcontrôleur ou à l’ohmmètre.
Note : pour 25°C la résistance mesurée prend la valeur particulière de 10 kΩ !
Relation de Steinhart-Hart
Sur une grande plage de variation, la relation entre la température (en K) et la résistance de la CTN est :
A, B et C sont les coefficients de Steinhart-Hart. Ils sont donnés par le constructeur ou peuvent se déterminer expérimentalement à partir de trois points de mesure et du programme Python steinhart-hart.py.
Ce programme donne les résultats suivants :
Simplification de relation de Steinhart-Hart
Sur une plage de variation plus réduite de la température, la relation de Steinhart-Hart permet d’écrire :



Ces coefficients sont généralement donnés par le constructeur ou peuvent être déterminés par une modélisation de la caractéristique.
Le calcul de la température (en K) s’effectue à l’aide de la relation suivante :
Application : un thermomètre numérique
Il s’agit ici d’afficher par le microcontrôleur la température mesurée par la CTN à partir de la relation de Steinhart-Hart.
Arduino (Python/Nanpy)
# Mesure de la resistance d'une CTN et calcul de la température
# Calcul de la température à partir de la relation de Steinhart-Hart
from nanpy import ArduinoApi # Gestion de l'Arduino
from nanpy import SerialManager # Gestion port série
from time import sleep # Importation de sleep(seconde)
from math import log
Vcc = 5.0 # Tension d'alimentation
Ro = 10000 # Résistance du pont
A = 1.0832e-3 # Coeff. de Steinhart-Hart
B = 2.1723e-4 # ...
C = 3.2770e-7 # ...
port = SerialManager(device='COM6') # Sélection du port série (à remplacer)
uno = ArduinoApi(connection=port) # Déclaration de la carte Arduino
while True :
U = uno.analogRead(0)*5/1023 # Lecture la tension sur A0
R = Ro*U/(Vcc-U) # Calcul de la résistance
T = 1.0 / (A + B*log(R) + C*log(R)**3) # Calcul de la température en Kelvin
T = T-273.15 # Calcul de la température en Celsius
print("R = ", R, "T = ", T) # Affichage
sleep(1) # Temporisation d'une seconde
port.close() # Fermeture du port série
PyBoard (MicroPython)
# Mesure de la resistance d'une CTN et calcul de la température
# Calcul de la température à partir de la relation de Steinhart-Hart
from pyb import Pin, ADC, delay
from math import log
adc = ADC(Pin("A0")) # Déclaration du CAN
Ro = 10e3 # Résistance série
A = 0.0010832035972923174 # Coeff. de Steinhart-Hart
B = 0.00021723460553451255 # ...
C = 3.276999926128753e-07 # ...
while True:
N = adc.read() # Mesure de la tension
R = Ro*N/(4095-N) # Calcul de R
T = 1/(A + B*log(R) + C*log(R)**3) - 273.15 # Relation de Steinhart-Hart
print("R =", R, "T =", T) # Affichage
delay(1000) # Temporisation
PyBoard (MicroPython)
# Mesure de la resistance d'une CTN et calcul de la température
# Calcul de la température à partir de la relation de Steinhart-Hart
from microbit import *
from math import log
Ro = 10e3 # Résistance série
A = 1.0832e-3 # Coefficients de Steinhart-Hart
B = 2.1723e-4 # ...
C = 3.2770e-7 # ...
while True:
N = pin0.read_analog() # Mesure de la tension
R = Ro*N/(1023-N) # Calcul de R
T = 1/(A + B*log(R) + C*log(R)**3) - 273.15 # Relation de Steinhart-Hart
print("R =", R, "T =", T) # Affichage
sleep(1000) # Temporisation
En conclusion
Placer un capteur résistif (température, pression, lumière, …) dans un pont diviseur de tension reste une solution simple pour mesurer sa résistance à l’aide d’un microcontrôleur.
Bonjour, je suis tombé sur votre site en cherchant comment utiliser le capteur de pression Grove sur une micro:bit.
J’adore, merci pour ce travail!
Pour ce qui est de la CTN, j’ai toujours utilisé le montage dans lequel elle est connectée à la bonne VCC. Y-a-t-il une raison pour laquelle le montage dans lequel elle est reliée à la masse est plus fréquemment utilisé?
Merci d’avance.
Bonjour,
Content que cela vous ait servi.
En fait, vous avez raison, pour les CTN (et LDR) la connexion du capteur à Vcc est la plus utilisée car dans ce cas la tension augmente avec la température. Pratique pour un détection de seuil par exemple. Pour ma part, je préfère la connexion à la masse pour des raisons de sécurité : seules les broches GND et V sont accessibles. Lors d’un câblage, une mauvaise manipulation de la broche Vcc peut-être néfaste pour le microcontrôleur !
Bonsoir,
je cherche le source (Ultrasonic.cpp) modifié par eurosmart ayant la fonction get_duration() afin de le rajouter à la version officielle de Nanpy.
Cette version est-elle compatible avec le capteur US de grove ?
merci
Bonjour,
Le capteur Ultrasonic Ranger Grove n’est pas câblé de la même manière. Un seul câble (jaune) sert de déclenchement (TRIG) et d’écho (ECHO) ! Il n’est donc pas compatible avec la librairie Educaduino Lab d’Eurosmart.