0% found this document useful (0 votes)
8 views

Programma

Uploaded by

Gerry Russo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views

Programma

Uploaded by

Gerry Russo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 12

#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);
dht.begin(); //inizializza DHT11
lcd.begin(); //inizializza LCD
myservo1.attach(8); //pin Servo1
myservo2.attach(9); //pin Servo2
myservo1.write(val11);
myservo2.write(val22);
rtc.halt(false); //RTC DS1302
rtc.writeProtect(false); //RTC DS1302
/* DOPO AVER CARICATO IL PROGRAMMA CON LA DATA E
L'ORA CORRETTE,
COMMENTARLE PER I CARICAMENTI SUCCESSIVI
rtc.setDOW(MONDAY); // GIORNO DELLA SETTIMANA
rtc.setTime(10, 35, 0); // ORA FORMATO 24Hr
rtc.setDate(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
lcd.setCursor(5,0);
lcd.print("BENVENUTO!");
delay(1000);
lcd.setCursor(1,1);
lcd.print("**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);
lcd.setCursor(2,2);
lcd.print("**TEST BUZZER**");
analogWrite(buzzer1, 250);
delay(500);
analogWrite(buzzer1, 0);
delay(500);
analogWrite(buzzer2, 250);
delay(500);
analogWrite(buzzer2, 0);//buzzer2
delay(2000);
lcd.setCursor(0,3);
lcd.print("**TEST COMPLETATO**");
delay(2000);
lcd.clear();
}
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 = rtc.getTimeStr(); //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 = dht.readHumidity(); //gestione umidità e temp
DHT11
temp=dht.readTemperature();
livelloread=analogRead(livserb);
livellomap=map(livelloread, 0, 1023, 100, 10);
if(letturap1==HIGH) //MANUALE
{
if(flagMAN==1)
{
lcd.clear();
delay(250);
lcd.setCursor(6,0);
lcd.print("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);
myservo1.write(val11);
myservo2.write(val22);
analogWrite(buzzer1, 250);
delay(250);
analogWrite(buzzer1, 0);
delay(1000);
flagMAN=0;
}
else
if (flagMAN==0)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ta:");
lcd.print(temp,1);
lcd.print("C");
lcd.setCursor(12,0);
lcd.print("Ha:");
lcd.print(hum,1);
lcd.print("%");
lcd.setCursor(0,1);
lcd.print("Ht:");
lcd.print(mapumidterr,1);
lcd.print("%");
lcd.setCursor(11,1);
lcd.print("Lvl:");
lcd.print(livellomap,1);
lcd.print("%");
lcd.setCursor(0,2);
lcd.print("PUMP:");
lcd.setCursor(8,2);
lcd.print("|AIR:");
lcd.setCursor(16,2);
lcd.print("|M:");
lcd.setCursor(0,3);
lcd.print("LED:");
lcd.setCursor(12,3);
lcd.print(rtc.getTimeStr()); //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);
lcd.setCursor(5,2);
lcd.print("ON");}
else
{ //OFF
digitalWrite(irrig, HIGH);
digitalWrite(l1green, LOW);
digitalWrite(l1red, HIGH);
lcd.setCursor(5,2);
lcd.print("OFF");}
if(letturap3==HIGH) //VENTILAZIONE+SERVO MANUALI
{ //ON
digitalWrite(vent, LOW);
digitalWrite(l2green, HIGH);
digitalWrite(l2red, LOW);
myservo1.write(val1);
myservo2.write(val2);
lcd.setCursor(13,2);
lcd.print("ON");}
else
{ //OFF
digitalWrite(vent, HIGH);
digitalWrite(l2green, LOW);
digitalWrite(l2red, HIGH);
myservo1.write(val11);
myservo2.write(val22);
lcd.setCursor(13,2);
lcd.print("OFF");}
if(letturap4==HIGH) //LUCI MANUALI
{ //ON
digitalWrite(illum, LOW);
digitalWrite(l3green, HIGH);
digitalWrite(l3red, LOW);
lcd.setCursor(4,3);
lcd.print("ON");}
else
{ //OFF
digitalWrite(illum, HIGH);
digitalWrite(l3green, LOW);
digitalWrite(l3red, HIGH);
lcd.setCursor(4,3);
lcd.print("OFF");
}
if(letturap5==HIGH) //RISCALDAMENTO
{ //ON
digitalWrite(clim, LOW);
digitalWrite(peltier, HIGH);
digitalWrite(l4green, HIGH);
digitalWrite(l4red, LOW);
lcd.setCursor(19,2);
lcd.print("H");
flag=1;}
else
if(letturap5==LOW && flag2==0)
{ //OFF
digitalWrite(clim, HIGH);
digitalWrite(peltier, LOW);
digitalWrite(l4green, LOW);
digitalWrite(l4red, HIGH);
lcd.setCursor(19,2);
lcd.print("");
flag=0;
}
if(letturap6==HIGH) //RAFFREDDAMENTO
{ //ON
digitalWrite(clim, LOW);
digitalWrite(peltier, HIGH);
digitalWrite(invertpol, HIGH);
digitalWrite(l5green, HIGH);
digitalWrite(l5red, LOW);
lcd.setCursor(19,2);
lcd.print("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);
lcd.setCursor(19,2);
lcd.print("");
flag2=0;
}
delay(1000);
}
flagAUTO=1;
}
else
if(letturap1==LOW) //AUTOMATICO
{
if(flagAUTO==1)
{
lcd.clear();
delay(250);
lcd.setCursor(5,0);
lcd.print("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);
myservo1.write(val11);
myservo2.write(val22);
analogWrite(buzzer1, 250);
delay(250);
analogWrite(buzzer1, 0);
delay(1000);
flagAUTO=0;
}
else
{
lcd.clear();
flagAUTO=0; //AZZERO IL FLAG DELLA MODALITÀ
AUTOMATICA
flagMAN=1; //PORTO ALTO IL FLAG CHE INIZIALIZZA LA
MODALITÀ
MANUALE
delay(250);
lcd.setCursor(0,0);
lcd.print("GreenLogic");
lcd.setCursor(12,0);
lcd.print(rtc.getTimeStr()); //stringa ora in
hh:mm:ss
lcd.setCursor(0,1);
lcd.print("TEMPERATURE:"); //stampa TEMPERATURA ARIA
SERRA
lcd.print(temp);
lcd.print("C");
lcd.setCursor(0,2);
lcd.print("AIR HUMIDITY:"); //stampa UMIDITÀ ARIA
SERRA
lcd.print(hum);
lcd.print("%");
lcd.setCursor(11,3);
lcd.print("/WL:");
lcd.print(livellomap);
lcd.setCursor(0,3);
lcd.print("S.H.:"); //stampa UMIDITÀ TERRENO MEDIA
lcd.print(mapumidterr);
lcd.print("%");
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);
myservo1.write(val1);
myservo2.write(val2);
}
else
if(hum<=70) //SPEGNIMENTO VENTOLA E CHIUSURA PORTE
{digitalWrite(vent, HIGH);
digitalWrite(l2green, LOW);
myservo1.write(val11);
myservo2.write(val22);
}
if(ora>="20:00:00" && ora<="5:00:00")
{
digitalWrite(illum, LOW);
digitalWrite(l3green, HIGH);
}
else
{
digitalWrite(illum, HIGH);
digitalWrite(l3green, LOW);
}
delay(1000);
}
}
}

You might also like