Eccomi ragazzi... allora... di seguito vi posto il codice che legge la temperatura e pressione e lo visualizza sul display, che ho gia' opportunamente montato e provato e funziona benissimo:
//Esempio TEST per sensore Uminidtà-Temperatura DHT11 + Display
//Librerie Importate
#include <LiquidCrystal.h>
#include <dht11.h>
//Sensore Temperatura-Umidità collegato al pin 7 Digital
#define DHT11PIN 7
//Dichiarazione Variabili
dht11 DHT11;
//Display Collegato alle rispettive uscite di Arduino
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//Impostazione per la comunicazione sul Serial Monitor
void setup()
{
Serial.begin(9600);
Serial.println();
//impostiamo il numero di colonne ed il numero di righe sull' lcd
lcd.begin(16, 2);
}
//Impostazioni su Monitor Seriale e indetificazione errori
void loop()
{
Serial.println("\n");
int chk = DHT11.read(DHT11PIN);
Serial.print("Read sensor: ");
switch (chk)
{
case 0: Serial.println("OK"); break;
case -1: Serial.println("Checksum error"); break;
case -2: Serial.println("Time out error"); break;
default: Serial.println("Unknown error"); break;
}
//Stampa i valori di H sul Serial Monitor
Serial.print("Humidity (%): ");
Serial.println((float)DHT11.humidity, 7);
//Stampa i valori di T sul Serial Monitor
Serial.print("Temperature (oC): ");
Serial.println((float)DHT11.temperature, 7);
// Visualizzo il valore dell' Umidità sul display e setta il cursore alla colonna 0, su riga 0
lcd.print("Umidita' :");
lcd.print((float)DHT11.humidity, 7);
lcd.setCursor(0, 1);
delay(500);
// Visualizzo il valore della temperatura sul display e setta il cursore alla colonna 0, su riga 1
lcd.print("Temperatura:");
lcd.print((float)DHT11.temperature, 7);
lcd.setCursor(0, 0);
delay(1000);
}
Questo invece e' il codice, che utilizza un sensore DS1820 della Dallas e impostata una soglia di controllo del termostato direttamente
nel programma, fa scattare un rele' appena la T scente a 18 °C. Ovviamente anche questo funziona:
#include <OneWire.h>
#include <DallasTemperature.h>
// Bus 1-wire - sensore Dallas Ds18B20 su pin D2
#define ONE_WIRE_BUS 2 // Dallas su D2
#define CALDAIA 4 // caldaia su D4
#define TMIN 18 // soglia intervento termostato
#define ISTERESI 2 // isteresi
#define ON 1
#define OFF 0
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWireBus(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWireBus);
int Temperatura; // contiene la temperatura letta dal sensore
void setup() {
// codice eseguito all'avvio o per reset:
pinMode(CALDAIA, OUTPUT); // D4 è linea di uscita
// inizializzo il sensore DS1820
sensors.begin();
// Inizializzo Seriale - Serial Monitor
Serial.begin(9600);
}
void loop() {
sensors.requestTemperatures(); // invia il comando leggi temperatura
Temperatura= sensors.getTempCByIndex(0); //estrai la temperature letta
// Scrivo la temperatura sul serial monitor
Serial.print("Valore di temperatura ");
Serial.print(Temperatura);
Serial.println(" °C");
if (Temperatura < TMIN) // freddo - attivare la caldaia
digitalWrite(CALDAIA, ON);
if (Temperatura >= TMIN+ISTERESI) // caldo - spegnere la caldaia
digitalWrite(CALDAIA, OFF);
}
Questo altro sketch invece, e' l'unione, se cosi si puo' dire, dei due programmi, ovviamente modificati. Praticamente, il rele' non scatta, o meglio, scatta al reset e rimane attivo sempre. Poi si disarma (ma non capisco perche') quando schiaccio il tasto del serial monitor e poi si riarma nuovamente per restare attivo:
//Esempio TEST per sensore Uminidtà-Temperatura DHT11 + Display + Termostato
#include <LiquidCrystal.h> //Libreria Display
#include <dht11.h> //Librerie Sensore Temperatura/Umidità
#define DHT11PIN 7 //Sensore Temperatura-Umidità collegato al pin 7 Digital
#define CALDAIA 8 //Utilizzatore (caladaia) collegato/a al pin 8 (Rele')
#define TMIN 18 //soglia intervento termostato + Isteresi
#define ISTERESI 2 //soglia intervento termostato + Isteresi
#define HIGHT 1
#define LOW 0
dht11 DHT11; //Dichiarazione Variabili
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Display Collegato alle rispettive uscite di Arduino
void setup() //Impostazione per la comunicazione sul Serial Monitor
{
Serial.begin(9600);
pinMode(8, OUTPUT); // codice eseguito all'avvio o per reset
lcd.begin(16, 2); //impostiamo il numero di colonne ed il numero di righe sull' lcd
}
void loop()
{
Serial.println("\n");
DHT11.read(DHT11PIN);
{
}
//Stampa i valori di H sul Serial Monitor
Serial.print("Humidity (%): ");
Serial.println((float)DHT11.humidity, 7);
//Stampa i valori di T sul Serial Monitor
Serial.print("Temperature (oC): ");
Serial.println((float)DHT11.temperature, 7);
// Visualizzo il valore dell' Umidità sul display e setta il cursore alla colonna 0, su riga 0
lcd.print("Umidita' :");
lcd.print((float)DHT11.humidity, 7);
lcd.setCursor(0, 1);
delay(500);
// Visualizzo il valore della temperatura sul display e setta il cursore alla colonna 0, su riga 1
lcd.print("Temperatura:");
lcd.print((float)DHT11.temperature, 7);
lcd.setCursor(0, 0);
delay(500);
if ((DHT11.read(DHT11PIN) < TMIN)) // freddo - attivare la caldaia
digitalWrite(8, HIGHT);
if ((DHT11.read(DHT11PIN)) >= TMIN+ISTERESI) // caldo - spegnere la caldaia
digitalWrite(8, LOW);
}
Non bacchettatemi vi prego!!! il discorso e' che nel codice del DS1820, c'e' "int temperatura" dove viene letta la temperatura del sensore, che poi tramite il ciclo if la richiamo per far "girare la condizione... non riesco a capire come si faccia con il sensore DHT11...
Che ne pensate voi? Si puo fare qualcosa?
Anticipatamente ringrazio...
Saluti,
Car