Catégories
Liens
Ceci est une ancienne révision du document !
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.
Arduino uno + alimentation
2 DHT22
4 boutons poussoirs
1 LCD 16×2
2 relais
3 prises électriques femelles
1 prise électrique mâle
Fils électriques
Bornes de connexion rapide
Divers circuits imprimés (plaque de cuivre et fraiseuse cnc)
Jumpers
Résistances
Boîte en bois (découpeuse laser, plaque 3mm A3)
Vis et boulons 2,5×8 mm et 3×8 mm
Fer à souder et étain
Colle à bois
// 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"); }