Catégories
Liens
Ce projet a pour but une régulation sommaire des températures de deux étuves diy pour des projets de fermentation. Deux capteurs DHT22 mesurent la température dans leurs enceintes respectives. L'arduino compare ces températures aux valeurs de consigne. Pour chaque enceinte, si la température mesurée est inférieure à celle de la consigne, alors l'arduino active les relais électriques sur lesquels sont branchées des lampes à incandescence sources de chaleur douce. Lorsque la température mesurée correspond à celle de la consigne, l'arduino ouvre le relai et la lampe s'éteint.
// 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");
}