|
|
@@ -0,0 +1,283 @@
|
|
|
+
|
|
|
+#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 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);
|
|
|
+}
|