Pages: [1]   Go Down
Author Topic: Presentazione + Problema Sonda Temperatura/Umidita' DHT11  (Read 1727 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve gente.  smiley smiley smiley-razz smiley-razz smiley-razz smiley-cool
Mi presento...

mi chiamo Carmine, ho 32 anni e scrivo dalla prov. di Latina, ing. nucleare.
Vi seguo da qualche settimana ed ho deciso di iscrivermi e scrivervi in modo da conoscerci e magari aiutarmi :S

Appassionato di elettronica anche se, ho preso una strada "parallela", ho da poco comperato un arduino ed ho gia' realizzato alcuni progetti. Mano mano che li costruivo ono andato avanti nel mettere display sensori ecc ecc.
Praticamente ho realizzato tramite Arduino, la lettura di temperatura e umidita' con il sensore DHT11 e display a cristalli liquidi.
Fino a qui tutto bene... Lo step successivo era quello di inserire, o meglio, utilizzare questo progeto, trasformandolo in un termostato.
Il fatto e' che non riesco a far scattare il Rele' che ho collegato sull' uscita 8 dell' arduino...
Se posto il codice ci possiamo dare un occhiata insieme? Magari sbaglio qualche cosa e dato che sono gia' 3 gg che ci sto su non ne riesco a venire fuori...

che ne dite? posso postare qui il codice?

Grazieeeeeee smiley-razz
« Last Edit: March 24, 2012, 07:24:11 pm by myhopes » Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21939
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Posta il codice. La mia sfera di cristallo non ho disponibile in questo momento. smiley-wink
Ciao Uwe
Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

certo, scrivi pure:)
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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!!! smiley-razz 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 smiley-wink
Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ti consiglio di non usare la lettura diretta del dht11 perchè è lento e potrebbe non essere pronto quando viene interrogato restituendo valori Hpocchia smiley e vedo che nello sketch richiami la lettura più volte
Leggi i valori all'inizio dello sketch e salvali in una variabile, e tenta di confrotare valori dello stesso tipo , qui vedo che confronti float e int.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

grazie per la info...

i termini di codice come si traduce cio' che ha detto? :S

grazieeeee
Logged

Pages: [1]   Go Up
Jump to: