/**********************************************************************************
********** MESURE ET CONTRÔLE D'UNE TEMPÉRATURES **********
_ Montage permettant le contrôle d'une thermistances.
_ Affichage sur module LCD 1602A et calcul avec carte ARDUINO UNO.
_ Mon choix est la Betatherm 10K3A1 (10KΩ à 25°C), mais dans le principe,
toute autre thermistance convient en modifiant les valeurs A, B, C
ainsi que la valeur de la termistance à 25 °C et sa résistance série.
_ Ce programme indique quelle voie de mesure est sélectionnée.
_ La thermistance est câblée côté VCC (5V) et la résistance 10 KΩ de balance, côté masse (GND).
schéma câblage : 5v -------wwwRThwww----•InA0•----wwwR10KΩwww------ masse GND
Créé le 2 septembre 2020 _ Par J.P.
à partir d'un exemple publié par plaisirarduino.fr
Modifié le 6 septembre 2020 _ Par J.P.
https://www.tinkercad.com/things/k3hEJ8GA57O-smooth-blad-gogo/editel?tenant=circuits
https://www.tinkercad.com/things/k3hEJ8GA57O-mesure-temperature-avec-ctn-10kw/editel
_ Dans cette simulation, il faut manuellement modifier la valeur R Th avec les exemples donnés,
mais dans un câblage réel, avec une thermistance active, l'affichage sera variable naturellement.
************************************************************************************/
#include <LiquidCrystal.h>
//#include <math.h>
//float Rtherm = 10000; // _ Thermistor nominal resistance _ Résistance nominale de la thermistance à 25°C.
const int rs=2,en=3,d4=4, d5=5, d6=6, d7=7;
LiquidCrystal lcd(rs,en,d4,d5,d6,d7);
int val = A0;
int TempRes = 0;
int Resis = 0;
#define ResistTh 0
#define ThermistorPIN A0 // _ Analog Pin A0 _ Broche analogique 0.
byte degrees[8] = {
B01100,
B10010,
B10010,
B01100,
B00000,
B00000,
B00000,
B00000
};
float Rserie = 10000; // _ Balance/serie resistor value, set this to the measured resistance of your Th resistor.
// _ Équilibre / valeur de la résistance série, réglez-la sur la résistance mesurée Th à 25°C.
//float Rtherm = 10000; // _ Thermistor nominal resistance _ Résistance nominale de la thermistance à 25°C.
float Thermistor(int RawADC)
{
float TempRes = (analogRead(A0));
Resis = (5/(TempRes*5/1023/10000))-10000;
long Resistance;
float Temp; // Dual-Purpose variable to save space. _ Variable à double usage pour économiser de l'espace.
Resistance=((1023 * Rserie / RawADC) - Rserie);
Temp = log(Resistance); // _ Saving the Log(resistance) so not to calculate it 4 times later.
// _ Sauvegarde du Log (résistance) pour ne pas le calculer 4 fois plus tard.
Temp = 1 / (0.0011291580036 + (0.0002341227775 * Temp) + (0.0000000876827 * Temp * Temp * Temp));
// _ Calcul Temp avec équation Stenhart-hart et coefficients A, B, C du fabricant Betatherm 10K3A1.
// _ Température en Kelvin = 1 / {A + B [ln (R)] + C [ln (R)] 3}
Temp = Temp - 273.15; // _ Convert Kelvin to Celsius _ Convertir Kelvin en Celsius.
return Temp; // _ Return the Temperature _ Renvoyer la température.
}
void setup()
{
Serial.begin(9600);
lcd.begin(16,2);
}
void loop()
{
lcd.createChar(0, degrees); // _ Variable du caractère "°"
float temp;
temp=Thermistor(analogRead(ThermistorPIN)); // _ Read ADC and convert it to Celsius _ lire ADC et le convertir en Celsius.
Serial.print("Celsius: "); // _ Type d'échelle
Serial.print(temp,1); // _ Display Celsius 1 décimales _ Affichage en Celsius 1 décimales.
Serial.println(" degre C"); // _ Unité
Serial.println(Resis);
//Serial.print (char(B11011111)); // _ Affichage Moniteur du caractère degré depuis code binaire.
//Serial.write (0xDF); // _ Affichage Moniteur du caractère degré depuis code héxadécimal.
//Serial.write (223); // _ Affichage Moniteur du caractère degré depuis code décimal.
delay(2000); // _ Delay a bit...
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temp. sonde :");
lcd.print(" A0");
lcd.setCursor(0,1);
lcd.print("Celsius: ");
lcd.print(temp,1);
lcd.print("");
//lcd.print(" ");
//lcd.write(byte(0)); // _ Affiche "°" Caractére
lcd.write (8); // _ Affichage LCD du caractère degré depuis code binaire.
//lcd.write (0xA7); // _ Affichage LCD du caractère degré depuis code héxadécimal.
//lcd.write (223); // _ Affichage LCD du caractère degré depuis code décimal.
lcd.print("C");
delay(5000);
lcd.clear();
// _ Test de la température - Si plus petit que 19 ou égal et plus grand que 19
if (temp< 19.0)
{
lcd.setCursor(0,0);
lcd.print(" R");
lcd.write (214);
lcd.print(" Th:");
lcd.print(Resis); // _ Pour les valeurs de °C négatives, R affiché est faux.
lcd.print(" ");
lcd.write (222);
lcd.setCursor(0,1);
lcd.print(" #Il fait froid");
}
else
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" R");
lcd.write (214);
lcd.print(" Th:");
lcd.print(Resis);
lcd.print(" ");
lcd.write (222);
lcd.setCursor(0,1);
lcd.print(" #Il fait chaud");
}
delay(2000);
}