Outils pour utilisateurs

Outils du site


arduino:mesurer_une_temperature_avec_une_thermistance

Mesurer une température avec une thermistance

La thermistance

La thermistance est un capteur résistif dont la résistance dépend de la température.

On distingue les thermistances à coefficient de température négatif (CTN) : la résistance diminue lorsque la température augmente, et celles à coefficient de température positif (CTP). Nous utiliserons une CTN.

Courbe d'étalonnage

Avant toute utilisation, il faut donc tracer la courbe d’étalonnage de la thermistance, c’est-à-dire la courbe montrant l’évolution de la valeur Rt de sa résistance en fonction de la température T, soit : Rt = f(T).

Nous utiliserons un pont diviseur de tension constitué d'une résistance de R = 1000 Ω et de la thermistance de résistance Rt.

Avec l'Arduino, nous mesurons sur l'entrée analogique A0, la tension Ut aux bornes de la thermistance.

On peut démontrer que Rt = (Ut/(5 - Ut)) x 1000

Le capteur de température est branché sur la broche numérique 7 de l'Arduino. (non représenté sur le schéma ci-dessus).

Le code suivant permet de mesurer la température à l'aide d'un capteur DS18B20 et la résistance Rt de la thermistance. Les mesures sont envoyées par la liaison série au tableur Regressi.

La courbe d'étalonnage Rt = f(T) se trace automatique dans le tableur Regressi.



Le code Arduino :

Cliquez pour afficher le code

Cliquez pour masquer le code

/**
 * Trace la courbe d'étalonnage d'une thermistance
 */
 
#include <OneWire.h>
#include <DallasTemperature.h>
 
/* Broche du bus 1-Wire */
 
#define ONE_WIRE_BUS 7  // Broche numérique 7, à modifier si nécessaire
 
/* Création de l'objet OneWire et sensors */
 
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
 
/* Adresses des capteurs de température */
 
DeviceAddress thermometre_1 = {0x28, 0x44, 0x62, 0x79, 0x97, 0x05, 0x03, 0x51}; // courbe bleue
 
/* résolution */
 
int resolution = 12;  // nombre de bits
/*
9 bits   0.5 °C     93.75 ms
10 bits  0.25 °C    187.5 ms
11 bits  0.125 °C   375 ms
12 bits  0.0625 °C  750 ms */
 
/* Ecran LCD */
 
#include <LiquidCrystal_I2C.h>   // inclure la bibliothèque I2C
LiquidCrystal_I2C lcd(0x27,16,2);   // adresse i2c , nombre de colonnes, nombre de lignes de l'écran
 
float mesure;   // initialisation de la variable mesure
float tension;  // initialisation de la variable tension
float resistance;   // initialisation de la variable résistance
 
 
/* Pour faire des mesures à intervalle régulier */
 
unsigned long tempsPrecedent = 0;
float intervalle = 1000;   // durée entre deux mesures en ms (à modifier si nécessaire)
 
void setup() {
 
  Serial.begin(115200);  // choix de la vitesse
 
  sensors.begin();
  sensors.setResolution(thermometre_1, resolution);
 
   /* Ecran LCD  */
 
  lcd.init();   // initialisation du LCD
  lcd.backlight();   // active le rétroéclairage 
}
 
void loop(){
  unsigned long tempsCourant = millis();  // cette variable contient le nombre de millisecondes depuis que le programme courant a démarré. 
 
  if (tempsCourant - tempsPrecedent >= intervalle) {
      tempsPrecedent = tempsCourant;
 
      /* Demande la température aux capteurs */
 
      sensors.requestTemperatures(); 
      float temperature_1 = sensors.getTempC(thermometre_1);  // obtenir la température 1 en degré
 
      mesure = analogRead(A0);   // lecture de la valeur brute du signal analogique sur la broche A0 (0 à 1023)
      tension = mesure * 5/1023;   // conversion de la valeur brute en tension (0 à 5V)
      resistance = (tension/(5.0-tension))*1000;  // Pour une résistance de 1000 ohms dans le pont diviseur de tension
 
      /* envoie les températures sur la liaison série  */
 
      Serial.print(temperature_1, 1);
      Serial.print(",");   // les données sont séparées par des virgules.
      Serial.print(resistance, 1);
      Serial.println();
 
      /* Affiche la température et la tension sur l'écran lcd */
 
      lcd.setCursor(0,0);   // mettre le curseur à la première colonne, première ligne
      lcd.print("T = ");  
      lcd.print(temperature_1, 1);
      lcd.print((char)223);   // symbole °
      lcd.print("C  "); 
 
      lcd.setCursor(0,1);   // mettre le curseur à la première colonne, deuxième ligne
      lcd.print("R = ");  
      lcd.print(resistance, 1);
      lcd.print(" "); // un espace
      lcd.print((char)244);   // symbole omega  
      lcd.print("     "); // des espaces    
  }
}



La courbe d'étalonnage obtenue :



Rappels : Acquisition des mesures avec Regressi

Il est possible d'acquérir les mesures directement dans Regressi avec une version récente (4.5.7).

  • Dans le menu Fichier → Nouveau → Arduino / micro:bit :




  • Avec le bouton Options, régler les paramètres de la liaison série pour que Regressi communique avec la carte Arduino.



  • Cliquer sur le bouton Acquisition pour obtenir les mesures. Le graphique s'affiche automatiquement.
  • Cliquer sur Stop pour arrêter l'acquisition.
  • Cliquer sur traitements pour envoyer les données dans Regressi.




arduino/mesurer_une_temperature_avec_une_thermistance.txt · Dernière modification: 17/09/2019 17:16 par Stéphane LAURENT