// Régulateur de deux températures
#include <EEPROM.h> // Pour stocker les consignes et les retrouver
// en cas de défaut d'alimentation
// Déclaration des capteurs
// Boutons poussoirs
const char pin_p1 = A0 ;
const char pin_m1 = A1 ;
const char pin_p1h = A2;
const char pin_m1h = A3;
// Capteur DHT22 température/humidité
#include <DHT.h>
const int dhtpin1 = 11 ; // what pin we're connected to
const char dhttype = DHT22 ; // DHT 22 (AM2302)
DHT dht1(dhtpin1, dhttype, dhtpin1); // Premier capteur de température
const int dhtpin2 = 12 ; // what pin we're connected to
DHT dht2(dhtpin2, dhttype, dhtpin2); // Second capteur de température
// Déclaration des actionneurs
// Déclaration LCD
#include <LiquidCrystal.h>
const int rs = 7 ;
const int enable = 6 ;
const int d4 = 5 ;
const int d5 = 4 ;
const int d6 = 3 ;
const int d7 = 2 ;
LiquidCrystal lcd(rs, enable, d4, d5, d6, d7) ;
// Déclaration des pin de relais
const int chauffe = 8; // Relai 1
const int vapeur = 9; // Relai 2
// Déclaration diode de chauffe
const int diode = 13 ;
// Déclaration des variables et des constantes
unsigned long previousMillis = 0; // Pour compter le temps
long intervalle = 2000; // ms, intervalle de mesure du capteur
int tc;// = EEPROM.read(0); // température de consigne. Maximum pour le pain : 43°C
int hc;// = EEPROM.read(1); // humidité de consigne. Maximum pour le pain : 95%
float t = 20; // T1 instantanée
int h = 20; // T2 instantanée
int delai = 200; // (ms) délai pour les boutons poussoir
int p1 = 0; // +1°C
int m1 = 0; // -1°C
int p1h = 0; // +1°C T2
int m1h = 0; // -1°C T2
void setup() { // Déclarer les broches
// pinMode(dhtpin1, INPUT);
// pinMode(dhtpin2, INPUT);
dht1.begin();
dht2.begin();
// Boutons poussoirs pour le réglage de la consigne de température
pinMode(pin_m1, INPUT); // - 1 °C T1
pinMode(pin_p1, INPUT); // + 1 °C T1
// Boutons poussoirs pour le réglage de la consigne d'humidité
pinMode(pin_m1h, INPUT); // -1°C T2
pinMode(pin_p1h, INPUT); // +1°C T2
// Écran LCD
lcd.begin(16, 2); // taille de l'écran : (16, 2)
lcd.clear();
// Diode de chauffe
pinMode(diode, OUTPUT);
// Relais
pinMode(chauffe, OUTPUT);
pinMode(vapeur, OUTPUT);
tc=EEPROM.read(0);
hc=EEPROM.read(1);
}
void loop() {
// Réglage de la température de consigne 1
p1 = digitalRead(pin_p1);
m1 = digitalRead(pin_m1);
if (p1==HIGH) {
tc +=1;
delay(delai);
}
if (m1==HIGH) {
tc -=1;
delay(delai);
}
// Réglage de la température de consigne 2
p1h = digitalRead(pin_p1h);
m1h = digitalRead(pin_m1h);
if (p1h==HIGH) {
hc +=1;
delay(delai);
}
if (m1h==HIGH) {
hc -=1;
delay(delai);
}
// Stockage des consignes en EEPROM
if (tc!=EEPROM.read(0)) {
EEPROM.write(0,tc);
}
if (hc!=EEPROM.read(1)) {
EEPROM.write(1,hc);
}
// Mesure de température et d'humidité,
// toutes les deux secondes
unsigned long currentMillis = millis();
if (currentMillis - previousMillis > intervalle) {
previousMillis = currentMillis;
// Mesure du capteur
t = dht1.readTemperature();
h = dht2.readTemperature();
Serial.println(t);
Serial.println(h);
/*
// en cas de pb de lecture du capteur
while (isnan(h) || isnan(t)) {
delay(2000);
t = dht1.readTemperature();
h = dht2.readTemperature();
Serial.println(t);
Serial.println(h);
}
*/
}
// Chauffe et diode :
if (t<tc) {
// fermer le relais pour chauffer
digitalWrite(chauffe, HIGH);
}
else {
// ouvrir le relai pour arreter la chauffe
digitalWrite(chauffe, LOW);
}
if (h<hc) {
digitalWrite(vapeur, HIGH);
}
else {
digitalWrite(vapeur, LOW);
}
// Indiquer si les relais travaillent
// en allumant la diode
if (t<tc || h<hc) {
// allumer la diode
digitalWrite(diode, HIGH);
}
else {
// éteindre la diode
digitalWrite(diode, LOW);
}
// Affichage LCD
lcd.setCursor(0,1);
lcd.print(">");
lcd.print(tc);
lcd.print("*C >");
lcd.print(hc);
lcd.print("*C");
lcd.setCursor(0,0);
lcd.print("T=");
lcd.print(int(t*10)/10);
lcd.print("*C");
lcd.print(" T2=");
lcd.print(h);
lcd.print("*C");
}