Questo è il mio sketch, purtroppo anche con il consiglio di Roby0303 non funziona.
1- non riesco a capire come mai negli i simboli maggiore e minore li devo scrivere al contrario (< >), ( ad esempio se scrivo: if(5>4){…} non mi va in funzione l’if, ma se lo scrivo cosi: if(5<4){…} in questo modo funziona);
2- io per prelevare i dati del sensore ho preso uno sketch di esempio della libreria DHT11 (mi ha fatto penare per farla funzionare) ed ho tolto le cose superflue e l’ho modificata per visualizzare i dati su di un display. Se mi dite come fare per prendere i dati dal sensore che proprio non lo capisco…
3- il display (di tipo lcd hd44780 16x2) delle volte fa cilecca e perde le scritte, oppure compaiono strani simboli (anche se le funzioni dell’arduino continuano a funzionare), questo mi succede ad esempio quanto (non sempre) il relay che comanda un carico di circa 50w in 220v cambia stato e produce un sbalzo di corrente, se esiste un modo per risolvere o evitare che accada (agiungere qualche filtro o che ne so).
Utilizzo un arduino UNO, ma ho gia in ordine un bel Arduino Mega che dovrebbe arrivarmi lunedi 09.
Lo utilizzo per regolare la temperatura e l’umidità di un terrario per serpenti, con un umidificatore (relay2) ad ultrasuoni, una ventola (relay3) per pc ed una lampada riscaldante (relay1) per la temperatura
#include <avr/io.h>
#include <avr/wdt.h>
#define Reset_AVR() wdt_enable(WDTO_8S); while(1) {}
#include <LiquidCrystal.h>
#include <DHT11.h>
int pinsensore=6;
DHT11 dht11(pinsensore);
LiquidCrystal lcd(8, 7, 5, 4, 3, 2);
const int relay1 = 9;
const int relay2 = 10;
const int relay3 = 11;
const int relay4 = 12;
float tempSET=(27,0);
float z=(1.0);
float y=(1.0);
int umidMAX = 65;
int umidMIN = 60;
void setup()
{
lcd.begin(16, 2);
Serial.begin(9600);
lcd.print("Temperatura");
lcd.setCursor(0,1);
lcd.print("Umidita' %");
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
pinMode(relay4, OUTPUT);
}
void loop()
{
int err;
float temp, humi;
if((err=dht11.read(humi, temp))==0)
{
lcd.setCursor(12,0);
lcd.print(temp);
lcd.setCursor(12,1);
lcd.print(humi);
}
else
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Errore N:");
lcd.setCursor(13,0);
lcd.print(err);
delay(5000);
Reset_AVR();
}
if(temp > tempSET+y ) //Imposta Disattivazione Relè Sensore
{
digitalWrite(relay1, LOW); // spengo il Relè Sensore
}
if(temp < tempSET-z ) // Imposta Attivazione Relè Sensore
{
digitalWrite(relay1, HIGH); // accendo il Relè
}
if(humi>umidMIN){
digitalWrite(relay2,HIGH);
}
else{
digitalWrite(relay2,LOW);
}
if(humi<umidMAX){
digitalWrite(relay3,HIGH);
}
else{
digitalWrite(relay3,LOW);
}
delay(3000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temperatura");
lcd.setCursor(0,1);
lcd.print("Umidita' %");
}