| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373 |
- #include <OneWire.h>
- #include <DS18B20.h> //temp DS18B20_RT by rob tillaart
- #include <DS3231.h> //RTC DS3231 by andrew wickert
- #include <DHT.h> //Adafruit
- #include <Wire.h>
- /*****************************************************************
- Déclaration des Capteurs
- *****************************************************************/
- //relay Lumiere
- const int FloBas = 2;
- const int FullBas = 3;
- const int CroBas = 4;
- const int FloHaut = 5;
- const int FullHaut = 6;
- const int CroHaut = 7;
- int PuissanceMax = 210;
- //relay Ventilation
- const int DehumPin = 44;
- const int Extracteur = 46;
- const int VentilHaut = 48;
- const int VentilBas = 50;
- //relay Arrosage
- const int Arro1 = 10; // Bas
- const int Arro2 = 11; //Haut
- const int Evacuation = 12;
- const int Melange = 13;
- //Capteur niveau eau
- const int NiveauEauRecup = 14;
- const int NiveauEauAqua = 15;
- //Capteur Temp
- #define ONE_WIRE_TEMP 16
- OneWire oneWireTemp(ONE_WIRE_TEMP);
- DS18B20 Temp(&oneWireTemp);
- //capteur Hum air
- #define DHTTYPE DHT22
- #define DHTPIN 17
- DHT dht(DHTPIN, DHTTYPE);
- //Capteur hum sol
- const int HumidSolHaut = 18;
- const int HumidSolBas = 19;
- //interupteur
- const int interType = 22;
- const int interLum = 24;
- const int interONExt = 26;
- const int interONVentil = 28;
- const int interOFFExt = 30;
- const int interONAro = 32;
- const int interONVid = 34;
- const int interOFFAro = 36;
- const int inter9 = 38;
- const int inter10 = 40;
- //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 = 0, humExtract;
- int extract;
- //Variabe Arrosage
- int SolBas, SolHaut;
- int HeuArrosageMatin = 540;// 9H * 60min
- int HeuArrosagesoir = 1260;// 21H *60min
- int recup;
- int timerecup;
- /***********************************************************************
- Setup
- **********************************************************************/
- void setup() {
- Serial.begin(9600);
- /***********************************************************************
- init des pins
- * *********************************************************************/
- //Pin ventilation
- pinMode(DehumPin, OUTPUT);
- pinMode(Extracteur, OUTPUT);
- pinMode(VentilHaut, OUTPUT);
- pinMode(VentilBas, OUTPUT);
- digitalWrite(DehumPin, HIGH);
- digitalWrite(Extracteur, HIGH);
- digitalWrite(VentilHaut, HIGH);
- digitalWrite(VentilBas, HIGH);
- //Pin Arrosage
- pinMode(Arro1, OUTPUT);
- pinMode(Arro2, OUTPUT);
- pinMode(Melange, OUTPUT);
- pinMode(Evacuation, OUTPUT);
- digitalWrite(Arro1, HIGH);
- digitalWrite(Arro2, HIGH);
- digitalWrite(Melange, HIGH);
- digitalWrite(Evacuation, HIGH);
- //interupteur
- pinMode(interType, INPUT);
- pinMode(interLum, INPUT);
- pinMode(interONExt, INPUT);
- pinMode(interONVentil, INPUT);
- pinMode(interOFFExt, INPUT);
- pinMode(interONAro, INPUT);
- pinMode(interONVid, INPUT);
- pinMode(interOFFAro, INPUT);
- pinMode(inter9, INPUT);
- pinMode(inter10, INPUT);
- pinMode(NiveauEauRecup, INPUT);
- pinMode(NiveauEauAqua, 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
- SolBas = !digitalRead(HumidSolBas);
- SolHaut = !digitalRead(HumidSolHaut);
-
- /*Serial.println(digitalRead(interType));
- Serial.println(digitalRead(interLum));
- Serial.println(digitalRead(interONExt));
- Serial.println(digitalRead(interONVentil));
- Serial.println(digitalRead(interOFFExt));
- Serial.println(digitalRead(interONAro));
- Serial.println(digitalRead(interONVid));
- Serial.println(digitalRead(interOFFAro));
- Serial.println(digitalRead(inter9));
- Serial.println(digitalRead(inter10));*/
- //RTC
- bool h24, am;
- int heure = Clock.getHour(h24, am );
- int minu = Clock.getMinute();
- int sec = Clock.getSecond();
- int HMin = heure * 60 + minu; // heure en minute
- long Hsec = HMin * 60 + sec;
- Serial.print("H:");
- Serial.print(HMin / 60);
- Serial.print(":");
- Serial.print(HMin % 60);
- Serial.print(" T:");
- Serial.print(Temper);
- Serial.print(" Hum:");
- Serial.println(hum);
- /***********************************************************************
- Gestion de la lumiere
- * *********************************************************************
- */
- if (newDay == 1) {
- newDay = 0;
- if (digitalRead(interType)) { //SI intertype ==1 alors Flo
- Serial.println("Floraison");
- HA = random (585, 615);
- HE = HA + 705 + random(15);
- }
- else {
- Serial.println("Croissance");
- HA = random (285, 315);
- HE = HA + 1065 + random(15);
- }
- }
- if (HMin == 0) {
- newDay = 1;
- recup = 0;
- digitalWrite(Evacuation, HIGH);
- }
- if ((HMin >= HA & HMin < HE) & digitalRead(interLum)) {
- Serial.print("Allumage ");
- analogWrite(FullBas, PuissanceMax);
- analogWrite(FullHaut, PuissanceMax);
- if (1) { //SI flo
- Serial.println("Flo");
- analogWrite(FloHaut, PuissanceMax);
- analogWrite(FloBas, PuissanceMax);
- analogWrite(CroHaut, 0);
- analogWrite(CroBas, 0);
- }
- else {
- Serial.println("Cro");
- analogWrite(CroHaut, PuissanceMax);
- analogWrite(CroBas, PuissanceMax);
- analogWrite(FloBas, 0);
- analogWrite(FloHaut, 0);
- }
- }
- else {
- Serial.println("Extinxtion");
- analogWrite(FullBas, 0);
- analogWrite(FloBas, 0);
- analogWrite(CroBas, 0);
- analogWrite(FullHaut, 0);
- analogWrite(FloHaut, 0);
- analogWrite(CroHaut, 0);
- }
- /***********************************************************************
- 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 (digitalRead(interType) == 0 & hum > 75) {
- Serial.println("interType est en croi et plus de 75% d'hum");
- humExtract = 1;
- }
- else if ( digitalRead(interType) == 1 & hum > 60) {
- Serial.println("interType est en flo et plus de 60 % d'hum");
- humExtract = 1;
- }
- else if ( digitalRead(interType) == 0 & hum < 73) {
- humExtract = 0;
- }
- else if ( hum < 58) {
- humExtract = 0;
- }*/
- if ((minu == 0 | minu == 1 | tmpExtract | humExtract | digitalRead(interONExt)) & digitalRead(interOFFExt)) {
- Serial.println("Extracteur ON");
- digitalWrite(Extracteur, LOW);
- }
- else {
- Serial.println("Extracteur OFF");
- digitalWrite(Extracteur, HIGH);
- }
- /***********************************************************************
- Gestion de la ventilation
- * *********************************************************************/
- if (minu >= 55 | digitalRead(interONVentil) | tmpExtract | humExtract ) {
- 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 (digitalRead(inter9) ){//|| (HMin == HeuArrosageMatin || HMin == HeuArrosagesoir)) { //On arrose 1min en bas
- Serial.println("Arrosage1");
- digitalWrite(Arro1, LOW);
- }
- else {
- digitalWrite(Arro1, HIGH);
- }
- if (digitalRead(inter10) ){//|| (HMin == HeuArrosageMatin + 1 || HMin == HeuArrosagesoir + 1)) { // puis 1 min en haut
- Serial.println("Arrosage2");
- digitalWrite(Arro2, LOW);
- }
- else {
- digitalWrite(Arro2, HIGH);
- }
- //Melange // On mélange 20 sec toute les heures
- if (minu == 30 & sec <= 20) {
- Serial.println("Melange");
- digitalWrite(Melange, LOW);
- }
- else {
- digitalWrite(Melange, HIGH);
- }
- /***********************************************************************
- Gestion de l'extraction
- * *********************************************************************/
- if (digitalRead(NiveauEauRecup) & recup == 0) {
- Serial.println("HAUT");
- recup = 1;
- timerecup = Hsec;
- }
- if (digitalRead(NiveauEauRecup) == 0 & recup == 1) {
- recup = 0;
- timerecup = Hsec;
- }
- if (recup & Hsec >= timerecup + 40) {
- Serial.println("Evacuation");
- digitalWrite(Evacuation, LOW);
- }
- if ((recup == 0 & Hsec >= timerecup + 5 ) & digitalRead(interONVid) == 0) {
- Serial.println("Evacuation off");
- digitalWrite(Evacuation, HIGH);
- }
- if (digitalRead(interONVid)) {
- Serial.println("Evacuation manu");
- digitalWrite(Evacuation, LOW);
- timerecup = Hsec;
- }
- /***********************************************************************
- FIN
- * *********************************************************************/
- Serial.println("");
- Serial.println("");
- delay(500);
- }
|