#include #include //temp DS18B20_RT by rob tillaart #include //RTC DS3231 by andrew wickert #include //Adafruit #include /***************************************************************** Déclaration des Capteurs *****************************************************************/ //relay Lumiere const int RougeHaut = 2; const int RougeBas = 3; const int BleuHaut = 4; const int BleuBas = 5; const int TousBas = 6; const int TousHaut = 7; //relay Ventilation const int DehumPin = 8; const int VentilHaut = 9; const int VentilBas = 10; const int Extracteur = 11; //relay Arrosage const int Arro = 12; const int Evacuation = 13; //interupteur const int inter1 = 22; const int inter2 = 24; const int inter3 = 26; const int inter4 = 28; const int inter5 = 30; const int inter6 = 32; const int inter7 = 34; const int inter8 = 36; const int inter9 = 38; const int inter10 = 40; //Capteur Temp #define ONE_WIRE_TEMP 14 OneWire oneWireTemp(ONE_WIRE_TEMP); DS18B20 Temp(&oneWireTemp); //capteur Hum air #define DHTTYPE DHT22 #define DHTPIN 15 DHT dht(DHTPIN, DHTTYPE); //Capteur hum sol const int HumidSolHaut = 16; const int HumidSolBas = 17; //RTC DS3231 Clock; /***************************************************************** Déclaration des Variables globals *****************************************************************/ //Variable lumiere int newDay = 1; // Variable pour savoir si nouveau jour. int HA; //heure allumage en minute int HE; //heure extinction en minute (Ha +12Hou18H +/-15min) //Variable Extraction int tmpExtract, humExtract; int extract; //Variabe Arrosage const int delaySecArrosage = 20; const int delaySecEvacuation = 30; int HeuArrosage; /*********************************************************************** Setup **********************************************************************/ void setup() { Serial.begin(9600); /*********************************************************************** init des pins * *********************************************************************/ //PIN Lumiere pinMode(RougeHaut, OUTPUT); pinMode(RougeBas, OUTPUT); pinMode(BleuHaut, OUTPUT); pinMode(BleuBas, OUTPUT); pinMode(TousBas, OUTPUT); pinMode(TousHaut, OUTPUT); //Pin ventilation pinMode(DehumPin, OUTPUT); pinMode(VentilHaut, OUTPUT); pinMode(VentilBas, OUTPUT); pinMode(Extracteur, OUTPUT); //Pin Arrosage pinMode(Arro, OUTPUT); pinMode(Evacuation, OUTPUT); //interupteur pinMode(inter1, INPUT); pinMode(inter2, INPUT); pinMode(inter3, INPUT); pinMode(inter4, INPUT); pinMode(inter5, INPUT); pinMode(inter6, INPUT); pinMode(inter7, INPUT); pinMode(inter8, INPUT); pinMode(inter9, INPUT); pinMode(inter10, INPUT); /*********************************************************************** init des capteurs * *********************************************************************/ //Capteur Temp Temp.begin(); Temp.setResolution(12); //capteur Hum air dht.begin(); //Capteur hum sol pinMode(HumidSolBas, INPUT); pinMode(HumidSolHaut, INPUT); //RTC Wire.begin(); } void loop() { /*********************************************************************** Gestion des capteurs * **********************************************************************/ //Capteur Temp Temp.requestTemperatures(); while (!Temp.isConversionComplete()); float Temper = Temp.getTempC(); //capteur Hum air float hum = dht.readHumidity(); //Capteur hum sol //RTC bool h24, am; int heure = Clock.getHour(h24, am ); int minu = Clock.getMinute(); int HMin = heure * 60 + minu; // heure en minute /*********************************************************************** Gestion de la lumiere * ********************************************************************* */ if (newDay == 1) { newDay = 0; if (inter1) { Serial.println("Floraison"); HA = random (585, 615); HE = HA + 705 + random(30); } else { Serial.println("Croissance"); HA = random (285, 315); HE = HA + 1065 + random(30); } } if (HMin == 0) newDay = 1; if (inter1) { if (HMin >= HA & HMin < HE) { if (inter2) { digitalWrite(RougeHaut, LOW); digitalWrite(TousHaut, LOW); } if (inter3) { digitalWrite(RougeBas, LOW); digitalWrite(TousBas, LOW); } } } else { if (HMin >= HA & HMin < HE) { if (inter2) { digitalWrite(BleuHaut, LOW); digitalWrite(TousHaut, LOW); } if (inter3) { digitalWrite(BleuBas, LOW); digitalWrite(TousBas, LOW); } } } /*********************************************************************** Gestion de l'extraction * *********************************************************************/ if (Temper >= 26) { Serial.println("tmp >26 °C"); tmpExtract = 1 ; } if (Temper < 25) { Serial.println("tmp <25 °C"); tmpExtract = 0; } if (inter6 & hum > 70) { Serial.println("inter hum 70% et plus de 70% d'hum"); humExtract = 1; } else if ( inter6 == 0 & hum > 60) { Serial.println("inter hum 60 % et plus de 60 % d'hum"); humExtract = 1; } else humExtract = 0; if (minu == 0 | minu == 1 | tmpExtract | humExtract | inter4){ Serial.println("Extracteur ON"); digitalWrite(Extracteur, LOW); } else{ Serial.println("Extracteur OFF"); digitalWrite(Extracteur, HIGH); } /*********************************************************************** Gestion de la ventilation * *********************************************************************/ if(minu>=50 | inter4){ Serial.println("Ventilation ON"); digitalWrite(VentilHaut, LOW); digitalWrite(VentilBas, LOW); } else{ Serial.println("Ventilation OFF"); digitalWrite(VentilHaut, HIGH); digitalWrite(VentilBas, HIGH); } /*********************************************************************** Gestion de l'arrosage * *********************************************************************/ if ((HumidSolBas | HumidSolHaut) & inter9) { Serial.println("Arrosage"); digitalWrite(Arro, LOW); delay(delaySecArrosage * 1000 ); digitalWrite(Arro, LOW); HeuArrosage = HMin; } if (inter7) digitalWrite(Arro, LOW); else digitalWrite(Arro, HIGH); if (HeuArrosage + 10 == HMin) { Serial.println("Arrosage"); digitalWrite(Evacuation, LOW); delay(delaySecEvacuation * 1000 ); digitalWrite(Evacuation, HIGH); } if (inter8) digitalWrite(Evacuation, LOW); else digitalWrite(Evacuation, HIGH); delay(10000); }