Capteurs de température et applications

Le capteur de température LM335Z

DéfinitionCaractéristiques

Ce capteur de température permet de mesurer la température en prélevant le signal sur sa borne centrale dont la tension varie proportionnellement à la température absolue.

Le coefficient de proportionnalité est égal à \(10\ mV \cdot K^{-1}\) (voir datasheet [pdf]). Donc la tension et la température sont liées par la relation \(\mathbf {V = 0{,} 010 \times T_K}\), où V est la tension en volts et TK la température en kelvins.

Capteur de température LM 335Z

MéthodeConnexion à l'Arduino

Ci-contre le montage avec l'alimentation de la plaque d'essais à l'aide de la platine Arduino et le capteur de température.

Le potentiel permettant de calculer la température est prélevé entre la borne centrale du composant et la résistance \(R=2{,}2\ k \Omega\). Ici, on lit la tension sur l'entrée analogique A0.

Capteur orienté face plate vers l'opérateur, la borne de droite est reliée à la masse (GND). La borne de gauche peut être laissée libre ou reliée au curseur d'un potentiomètre pour calibrer le capteur.

Câblage du capteur de température LM335Z sur une carte ArduinoInformations[1]

MéthodeObtenir la valeur de la température

La tension permettant de calculer la température est lue sur l'entrée analogique de l'Arduino A0.

Si une variable tension a été déclarée dans le programme, l'instruction tension=analogRead(A0)*5/1023.0; permet de la mesurer en convertissant la valeur comprise entre 0 et 1023 donnée par le convertisseur analogique/numérique de la carte Arduino.

Pour obtenir la valeur de la tension et en déduire la température, on utilise donc les instructions ci-dessous :

1
tension = analogRead(A0) * 5 / 1023.0;//Lecture de la tension sur l'entrée analogique A0
2
  tempK = tension * 100.0;//Conversion de la tension en température exprimée en kelvin
3
  tempC = tempK - 273.15;//Conversion des kelvins en celsius

Les variables tension, tempK et tempC doivent être déclarées en début de programme en tant que décimaux (type float).

FondamentalCode permettant d'afficher la température sur le moniteur série

Le programme ci-dessous permet l'affichage de la température sur le moniteur série.

1
float tension; //Variable permettant de stocker la valeur de la tension
2
float tempC; //Variable température en °C
3
float tempK; //Variable température en kelvins
4
5
void setup() {
6
  // put your setup code here, to run once:
7
  Serial.begin(9600); //Initialisation de la communication avec le moniteur série
8
}
9
10
void loop() {
11
  // put your main code here, to run repeatedly:
12
  tension = analogRead(A0) * 5.0 / 1023.0;//Lecture de la tension sur l'entrée analogique A0
13
  tempK = tension * 100.0;//Conversion de la tension en température exprimée en kelvin
14
  tempC = tension * 100 - 273.15;//Conversion des kelvins en celsius
15
  Serial.print(tempK);//Affiche la valeur de la température en kelvins
16
  Serial.println(" K");
17
  Serial.print(tempC);//Affiche la valeur de la température en degrés Celsius
18
  Serial.write(223);//Affiche le symbole degrés
19
  Serial.println("C");
20
  delay(3000);//On fait une mesure toutes les 3 secondes
21
}

ComplémentAffichage de la température sur un écran LCD

Modifiez le programme précédent pour utiliser un afficheur LCD en ajoutant les lignes de code nécessaires et en supprimant celles qui sont superflues.

Se reporter ci-besoin à la partie "Les méthodes d'affichage avec les cartes Arduino" pour connecter et commander l'écran LCD avec module I2C.

RemarqueProposition de questionnement élève

On peut proposer aux élèves de répondre aux questions suivantes :

  1. On fournit le schéma Fritzing et ils doivent le réaliser sur la plaque. On impose le respect du code couleur suivant : fils noirs reliés à la masse et fils rouge reliés aux \(+5\ V\).

  2. Après avoir rappelé les caractéristiques du capteur, notamment la relation \(\mathbf {V = 0{,} 010 \times T_K}\), où V est la tension en volts et TK la température en kelvins : Quelle relation existe entre la température et la tension mesurée ?

  3. Quel calcul permet de convertir la température en degrés Celsius ?

  4. Compléter le code ci-dessous en reprenant les noms des variables déjà déclarées.

1
float tension; //Variable permettant de stocker la valeur de la tension
2
float tempC; //Variable température en °C
3
float tempK; //Variable température en kelvins
4
5
void setup() {
6
  // put your setup code here, to run once:
7
  Serial.begin(9600); //Initialisation de la communication avec le moniteur série
8
}
9
10
void loop() {
11
  // put your main code here, to run repeatedly:
12
  tension = analogRead(A0) * 5.0 / 1023.0;//Lecture de la tension sur l'entrée analogique A0
13
  tempK = //RELATION À COMPLÉTER //Conversion de la tension en température exprimée en kelvin
14
  tempC = //RELATION À COMPLÉTER //Conversion des kelvins en celsius
15
  Serial.print(tempK);//Affiche la valeur de la température en kelvins
16
  Serial.println(" K");
17
  Serial.print(tempC);//Affiche la valeur de la température en degrés Celsius
18
  Serial.write(223);//Affiche le symbole degrés
19
  Serial.println("C");
20
  delay(3000);//On fait une mesure toutes les 3 secondes
21
}

ComplémentCalibrer le capteur de température à l'aide d'un potentiomètre

Il est possible d'ajouter un potentiomètre sur la borne libre du capteur afin de le calibrer avec un thermomètre de référence comme indiqué dans le montage ci-dessous.

Ajout d'un potentiomètre de calibrage au capteur LM335ZInformations[2]

Thermistance CTN

DéfinitionCaractéristique des thermistances CTN

La thermistance utilisée ici est une CTN 470 : la résistance R25 à \(25\ °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\ 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\ 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 \(+5\ V\).

On mesure la tension aux bornes de la thermistance sur l'entrée analogique A0.

\(U_{CTN}=\dfrac{5}{1+\dfrac{R}{R_{CTN}}}\).

On en déduit \(R_{CTN}=\dfrac{R}{\dfrac{5}{U_{CTN}}-1}\).

Et enfin la température en kelvins : \(T=\dfrac{B}{\ln{\left(\dfrac{R_{CTN}}{A} \right)}}\)

Montage d'une thermistance en pont diviseur de tensionInformations[3]

Le programme ci-dessous permet de récupérer la valeur de la température et de l'afficher sur le moniteur série.

1
float tension, RCTN, TK, TC;//Variables tension, résistance CTN, températures (K et °C)
2
const float R = 547.0;//Résistance connue du pont diviseur
3
const float B = 3450.0;//Caractéristique de la CTN
4
const float A = 0.004407;//Coeff dans RCTN=A.exp(B/T)
5
6
void setup() {
7
  // put your setup code here, to run once:
8
  Serial.begin(9600);//initialisation Moniteur série
9
}
10
11
void loop() {
12
  // put your main code here, to run repeatedly:
13
  tension = analogRead(A0) * 5 / 1023.0;//Lecture de la tension aux bornes de la CTN
14
  RCTN = R / (5.0 / tension - 1.0);//Calcul de RCNT
15
  TK = B / (log(RCTN / A)); //Calcul de la température en K
16
  TC = TK - 273.0;//Calcul de la température en °C
17
  //Affichage des résultats (on peut se dispenser de certaines lignes)
18
  Serial.print("tension ");
19
  Serial.println(tension);
20
  Serial.print("R_CTN ");
21
  Serial.println(RCTN);
22
  Serial.print("Température ");
23
  Serial.print(TC);
24
  Serial.println("°C");
25
  delay(3000);
26
  //Fin de l'affichage
27
}

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.

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[4]

Simuler une alarme de température

On peut proposer cette activité avec le capteur LM335Z ou la thermistance. On peut simuler l'alarme au choix avec deux DEL ou un buzzer piézoélectrique.

S'il s'agit de modéliser une alarme, on peut préférer le capteur LM335Z pour sa facilité de mise en œuvre et sa relation tension/température plus simple que la thermistance

D'un point de vue programmation, c'est l'occasion d'introduire les conditions : if, else, else if...

Deux montages d'alarmes de températuresInformations[5]

Le code ci-dessous permet de faire fonctionner l'alarme comportant des DEL : la DEL verte s'allume quand la température est en dessous du seuil défini et la DEL rouge s'allume quand la température dépasse ce même seuil.

Vous pouvez y repérer la syntaxe des structures conditionnelles.

1
//Déclaration des variables
2
float tension;
3
float tempC;
4
float tempK;
5
float seuilTemp;
6
void setup() {
7
  // put your setup code here, to run once:
8
  seuilTemp = 20.0; //On fixe une température limite
9
  pinMode(3, OUTPUT);//On définit les deux bornes numériques en SORTIE
10
  pinMode(11, OUTPUT);
11
  digitalWrite(11, 1); //On allume la DEL verte
12
  digitalWrite(3, 0); //On éteind la DEL rouge
13
}
14
15
void loop() {
16
  // put your main code here, to run repeatedly:
17
  tension = analogRead(A0) * 5.0 / 1023.0;//Lecture de la tension sur l'entrée analogique A0
18
  tempK = tension * 100.0;//Conversion de la tension en température exprimée en kelvin
19
  tempC = tension * 100 - 273.15;//Conversion des kelvins en celsius
20
  if (tempC > seuilTemp) {
21
    digitalWrite(11, 0); //On éteind la DEL verte
22
    digitalWrite(3, 1); //On allume la DEL rouge
23
  }
24
  else if (tempC < seuilTemp) {
25
    digitalWrite(11, 1); //On allume la DEL verte
26
    digitalWrite(3, 0); //On éteind la DEL rouge
27
  }
28
}

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 ?