Salve a tutti
mi sono avvicinato al mondo di arduino da poco, sono un felice possessore di un arduino mega , non sono un esperto ma mi arrangio e mi piace imparare sempre cose nuove.
Voglio realizzare un controllo della mia serra tramite arduino. Sto partendo da una cosa semplice come il controllo di temperatura e umidità con relativa attivazione di una stufa e di un ventilatore per poi arrivare a un progetto un pò più complesso che mi permetta di controllare e gestire la mia serra dal mio telefono.
ho un problema con lo skech , vi spiego cosa voglio fare se la temperatura è maggiore di 20°C la stufa deve spegnersi e il ventilatore si deve accendere,se la temperatura è minore di 15 la stufa si accende e il ventilatore si spegne, se il range della temperatura è compreso tra 20 e 15 tutti gli impianti sono spenti.
Quando ho compilato lo skech mi sembrava tutto abbastanza semplice e chiaro, ma all'atto pratico non mi funziona.
Per esempio adesso la temperatura mi segna 22°C e invece di raffreddare mi parte il riscaldamento!
Eccovi il mio Skech :
#define RELAY1 30
#define RELAY2 31
#define RELAY3 32
#include "LiquidCrystal.h"
#include <DHT.h>
#include <Wire.h>mi
int temperature; // sensore temperatura
int Humidity; // sensore umidità
DHT dht(2, DHT22); //Imposta il modello di sensore e il pin di Arduino a cui è collegato
LiquidCrystal lcd(3,4, 5,6,7,8); //Imposta i pin di Arduino a quali sono collegati in pin del display (Rs,E,DB4,DB5,DB6,DB7)
int lum_pin=9; //il pin al quale è collegato LED+
byte lum_val=127; // il valore della luminosità. Può essere impostato da 0 (retroilluminazione spenata) a 255 (retroilluminazione massima)
void setup() {
for (int i=30; i<38; i++) {
pinMode(i, OUTPUT);
}
Serial.begin(9600); //Abilitazione monitor pc
//Abilitazione pin in output
pinMode(lum_pin,OUTPUT);
analogWrite(lum_pin,lum_val);
dht.begin();
lcd.begin(16, 2);// imposto il numer di righe e colonne del display
//creo il carattere ‘°’ per poter scrivere °C dopo il valore della temperatura
byte deg[8] =
{
0b00011,
0b00011,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000
};
lcd.createChar(4,deg);
}
void loop() { {
temperature=digitalRead (DHT22);// lettura sensore umidita' e temperatura
// schema umidita' e temperatura inizio
{
float h = dht.readHumidity(); //leggi il valore di temperatura
float t = dht.readTemperature(); //leggi il valore di umidità
lcd.setCursor(0,0);//metti il cursore sulla prima riga
lcd.print("");
if(isnan(t))lcd.print("Errore!");//se il valore di temperatura è NaN (Not a Number)
else //altrimenti
{
lcd.print(t);
Serial.print("temperatura: ");
Serial.println (t);
lcd.write(4); //scrivi il carattere ‘°’
lcd.print("C");
}
lcd.setCursor(9,0);//metti il cursore sulla seconda riga
lcd.print("");
if(isnan(h))lcd.print("Errore!");//se il valore di umidità è NaN (Not a Number)
else
{
lcd.print(h);
lcd.print(" %");
Serial.print("Umidita': ");
Serial.println (h);
}
}
// schema umidita' e temperatura fine
// inizio comandi relè
//TEMPERATURA INZIO
if (temperature > 20) { // settaggio temperatura MASSIMA della serra
digitalWrite(31, LOW); // spegne la stufa
digitalWrite(30, HIGH); //accende la ventilazione
digitalWrite(32, HIGH); //accende IL FOG
lcd.setCursor(0,3);
lcd.print("T >10 RAFFRED");
Serial.println ("RISCALDAMENTO OFF");
delay(1000);
Serial.println ("FAN ON");
delay(1000);
Serial.println ("FOG ON");
delay(1000);
}else if(temperature < 15) { // settaggio temperatura MINIMA della serra
digitalWrite(31, HIGH); //accende la stufa
digitalWrite(30, LOW); //spegnela ventilazione
digitalWrite(32, LOW); // spegne IL FOG
Serial.println ("IL FOG E' ACCESO");
delay(3000); //NEBULIZZO PER SEC 3
digitalWrite(32, LOW); //IL FOG E' SPENTO
Serial.println ("IL FOG E' SPENTO");
lcd.setCursor(0,3);
lcd.print("T<15 RISCALDO");
Serial.println ("WARM ON FAN OFF");
delay(1000);
} else { // se temperatura compresa tra min e max tutto spento
digitalWrite(31, LOW);
digitalWrite(30, LOW);
lcd.setCursor(0,3);
lcd.print("Tutto Spento ");
Serial.println ("Tutto Spento ");
}
delay(1000); // intervallo tra le letture
}
}
//TEMPERATURA FINE
// FINE COMANDI RELAY
Vi ringrazio per qualunque contributo voi mi diate!
un abbraccio !
Salvo