#include <Wire.
h>
#include <DS1302.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <Servo.h>
#define invertpol 22 //invertitore polarità cella di
Pelitier
#define peltier 27 //alimentazione cella di Peltier
#define irrig 23 //pompa irrigazione
#define vent 24 //ventilazione serra
#define illum 25 //illuminazione led notturna
#define clim 26//ventole climatizzazione con cella di
Peltier
#define livserb A8 //livello acqua serbatoio
#define umidterreno1 A9 //pin sensore1 umidità
terreno
#define umidterreno2 A10 //pin sensore2 umidità
terreno
//DHT11
#define DHTPIN 7
#define DHTTYPE DHT11
#define p1 53 //selettore modlità AUTO/MAN
#define p2 52 //irrigazione manuale
#define p3 51 //ventilazione manuale
#define p4 50 //illuminazione manuale
#define p5 49 //riscaldamento manuale
#define p6 48 //apertura finestre manuale
#define l1red 45 //led rosso irrigazione
#define l2red 44 //led rosso ventilazione
#define l3red 43 //led rosso illuminazione
#define l4red 42 //led rosso riscaldamento
#define l5red 41 //led rosso raffrescamento
#define l1green 39 //led verde irrigazione
#define l2green 38 //led verde ventilazione
#define l3green 37 //led verde illuminazione
#define l4green 36 //led verde riscaldamento
#define l5green 35 //led verde raffrescamento
#define buzzer1 12 //buzzer1
#define buzzer2 13 //buzzer2
//VARIABILI DI UMIDITÀ E TEMPERATURA
float temp;
float hum;
//SETTAGGIO SERVOMOTORI FINESTRE
int val1=1;
int val11=90;
int val2=90;
int val22=1;
int flagAUTO=1;
int flagMAN=1;
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x3F, 20, 4); //DISPLAY 20X4
DS1302 rtc(2, 3, 4);
Servo myservo1;
Servo myservo2;
void setup()
{
analogWrite(buzzer1, 0);
analogWrite(buzzer1, 0);
[Link](); //inizializza DHT11
[Link](); //inizializza LCD
[Link](8); //pin Servo1
[Link](9); //pin Servo2
[Link](val11);
[Link](val22);
[Link](false); //RTC DS1302
[Link](false); //RTC DS1302
/* DOPO AVER CARICATO IL PROGRAMMA CON LA DATA E
L'ORA CORRETTE,
COMMENTARLE PER I CARICAMENTI SUCCESSIVI
[Link](MONDAY); // GIORNO DELLA SETTIMANA
[Link](10, 35, 0); // ORA FORMATO 24Hr
[Link](29, 6, 2018); // DATA */
//IMPOSTAZIONE PIN DI INPUT/OUTPUT
pinMode(invertpol, OUTPUT);
pinMode(peltier, OUTPUT);
pinMode(irrig, OUTPUT);
pinMode(vent, OUTPUT);
pinMode(illum, OUTPUT);
pinMode(clim, OUTPUT);
pinMode(livserb, INPUT);
pinMode(umidterreno1, INPUT);
pinMode(umidterreno2, INPUT);
pinMode(p1, OUTPUT);
pinMode(p2, OUTPUT);
pinMode(p3, OUTPUT);
pinMode(p4, OUTPUT);
pinMode(p5, OUTPUT);
pinMode(p6, OUTPUT);
pinMode(l1red, OUTPUT);
pinMode(l2red, OUTPUT);
pinMode(l3red, OUTPUT);
pinMode(l4red, OUTPUT);
pinMode(l5red, OUTPUT);
pinMode(l1green, OUTPUT);
pinMode(l2green, OUTPUT);
pinMode(l3green, OUTPUT);
pinMode(l4green, OUTPUT);
pinMode(l5green, OUTPUT);
pinMode(buzzer1, OUTPUT);
pinMode(buzzer2, OUTPUT);
//SETTA A 0 I TRASDUTTORI
digitalWrite(irrig,HIGH);
digitalWrite(vent,HIGH);
digitalWrite(illum,HIGH);
digitalWrite(clim,HIGH);
//TEST PANNELLO DI CONTROLLO: breve test per
controllare il
funzionamento dei led del pannello del controllo e
dei buzzer
[Link](5,0);
[Link]("BENVENUTO!");
delay(1000);
[Link](1,1);
[Link]("**TEST PANNELLO**");
digitalWrite(l1red, HIGH);
digitalWrite(l2red, HIGH);
digitalWrite(l3red, HIGH);
digitalWrite(l4red, HIGH);
digitalWrite(l5red, HIGH);
delay(1000);
digitalWrite(l1red, LOW);
digitalWrite(l2red, LOW);
digitalWrite(l3red, LOW);
digitalWrite(l4red, LOW);
digitalWrite(l5red, LOW);
digitalWrite(l1green, HIGH);
digitalWrite(l2green, HIGH);
digitalWrite(l3green, HIGH);
digitalWrite(l4green, HIGH);
digitalWrite(l5green, HIGH);
delay(1000);
digitalWrite(l1green, LOW);
digitalWrite(l2green, LOW);
digitalWrite(l3green, LOW);
digitalWrite(l4green, LOW);
digitalWrite(l5green, LOW);
delay(500);
[Link](2,2);
[Link]("**TEST BUZZER**");
analogWrite(buzzer1, 250);
delay(500);
analogWrite(buzzer1, 0);
delay(500);
analogWrite(buzzer2, 250);
delay(500);
analogWrite(buzzer2, 0);//buzzer2
delay(2000);
[Link](0,3);
[Link]("**TEST COMPLETATO**");
delay(2000);
[Link]();
}
void loop()
{
int letturap1;
int letturap2;
int letturap3;
int letturap4;
int letturap5;
int letturap6;
int flag=0;
int flag2=0;
int val1=1;
int val11=90;
int val2=90;
int val22=1;
letturap1=digitalRead(p1);
letturap2=digitalRead(p2);
letturap3=digitalRead(p3);
letturap4=digitalRead(p4);
letturap5=digitalRead(p5);
letturap6=digitalRead(p6);
float umidterr1;
float umidterr2;
float mediaumidterr=0;
float risultatoumidterr=0;
float mapumidterr;
float livellomap;
float livelloread;
String ora = [Link](); //converte la stringa
dell'ora
in un valore numerico
umidterr1=analogRead(umidterreno1); //gestione
sensori terreno
e calcolo media dei due seganli
umidterr2=analogRead(umidterreno2);
mediaumidterr=umidterr1 + umidterr2;
risultatoumidterr=(mediaumidterr/2);
mapumidterr=map(risultatoumidterr, 0, 1023, 100,
0); //mappa il
valore di umidità terreno da 0 a 100 (Percentuale)
hum = [Link](); //gestione umidità e temp
DHT11
temp=[Link]();
livelloread=analogRead(livserb);
livellomap=map(livelloread, 0, 1023, 100, 10);
if(letturap1==HIGH) //MANUALE
{
if(flagMAN==1)
{
[Link]();
delay(250);
[Link](6,0);
[Link]("MAN MODE");
digitalWrite(irrig,HIGH);
digitalWrite(vent,HIGH);
digitalWrite(illum,HIGH);
digitalWrite(clim,HIGH);
digitalWrite(peltier,LOW);
digitalWrite(invertpol,LOW);
digitalWrite(l1red, LOW);
digitalWrite(l2red, LOW);
digitalWrite(l3red, LOW);
digitalWrite(l4red, LOW);
digitalWrite(l5red, LOW);
digitalWrite(l1green, LOW);
digitalWrite(l2green, LOW);
digitalWrite(l3green, LOW);
digitalWrite(l4green, LOW);
digitalWrite(l5green, LOW);
[Link](val11);
[Link](val22);
analogWrite(buzzer1, 250);
delay(250);
analogWrite(buzzer1, 0);
delay(1000);
flagMAN=0;
}
else
if (flagMAN==0)
{
[Link]();
[Link](0,0);
[Link]("Ta:");
[Link](temp,1);
[Link]("C");
[Link](12,0);
[Link]("Ha:");
[Link](hum,1);
[Link]("%");
[Link](0,1);
[Link]("Ht:");
[Link](mapumidterr,1);
[Link]("%");
[Link](11,1);
[Link]("Lvl:");
[Link](livellomap,1);
[Link]("%");
[Link](0,2);
[Link]("PUMP:");
[Link](8,2);
[Link]("|AIR:");
[Link](16,2);
[Link]("|M:");
[Link](0,3);
[Link]("LED:");
[Link](12,3);
[Link]([Link]()); //stringa ora in
hh:mm:ss
flagAUTO=1; //PORTO ALTO IL FLAG CHE INIZIALIZZA LA
MODALITÀ
AUTOMATICA
flagMAN=0; //AZZERO IL FLAG DELLA MODALITÀ MANUALE
if(letturap2==HIGH) //IRRIGAZIONE MANUALE
{ //ON
digitalWrite(irrig, LOW);
digitalWrite(l1green, HIGH);
digitalWrite(l1red, LOW);
[Link](5,2);
[Link]("ON");}
else
{ //OFF
digitalWrite(irrig, HIGH);
digitalWrite(l1green, LOW);
digitalWrite(l1red, HIGH);
[Link](5,2);
[Link]("OFF");}
if(letturap3==HIGH) //VENTILAZIONE+SERVO MANUALI
{ //ON
digitalWrite(vent, LOW);
digitalWrite(l2green, HIGH);
digitalWrite(l2red, LOW);
[Link](val1);
[Link](val2);
[Link](13,2);
[Link]("ON");}
else
{ //OFF
digitalWrite(vent, HIGH);
digitalWrite(l2green, LOW);
digitalWrite(l2red, HIGH);
[Link](val11);
[Link](val22);
[Link](13,2);
[Link]("OFF");}
if(letturap4==HIGH) //LUCI MANUALI
{ //ON
digitalWrite(illum, LOW);
digitalWrite(l3green, HIGH);
digitalWrite(l3red, LOW);
[Link](4,3);
[Link]("ON");}
else
{ //OFF
digitalWrite(illum, HIGH);
digitalWrite(l3green, LOW);
digitalWrite(l3red, HIGH);
[Link](4,3);
[Link]("OFF");
}
if(letturap5==HIGH) //RISCALDAMENTO
{ //ON
digitalWrite(clim, LOW);
digitalWrite(peltier, HIGH);
digitalWrite(l4green, HIGH);
digitalWrite(l4red, LOW);
[Link](19,2);
[Link]("H");
flag=1;}
else
if(letturap5==LOW && flag2==0)
{ //OFF
digitalWrite(clim, HIGH);
digitalWrite(peltier, LOW);
digitalWrite(l4green, LOW);
digitalWrite(l4red, HIGH);
[Link](19,2);
[Link]("");
flag=0;
}
if(letturap6==HIGH) //RAFFREDDAMENTO
{ //ON
digitalWrite(clim, LOW);
digitalWrite(peltier, HIGH);
digitalWrite(invertpol, HIGH);
digitalWrite(l5green, HIGH);
digitalWrite(l5red, LOW);
[Link](19,2);
[Link]("C");
flag2=1;
}
else
if(letturap6==LOW && flag==0)
{ //OFF
digitalWrite(clim, HIGH);
digitalWrite(peltier, LOW);
digitalWrite(invertpol,LOW);
digitalWrite(l5green, LOW);
digitalWrite(l5red, HIGH);
[Link](19,2);
[Link]("");
flag2=0;
}
delay(1000);
}
flagAUTO=1;
}
else
if(letturap1==LOW) //AUTOMATICO
{
if(flagAUTO==1)
{
[Link]();
delay(250);
[Link](5,0);
[Link]("AUTO MODE");
digitalWrite(irrig,HIGH);
digitalWrite(vent,HIGH);
digitalWrite(illum,HIGH);
digitalWrite(clim,HIGH);
digitalWrite(peltier,LOW);
digitalWrite(invertpol,LOW);
digitalWrite(l1red, LOW);
digitalWrite(l2red, LOW);
digitalWrite(l3red, LOW);
digitalWrite(l4red, LOW);
digitalWrite(l5red, LOW);
digitalWrite(l1green, LOW);
digitalWrite(l2green, LOW);
digitalWrite(l3green, LOW);
digitalWrite(l4green, LOW);
digitalWrite(l5green, LOW);
[Link](val11);
[Link](val22);
analogWrite(buzzer1, 250);
delay(250);
analogWrite(buzzer1, 0);
delay(1000);
flagAUTO=0;
}
else
{
[Link]();
flagAUTO=0; //AZZERO IL FLAG DELLA MODALITÀ
AUTOMATICA
flagMAN=1; //PORTO ALTO IL FLAG CHE INIZIALIZZA LA
MODALITÀ
MANUALE
delay(250);
[Link](0,0);
[Link]("GreenLogic");
[Link](12,0);
[Link]([Link]()); //stringa ora in
hh:mm:ss
[Link](0,1);
[Link]("TEMPERATURE:"); //stampa TEMPERATURA ARIA
SERRA
[Link](temp);
[Link]("C");
[Link](0,2);
[Link]("AIR HUMIDITY:"); //stampa UMIDITÀ ARIA
SERRA
[Link](hum);
[Link]("%");
[Link](11,3);
[Link]("/WL:");
[Link](livellomap);
[Link](0,3);
[Link]("S.H.:"); //stampa UMIDITÀ TERRENO MEDIA
[Link](mapumidterr);
[Link]("%");
if(mapumidterr<=50) //ACCENSIONE POMPA
{digitalWrite(irrig, LOW);
digitalWrite(l1green, HIGH);}
else
if(mapumidterr>=60) //SPEGNIMENTO POMPA
{digitalWrite(irrig, HIGH);
digitalWrite(l1green, LOW);}
if(temp<=18) //ACCENSIONE RISCALDAMENTO
{digitalWrite(peltier, HIGH);
digitalWrite(invertpol, LOW);
digitalWrite(clim, LOW);
digitalWrite(l4green, HIGH);
}
else //SPEGNIMENTO RISCALDAMENTO
if(temp>=21 && temp<=22)
{digitalWrite(peltier, LOW);
digitalWrite(invertpol, LOW);
digitalWrite(clim, HIGH);
digitalWrite(l4green, LOW);
}
if(temp>=36) //ACCENSIONE RAFFREDDAMENTO
{digitalWrite(peltier, HIGH);
digitalWrite(invertpol, HIGH);
digitalWrite(clim, LOW);
digitalWrite(l5green, HIGH);
}
else //SPEGNIMENTO RAFFREDDAMENTO
if(temp>=33 && temp<=34)
{digitalWrite(peltier, LOW);
digitalWrite(invertpol, LOW);
digitalWrite(clim, HIGH);
digitalWrite(l5green, HIGH);
}
if(hum>=80) //ACCENSIONE VENTOLA E APERTURA PORTA
{digitalWrite(vent, LOW);
digitalWrite(l2green, HIGH);
[Link](val1);
[Link](val2);
}
else
if(hum<=70) //SPEGNIMENTO VENTOLA E CHIUSURA PORTE
{digitalWrite(vent, HIGH);
digitalWrite(l2green, LOW);
[Link](val11);
[Link](val22);
}
if(ora>="[Link]" && ora<="[Link]")
{
digitalWrite(illum, LOW);
digitalWrite(l3green, HIGH);
}
else
{
digitalWrite(illum, HIGH);
digitalWrite(l3green, LOW);
}
delay(1000);
}
}
}