Utiliser un Thermocouple avec Arduino

Introduction
Un thermocouple est une sorte de senseur de température.
Au contraire des senseurs de température à semiconducteur comme le TMP36, le thermocouple n'a aucune électronique à l'intérieur, il s'agit de deux fils de métal fondu ensemble en une petite boule.
Grâce a un effet physique présent entre les deux métal joint, il existe une toute petite tension entre les deux fils. Cette tension issue de l'effet Seebeck (wikipedia) est petite mais mesurable... cette tension s'accroit avec la température.
Les types de métal utilisés affectent la gamme de tension produite, le coût et la sensibilité. C'est pour ces raisons qu'il existe beaucoup de sorte de thermocouple. Le principal avantage de l'utilisation d'un thermocouple par rapport à un senseur à semiconducteur ou thermistance est la gamme de température mesurable nettement plus grande.
Par exemple, le TMP36 peut aller de -50 à 150°C, au dela le circuit intégré est endommagé. D'un autre côté, les thermocouples peuvent aller de -200°C à 1350°C (type K) et il en existe capable d'aller au delà de 2300°C!
Thermocouple type K disponible chez MCHobby

Les thermocouples sont souvent utilisé dans les systèmes HVAC (climatisation), chauffage, boilers, fours, etc. Il en existe de différents types mais ce tutoriel s'attarde sur le type K... qui est très commun et plus facile à interfacer.
Une difficulté inhérente à l'usage des thermocouple réside dans la très petite tension à mesurer, qui change d'environ 50 µV par °C (un µV est 1/1.000.000 Volts). Même s'il est possible ces tensions en utilisant une alimentation bien filtrée et un bon ampli-opérationnel, il y a d'autres complications tels qu'une réponse non-linéaire (ce n'est pas toujours 50µV/°C) et la compensation de la jonction froide (l'effet mesuré est différentiel et il doit y avoir une référence, tout comme la masse/GND est une référence de tension).
C'est pour cette raison que nous suggérons de toujours utiliser un circuit d’interfaçage qui effectuera les tâches compliquées à votre place et permettra d'intégrer ce senseur sans trop de difficulté dans vos projets.
Dans ce tutoriel nous allons utiliser une interface à base du circuit MAX6675 pour thermocouple-K (ou MAX31855), même pas besoin d'un convertisseur ADC (analogique vers digital), produisant un beau signal digital avec les données de température.

Information technique
Voici quelques informations relatives au thermocouple de type-K
  • Taille: gauge 24 (épaisseur 2.18mm), longueur 1 mètre (vous pouvez la raccourcir si nécessaire)
  • Prix: une dizaine d'euro - disponible chez MCHobby.
  • Gamme de température: -100°C à 500°C (au delà de cette température, la fibre de verre sera endommagée).
  • Tension de sortie: -6 à +20mV
  • Précision: +-2°C
  • Nécessite un amplificateur tel que le MAX31855
  • Interface: MAX6675 (interrompu), ou MAX31855 (numérique), ou AD595 (analogique)
Brancher un thermocouple
Comme mentionner avant, il sera très difficile de mesurer la tension aux bornes des fils, c'est la raison pour laquelle nous recommandons d'utiliser un circuit intégré d’interfaçage. L'un des meilleurs est le MAX6675 (et son nouveau remplaçant appelé MAX31855) qui ne sont malheureusement disponible d'en SOIC (composant à monter en surface). Même s'ils ne sont pas trop difficile à souder, nous disposons d'un breakout sur notre WebShop pour démarrer rapidement. La première chose à déterminer est quel fil doit être raccordé sur quelle borne. Si vous vous souvenez, un thermocouple est composé de par deux fils fondus ensembles et le circuit intégré lit la différence de tension entre les deux fils. Un des fils est le négatif (pour le type-K il est fait d'Alumel) et l'autre fil est positif (fait de Chromel).
Heureusement, les fils disposent d'un code de couleur et la plupart du temps vous trouverez l'Alumel en rouge et le Chromel en jaune.
Branchement d'un Amplificateur sur un thermocouple

Utiliser un Max31855 ou Max6675


Si vous envisagez utiliser un MAX6675/MAX31855 (amplificateur à sortie digital), il y a un quelques  tâches à réaliser.
MAX31855 (remplace le MAX6675) dispo chez MCHobby

Pour commencer GND et Vin doivent être connectés sur une source d'alimentation de 3 à 5V.
Les broches de données doivent ensuite être connectés sur les entrées/sorties digitales:


  • CLK (clock / horloge) est une entrée du MAX6675/MAX31855 (donc sortie du microcontrôleur) qui indique quand une nouveau bit de donnée est présent.
  • DO (data out / sortie de donnée) est une sortie du MAX6675/MAX31855 (donc une entrée du microcontrôleur) qui transporte chaque bit de donnée.
  • CS (chip select / sélection circuit) est une entrée du MAX6675/MAX31855 (sortie du microcontroleur) qui indique au circuit intégré qu'il est temps de lire le thermocouple et d'envoyer les données.
Nous définissons ces broches au début de notre sketch/croquis.
Par exemple:
  • DO est connecté sur la broche digital 3,
  • CS est connecté sur la broche digital 4,
  • et CLK est connecté sur la broche 5 
Utiliser avec Arduino
Si vous disposez du nouveau breakout MAX31855 alors téléchargez la librairie Arduino pour MAX31855 en allant sur la page github et en cliquant sur "Download". Décompressez le répertoire, renommez le MAX31855 et installez le dans le répertoire des librairies. Voir aussi notre tutoriel sur l'Installation d'un librairie Arduino
Redémarrez votre Arduino IDE et ouvrez ensuite le croquis/sketch Fichier->Exemples->MAX6675/Adafruit_MAX31855->serialthermocouple et télécharger/téléversez le sur votre Arduino.

/***************************************************
Voici un exemple pour l'amplificateur Thermocouple MAX31855 
d'AdaFruit avec un thermocouple Type K

Conçu spécificque pour fonctionner avec le senseur thermocouple 
disponible 
----> http://mchobby.be/PrestaShop/product.php?id_product=301 (MCHobby Belgique/France)
----> https://www.adafruit.com/products/269 (AdaFruit USA)

Ce programme utilise SPI pour communiquer, 3 broches sont nécessaire pour
l'interface.

Adafruit Investit du temps et des ressources pour fournir du code open source,
s'il vous plait, supportez AdaFruit et l'Open Hardware en achetant des 
produit Adafruit!

MCHobby investit du temps et des ressources pour traduire les documentations
d'AdaFruit en Français. C'est une tâche longue et fastidieuse.
Aidez nous à produire plus de documentation en achetant vos produits 
AdaFruit & autres chez MCHobby. 

Ecrit par Limor Fried/Ladyada pour Adafruit Industries.
BSD license, tout le texte ci-dessus doit être inclus dans toutes les redistribution

Traduit par Meurisse D. pour MCHobby.be - distributeur AdaFruit France et Belgique
Tout les référence MCHobby doivent également être redistribué (pour sa tâche de traduction).
Tutoriel Français complet disponible sur:
  http://mchobby.be/wiki/index.php?title=Senseur_Thermocouple
****************************************************/

#include "Adafruit_MAX31855.h"

int thermoDO = 3;
int thermoCS = 4;
int thermoCLK = 5;

Adafruit_MAX31855 thermocouple(thermoCLK, thermoCS, thermoDO);
  
void setup() {
  Serial.begin(9600);
  
  Serial.println("MAX31855 test");
  // Attendre que le circuit MAX se stabilise.
  delay(500);
}

void loop() {
    // Test de lecture basique, afficher simplement la température courante
   Serial.print("Internal Temp = ");
   Serial.println(thermocouple.readInternal());

   // Lecture en degrés Celcius
   double c = thermocouple.readCelsius();
   if (isnan(c)) {
     Serial.println("Quelque chose ne fonctionne pas avec le thermocouple!");
   } else {
     Serial.print("C = ");
     Serial.println(c);
   }
   
   // Décommenter les lignes suivante pour afficher la température
   // en degrés Farenheit (unité qui à cours au USA)
   //Serial.print("F = ");
   //Serial.println(thermocouple.readFarenheit());
 
   // Attendre une seconde
   delay(1000);
}


Ensuite, ouvrez le moniteur série pour afficher la température aussi bien en degrés Celsius qu'en degrés Fahrenheit

Comme vous pouvez le constater, la librairie est vraiment simple à utiliser. Il faut seulement indiquer à la librairie quel est sont les broches "clock", "chip select" et "data" et appelé ensuite readCelsius() ou readFahrenheit() pour obtenir la valeur sous forme d'un nombre décimal. 

Tutoriel
Notre tutoriel contient d'autres informations utiles.
Vous pouvez y accéder ici:
MCHobby investi du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible. SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.
 
Où acheter