Ecco il codice!
// Davide Polito
// Serra autonoma con sensore di temperatura e umidità (DHT11), display LCD 20x4 e relè.
int phone = 9; // Relè 1
int ventole = 10; // Relè 2
int acqua = 11; // Relè 3
//DHT11 Sensor:
#include "DHT.h"
#define DHTPIN 12 // Sensore collegato al PIN 12
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
//I2C LCD:
#include // Libreria WIRE
#include // Libreria LCD I2C
// LCD I2C address
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
void setup()
{
// PIN 9 al Relè - IN1
Serial.begin(9600);
pinMode(phone, OUTPUT);
// PIN 10 al relè - IN2
pinMode(ventole, OUTPUT);
// PIN 11 al relè - IN3
pinMode(acqua, OUTPUT);
//I2C LCD
Serial.begin(9600);
lcd.begin(20,4);
Serial.println("Serra Autonoma");
// Avvio sensore DHT11
dht.begin();
}
void nascita(){
// Inizializzazione contatore
int contum=0;
int conttemp=0;
// Lettura umidità e temperatura del sensore DHT11
int h = dht.readHumidity();
int t = dht.readTemperature();
// Misura l'umidità e se maggiore o minore intervine
if (h>70)
digitalWrite (ventole, HIGH); // Attiva Relè 2
contum=1;
if else (h digitalWrite (acqua, HIGH); // Attiva Relè 3
contum=1;
else
digitalWrite (ventole, HIGH); // Disattiva Relè 2
digitalWrite (acqua, HIGH); // Disattiva Relè 3
contum=0;
// Misura la temperatura e se maggiore o minore intervine
if (t>25)
digitalWrite (vetole, HIGH); // Attiva Relè 2
conttemp=1;
if else (t digitalWrite (phone, HIGH); // Attiva Relè 1
conttemp=1;
else
digitalWrite (ventola, LOW); //Disattiva Relè 2
digitalWrite (phone, LOW); //Disattiva Relè 1
conttemp=0;
Serial.print("Temp: ");
Serial.print(t);
Serial.print("C, Umid: ");
Serial.print(h);
Serial.println("%");
// impostare cursore sulla prima riga
lcd.setCursor(0, 0);
lcd.print("Temperatura: ");
lcd.print(t);
lcd.print("C");
// imposta cursore sulla seconda riga
lcd.setCursor(0,1);
lcd.print("Umidita': ");
lcd.print(h);
lcd.print("%");
// impostare cursore sulla terza riga
lcd.setCursor(0, 2);
if(contum==0 && conttemp==0)
lcd.print("Cond: Perfette");
if else(contum==1 && conttemp==0)
lcd.print("Cond: High temp");
if else(contum==0 && conttemp==1)
lcd.print("Cond: High um");
if else(contum==1 && conttemp==1)
lcd.print("Cond: High temp & um");
}
void crescita(){
// inizializzazione contatore
int contum=0;
int conttemp=0;
// Lettura umidità e temperatura del sensore DHT11
int h = dht.readHumidity();
int t = dht.readTemperature();
// Misura l'umidità e se maggiore o minore intervine
if (h>60)
digitalWrite (ventole, HIGH); // Attiva Relè 2
contum=1;
if else (h digitalWrite (acqua, HIGH); // Attiva Relè 3
contum=1;
else
digitalWrite (ventole, HIGH); // Disattiva Relè 2
digitalWrite (acqua, HIGH); // Disattiva Relè 3
contum=0;
// Misura la temperatura e se maggiore o minore intervine
if (t>28)
digitalWrite (vetole, HIGH); // Attiva Relè 2
conttemp=1;
if else (t digitalWrite (phone, HIGH); // Attiva Relè 1
conttemp=1;
else
digitalWrite (ventola, LOW); //Disattiva Relè 2
digitalWrite (phone, LOW); //Disattiva Relè 1
conttemp=0;
Serial.print("Temp: ");
Serial.print(t);
Serial.print("C, Umid: ");
Serial.print(h);
Serial.println("%");
// impostare cursore sulla prima riga
lcd.setCursor(0, 0);
lcd.print("Temperatura: ");
lcd.print(t);
lcd.print("C");
// imposta cursore sulla seconda riga
lcd.setCursor(0,1);
lcd.print("Umidita': ");
lcd.print(h);
lcd.print("%");
// impostare cursore sulla terza riga
lcd.setCursor(0, 2);
if(contum==0 && conttemp==0)
lcd.print("Cond: Perfette");
if else(contum==1 && conttemp==0)
lcd.print("Cond: High temp");
if else(contum==0 && conttemp==1)
lcd.print("Cond: High um");
if else(contum==1 && conttemp==1)
lcd.print("Cond: High temp & um");
}
void fioritura_e_frutti(){
// inizializzazione contatore
int contum=0;
int conttemp=0;
// Lettura umidità e temperatura del sensore DHT11
int h = dht.readHumidity();
int t = dht.readTemperature();
// Misura l'umidità e se maggiore o minore interviene
if (h>50)
digitalWrite (ventole, HIGH); // Attiva Relè 2
contum=1;
if else (h digitalWrite (acqua, HIGH); // Attiva Relè 3
contum=1;
else
digitalWrite (ventole, HIGH); // Disattiva Relè 2
digitalWrite (acqua, HIGH); // Disattiva Relè 3
contum=0;
// Misura la temperatura e se maggiore o minore intervine
if (t>26)
digitalWrite (vetole, HIGH); // Attiva Relè 2
conttemp=1;
if else (t digitalWrite (phone, HIGH); // Attiva Relè 1
conttemp=1;
else
digitalWrite (ventola, LOW); //Disattiva Relè 2
digitalWrite (phone, LOW); //Disattiva Relè 1
conttemp=0;
Serial.print("Temp: ");
Serial.print(t);
Serial.print("C, Umid: ");
Serial.print(h);
Serial.println("%");
// impostare cursore sulla prima riga
lcd.setCursor(0, 0);
lcd.print("Temperatura: ");
lcd.print(t);
lcd.print("C");
// imposta cursore sulla seconda riga
lcd.setCursor(0,1);
lcd.print("Umidita': ");
lcd.print(h);
lcd.print("%");
// impostare cursore sulla terza riga
lcd.setCursor(0, 2);
if(contum==0 && conttemp==0)
lcd.print("Cond: Perfette");
if else(contum==1 && conttemp==0)
lcd.print("Cond: High temp");
if else(contum==0 && conttemp==1)
lcd.print("Cond: High um");
if else(contum==1 && conttemp==1)
lcd.print("Cond: High temp & um");
}
void loop(){
nascita();
crescita();
fioritura_e_frutti();
}
Grazie mille della disponibilità!
Post unito automaticamente: 11 Ottobre 2018
Secondo me ho sbagliato qualcosa nelle librerie ma non riesco a capire cosa
@marcusfenixx