Tutoriel : thermomètre à thermocouple avec Arduino

Utilisation de capteurs et composants électroniques avec Arduino.
Une fiche de tutoriel pour chaque.

Tutoriel : thermomètre à thermocouple avec Arduino

Messagepar tiptop » Jeu 6 Nov 2014 19:23

Tutoriel réalisation d'un thermomètre à thermocouple avec Arduino.

Image

Composants utilisés

Principe de fonctionnement
Un thermocouple est simplement formé de 2 fils métalliques différents soudés ensemble. Le type K comporte une jonction entre chromel (alliage nickel + chrome) et alumel (alliage nickel + aluminium + silicium).
Une faible différence de potentiel électrique apparaît à la jonction sous l'effet de la température.
Le signal est faible, typiquement 50 microV par degré, la réponse est non linéaire, et il faut une compensation de soudure froide (on mesure un écart de température entre deux jonctions, pas une température absolue).

Malgré ces inconvénients, le thermocouple est très intéressant car il est simple d'emploi, robuste à la chaleur, il couvre une très grande plage de mesure de température avec une forte précision.

On amplifie puis on convertit la mesure analogique en signal numérique, une liaison SPI permet de transmettre facilement à un micro contrôleur (Arduino) le résultat.
Le module d'interface de conversion utilisé ici est un MAX6675, il assure l'amplification et la conversion sur 12 bits.

Caractéristiques du kit thermocouple + MAX6675
  • Mesure de température jusqu' à 1024 °C.
  • Résolution 0.25 °C.
  • Compensation de jonction de température froide .
  • Alimentation 3.0 - 5V DC.
  • Note : le thermocouple K se distingue facilement des autres types, il est attiré par un fort aimant.

Image.Image.Image
Le module Max6675, amplification, conversion numérique et mise en forme SPI. ___ Codage couleur du thermocouple. ___ Le capteur de température.

Branchements
Le thermocouple comporte deux fils avec codage couleur, à brancher sur le bornier à vis, rouge sur + (chromel) et bleu sur - (alumel).
Image.Image

Le module se branche via son port série SPI avec les 5 pins GND, VCC, SCK, CS, SO.
Module --> Arduino
  • GND --> Gnd masse Arduino
  • Vcc --> Vcc arduino +5V
  • DO Data Output --> pin 4
  • CS Chip Select --> pin 5
  • CLK clock --> pin 6

Image.Image.
Le kit complet de mesure de température. câble 1m résistant à la chaleur.

le SPI pour communiquer entre le module max6675 et le microcontrôleur.

Librairie MAX6675 à installer
Télécharger la librairie pour Arduino MAX6675 ici
https://github.com/ryanjmclaughlin/MAX6675-Library

décompresser le dossier Zip, le renommer MAX6675 et le placer dans le répertoire arduino/librairies de son ordinateur, puis relancer l'IDE.

On mettra au début de son code Arduino :
Code: Tout sélectionner
#include <MAX6675.h>


Programmation

Cet exemple de programme pour Arduino affiche la température en °C (et °F) chaque seconde dans le Serial monitor de l'ordinateur.
Ouvrir le serial monitor (réglé à 9600 bauds) pourvoir les mesures s'afficher sur son écran.
Code: Tout sélectionner
//********************************************************
// demo_thermocouple
//  Exemple d'utilisation de thermocouple type K
//  Avec MAX6675 pour amplifier et numériser
// tiptopboards.com  06 11 2014
//********************************************************
#include "max6675.h"  //La librairie du MAX6675

int thermoDO = 4;  // Data Out Port SPI sur 4-5-6
int thermoCS = 5;  //Chip Select
int thermoCLK = 6;  //Clock

// Déclarer les pins utilisées
MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
 
void setup() {
  Serial.begin(9600);  //Pour afficher à l'écran du PC
 
  Serial.println("Thermocouple et MAX6675");
  delay(500);   //Attendre l'initialisation du module MAX
}

void loop() {
  // Boucle de mesure de la température
 
   Serial.print("C = ");
   Serial.println(thermocouple.readCelsius());
   //Serial.print("F = ");   // Si on veut aussi des F
   //Serial.println(thermocouple.readFahrenheit());
 
   delay(1000);  //1 mesure par seconde
}


Image

Thermomètre à thermocouple
Pour réaliser un petit projet de thermomètre, on rajoute à l'Arduino un écran LCD d'affichage 2 lignes et 16 caractères.

On rajoute simplement 4 fils pour l'écran LCD.
Module écran I2C --> Arduino
  • GND --> masse GND Arduino
  • Vcc --> Vcc 5V Arduino
  • SDA --> pin A4
  • SCL --> pin A5

Image

Le thermomètre fonctionne avec le code suivant:

Code: Tout sélectionner
//*******************************************************
// demo_thermo_1602
// Exemple de démo de l'écran 1602 2 lignes 16 caractères
// branchéen I2C
// Réalisation d'un thermomètre à thermocouple K
// Avec module  MAX6675 pour amplifier et numériser
// tiptopboards.com  06 11 2014
//
//********************************************************
#include <Wire.h>   // Librairie dans déjà l'IDE  Arduino
#include <LiquidCrystal_I2C.h>  //librairie à installer LCD
#include "max6675.h"            //La librairie du MAX6675

// Thermocouple à brancher en SPI
int thermoDO = 4;  // Data Out Port SPI sur 4-5-6
int thermoCS = 5;  //Chip Select
int thermoCLK = 6;  //Clock

// Déclarer les pins utilisées
MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

// Ecran à brancher en I2C
LiquidCrystal_I2C lcd(0x27,16,2);  // Addresse 0x27, 16 charactères, 2 lignes

void setup()
{
 lcd.init();         // initialise le LCD
 lcd.backlight();    //Eclairer l'écran
 lcd.setCursor(0,0);  //Début première ligne
 lcd.print("Temperature :");  //Message texte
 Serial.begin(9600);
 Serial.print("Thermometre");  //Sur le Serial monitor
 delay(500);
}

void loop()  // boucle d'affichage, mesure de thermocouple
{

   float temp=thermocouple.readCelsius();  // mesure de t
   Serial.print("C = ");
   Serial.println(temp);  //Sortie sur le serial monitor
 
  lcd.setCursor(3,1);  //Seconde ligne LCD
  lcd.print(temp);    //Affiche la température
  lcd.setCursor(9,1);
  lcd.print("deg");  //Affiche les unités
  delay(1000);   // 1 Hz
}


Image

Références
Datasheet du Max6675 "Cold-junction-compensated K-thermocouple to digital converter (°C to 1024 °C)"
http://datasheets.maximintegrated.com/en/ds/MAX6675.pdf

Télécharger la librairie MAX6675
https://github.com/ryanjmclaughlin/MAX6675-Library

Tutoriel en anglais "What is a thermocouple ?"
http://www.ladyada.net/wiki/tutorials/l ... ouple.html

MAX6675Library sur le plyground Arduino
http://playground.arduino.cc/Main/MAX6675Library
tiptopboards - admin
Avatar de l’utilisateur
tiptop
Administrateur du site
 
Messages: 88
Inscription: Mar 13 Aoû 2013 20:38
Localisation: 38

Re: Tutoriel : thermomètre à thermocouple avec Arduino

Messagepar grostoto » Mar 19 Mai 2015 11:27

bonjour

j'ai effectué le montage suivant, mais le code ci dessus ne fonctionne pas avec la librairie cité.

j'ai donc modifié un peu le code exemple contenu dans la librairie max 6675:

cela semble fonctionner, sauf que la t° affiché est toujours de 0,0° ????
une idée?

Code: Tout sélectionner
/*
  Single_Temp.pde - Example using the MAX6675 Library.
  Created by Ryan McLaughlin <ryanjmclaughlin@gmail.com>

  This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
  http://creativecommons.org/licenses/by-sa/3.0/
*/

#include <MAX6675.h>

int LED1 = 9;             // Status LED Pin
int CS = 5;             // CS pin on MAX6675
int SO = 4;              // SO pin of MAX6675
int CLK = 6;             // SCK pin of MAX6675
int units = 1;            // Units to readout temp (0 = raw, 1 = ˚C, 2 = ˚F)
float temperature = 0.0;  // Temperature output variable


// Initialize the MAX6675 Library for our chip
MAX6675 temp(CS,SO,SCK,units);


// Setup Serial output and LED Pin 
// MAX6675 Library already sets pin modes for MAX6675 chip!
void setup() {
  Serial.begin(9600);
  pinMode(LED1, OUTPUT);
}

void loop() {
   // Read the temp from the MAX6675
   temperature = temp.read_temp();

   if(temperature < 0) {                   
      // If there is an error with the TC, temperature will be < 0
      Serial.print("Thermocouple Error on CS");
      Serial.println( temperature );
      digitalWrite(LED1, HIGH);
   } else {
      Serial.print("Current Temperature: ");
      Serial.println( temperature );
      digitalWrite(LED1, LOW);
   }
 
   // Wait one second before reading again
   delay(1000);   
}
grostoto
 
Messages: 5
Inscription: Lun 18 Mai 2015 22:31

Re: Tutoriel : thermomètre à thermocouple avec Arduino

Messagepar tiptop » Mar 19 Mai 2015 12:01

Qu'est ce qui ne fonctionne pas dans le code ?
tiptopboards - admin
Avatar de l’utilisateur
tiptop
Administrateur du site
 
Messages: 88
Inscription: Mar 13 Aoû 2013 20:38
Localisation: 38

Re: Tutoriel : thermomètre à thermocouple avec Arduino

Messagepar grostoto » Mar 19 Mai 2015 12:14

bonjour

voici l'erreur que j'ai (je suppose que c'est la librairie qui a dû évoluer).

en chargeant le code exemple fourni avec la librairie, cela fonctionne (j'ai juste midifié les pin, pour garder le même cablage que votre montage)
mais la t° reste à zero...
un moyen de controler la sonde K ?

Code: Tout sélectionner
sketch_may19d:16: error: no matching function for call to 'MAX6675::MAX6675(int&, int&, int&)'
sketch_may19d.ino:16:51: note: candidates are:
In file included from sketch_may19d.ino:1:0:
C:\Documents and Settings\Administrateur\Mes documents\Arduino\libraries\max6675/MAX6675.h:20:5: note: MAX6675::MAX6675(uint8_t, uint8_t, uint8_t, uint8_t)
     MAX6675(uint8_t CS_pin, uint8_t SO_pin, uint8_t SCK_pin, uint8_t units);
     ^
C:\Documents and Settings\Administrateur\Mes documents\Arduino\libraries\max6675/MAX6675.h:20:5: note:   candidate expects 4 arguments, 3 provided
C:\Documents and Settings\Administrateur\Mes documents\Arduino\libraries\max6675/MAX6675.h:17:7: note: MAX6675::MAX6675(const MAX6675&)
 class MAX6675
       ^
C:\Documents and Settings\Administrateur\Mes documents\Arduino\libraries\max6675/MAX6675.h:17:7: note:   candidate expects 1 argument, 3 provided
sketch_may19d.ino: In function 'void loop()':
sketch_may19d:29: error: 'class MAX6675' has no member named 'readCelsius'
no matching function for call to 'MAX6675::MAX6675(int&, int&, int&)'
grostoto
 
Messages: 5
Inscription: Lun 18 Mai 2015 22:31


Retourner vers Capteurs et composants

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 5 invités