#include <DHT.h>
#include <DHT_U.h>
#include <Wire.h>
#define DHTUP 10 // PIN capteur haut
#define DHTBOT 11 // PIN capteur bas
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht_up(DHTUP, DHTTYPE);
DHT dht_bot(DHTBOT, DHTTYPE);
//Déclaration des timer
//unsigned long Ventil_B = millis();
//unsigned long Ventil_Hygro = millis();
// Déclaration des PINs
const int Door_Switch = 2;
const int Internal_Light = 3;
const int Compressor = 4;
const int Main_Ventil = 5;
const int Ventil_HRDown = 6;
const int Ventil_HRup = 7;
const int HRdown_Mod = 8;
const int HRup_Mod = 9;
const int Alarm_Buzzer = 10;
//Decalration des variabels
int Door_Alarm_Time = 120000; // Déclaration valeur de compteur alarme porte
bool HRDOwn=false; // Intilialisation status déshulmidificateur d'air
bool HRup=false; // Initialisation status humidification d'air
int Up_Delta = 2; // définition du seuil haut de déclenchement production de froid
int Down_Delta = 1; // définition du delta bas pour l'arrêt de la production de froid
int consigne = 12; // définition de la température de consigne
int Door_Status;
int Door_Status_Mem;
float Temp_H;
float Temp_B;
float Hygro_H;
float Hygro_B;
enum DoorState {opening, opened, closing, closed};
DoorState door = closed;
void setup() {
//Déclaration des types IO pins
pinMode(Door_Switch, INPUT_PULLUP);
pinMode(Internal_Light, OUTPUT);
pinMode(Compressor, OUTPUT);
pinMode(Main_Ventil, OUTPUT);
pinMode(Ventil_HRDown, OUTPUT);
pinMode(Ventil_HRup, OUTPUT);
pinMode(HRdown_Mod, OUTPUT);
pinMode(HRup_Mod, OUTPUT);
pinMode(DHTUP, INPUT);
pinMode(DHTBOT, INPUT);
pinMode(Alarm_Buzzer, OUTPUT);
Serial.begin(9600);
//démarrage timer anti cycle court
unsigned long SCC_Timer = millis();
//intitialisation capteur de mesure temp & hygro
dht_up.begin();
dht_bot.begin();
//init timer porte ouverte
// init timer hygro
// init timer brassage
}
void loop() {
// Lecture des états des capteurs et siwtchs
Door_Status = digitalRead(Door_Switch);
if (Door_Status == LOW) {
if (door == opening)
door = opened;
else if (door != opened)
door = opening;
} else {
if (door == closing)
door = closed;
else if (door != closed)
door = closing;
}
Serial.print("Button:");Serial.print(Door_Status);Serial.print(", State:");Serial.println(door);
//lecture des valeurs de températures et hygrométrie
Temp_H = dht_up.readTemperature();
Temp_B = dht_bot.readTemperature();
Hygro_H = dht_up.readHumidity();
Hygro_B = dht_bot.readHumidity();
// si Température basse > consigne + seuil haut ==> démarrer compresseur
//si temp haute - temp basse > delta temp admissible ==>
// démarrer brassage air
// démarrer timer brassage
// si temp aute - temp basse =< 0 ==> arrêt brassage air
// si hygro haute > hygro_basse + x%, démarrage brassage air
if (door == opening) Serial.println("Door opening");
if (door == closing) Serial.println("Door closing");
//si porte ouverte ==>
if ( Door_Status != Door_Status_Mem) {
Door_Opened();
unsigned long Door_Open_Timer = millis(); // timer porte ouverte
Door_Status_Mem = Door_Status;
if(Door_Open_Timer>Door_Alarm_Time) {
digitalWrite(Alarm_Buzzer, HIGH);
}
}
//Détection de la fermeture de la porte
if (Door_Status != Door_Status_Mem) {
Door_Closed();
}
// si hygro DHT haut > consigne + seuil
// démarrage timer deshygro
// démarrage module peltier
// démarrage ventilo peltier
// démarrage brassage air
// si hygro DHT haut < consigne - seuil
//arrêt module peltier
// arrêt ventilo peltier
// arrêt brassage air
// arrêt et initialisation timer deshygro
// si timer hygro == limite haute
// buzzer + alarme hygro haute
delay(200);
}
void Door_Opened() {
digitalWrite(Internal_Light, HIGH); // - allumage éclairage
if(Ventil_HRDown==HIGH) {// - si brassage air = high ==> arrêt brassage air
digitalWrite(Ventil_HRDown, LOW);
}
if(HRup==true) {// - si brassage air = high ==> arrêt brassage air
digitalWrite(Ventil_HRup, LOW);
digitalWrite(HRup_Mod, LOW);
}
// - si deshumdifiateur ON ==> arrêt ventilo hygrodown + peltier
// - si humdificateur ON ==> arrêt ventilo + module US
// - si porte ouverte plus de 1 min => buzzer + arrêt compresseur (démarrage timer anti cycle court)
}
void Door_Closed (){
digitalWrite(Internal_Light, LOW); // - allumage éclairage
digitalWrite(Main_Ventil, HIGH);
/*
Reste à décider s'il faut conserver les états précédents au moment de l'ouverture pour les réappliquer au moment de la fermeture de la porte
*/
}