arduino rileva umidità e temperatura 5 minuti poi non più

Il displsy è uno strumento di visualizzazione alternativo al serial monitor; per funzionare ha bisogno di una libreria specifica (che devi integrare nello sketch), di una dichiarazione dei pin collegati ad Arduino (ti servono al minimo 6 fili per i segnali + l'alimentazione), poi al posto dei comandi normali del Serial Monitor metti quelli specifici per il display.
Visto che hai risolto il problema del sensore ti basta seguire quanto scritto nel PlayGround a proposito del display LCD (va benissimo la versione a 4 bit) e completi rapidamente.

Nel Reference trovi la spiegazione della libreria LiquidCrystal:

Aprendo i vari link trovi anche lo schema di collegamento del display.

Ok ho collegato il display e funziona dato che i test del displaiy caricati funzionano tutti, ora il problema è fondere insieme il tutto, ossia la libreria DHT che legge dal sensore e la LiquidCrystal :fearful:

Un esempio funzionante con magari le spiegazioni è chiedere troppo?

Sì, è chiedere troppo perché internet è pieno di esempi e basta cercarli... ]:slight_smile:
tipo questo:
http://www.geeetech.com/wiki/index.php/Electric_thermometer_by_using_DHT11_sensor_module

leo72:
Sì, è chiedere troppo perché internet è pieno di esempi e basta cercarli... ]:slight_smile:
tipo questo:
http://www.geeetech.com/wiki/index.php/Electric_thermometer_by_using_DHT11_sensor_module

Ok non lo faccio più :zipper_mouth_face:

Allora ho provato a fondere insieme le due librerie ragionando come mi avete detto sopra e mi è venuto fuori questo codice

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

#include "DHT.h"
#include <LiquidCrystal.h>
#define DHTPIN 8     // what pin we're connected to

// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11 
#define DHTTYPE DHT11   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
  Serial.begin(9600); 
  Serial.println("DHTxx test!");
 lcd.begin(16, 2);
  dht.begin();
}

void loop() {
  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  // check if returns are valid, if they are NaN (not a number) then something went wrong!
  if (isnan(t) || isnan(h)) {
    Serial.println("Failed to read from DHT");
  } else {
    Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(t);
    Serial.println(" *C");
     lcd.setCursor(0,0);
  lcd.print("Temp= ");
  lcd.print(t);
  lcd.print(" *C");
  lcd.setCursor(0,1);
  lcd.print("Humidity= ");
  lcd.print(h);
  lcd.print("% ");
  }
}

E sono 10 minuti che gira e sembra funzionare anche XD
Solo una cosa mi restituisce i valori con il punto decimale esempio Temp= 21.00 dato che il DHT11 non rileva tale valore decimale come faccio a toglierlo sia dalla temperatura che dall'umidità?
Mi sembra di aver letto chè si possa specificare il valore decimale delle risposte ma non ho capito bene come sul codice, grazie

Bravo, complimenti! Come vedi riuscire a risolvere i problemi da solo dà maggiori soddisfazioni ed aiuta ad imparare :wink:

Siccome h e t sono definiti come float, puoi usare lcd.print(t,0) e lcd.print(h,0) per non far visualizzare i decimali.

Reference --> Serial.print() - Arduino Reference

Syntax
Serial.print(val)
Serial.print(val, format)

Parameters
val: the value to print - any data type
format: specifies the number base (for integral data types) or number of decimal places (for floating point types)

Mi associo ai complimenti di Michele.
Altra cosa.. Non togliere tutti e due i decimali. Perchè Il DHT11 e come il DHT22 ha un decimale di precisione, quindi modifica il comando in questo modo: lcd.print(t,1) e lcd.print(h,1)

Ciao

Ciao, nel mio caso il decimale è presente ma sempre pari a zero anche modificando lo sketch come suddetto.
Qualcuno in rete sostiene che con il DHT11 non funziona il decimale ma in un video su Youtube c'è un termometro LCD con DHT11 che il decimale lo visualizza sul display.
Com'è la faccenda? :roll_eyes:

Dal datasheet risulta che il DHT11 ha la risoluzione dell'1% quindi non ha decimale.
Si può però effettuare un campionamento di n letture e poi fare la media che avrò almeno una cifra decimale significativa.

Sinceramente io sapevo che la famiglia DHT (11 e 22) avevano i decimali. :roll_eyes:

Il DHT21 e DHT22 hanno la parte decimale. Il DHT11 no.
Anche nelle librerie è specificato bene.
Guarda questa parte di codice: (GitHub - adafruit/DHT-sensor-library: Arduino library for DHT11, DHT22, etc Temperature & Humidity Sensors)

float DHT::readTemperature(bool S) {
  float f;

  if (read()) {
    switch (_type) {
    case DHT11:
      f = data[2];
      if(S)
      	f = convertCtoF(f);
      	
      return f;
    case DHT22:
    case DHT21:
      f = data[2] & 0x7F;
      f *= 256;
      f += data[3];
      f /= 10;
      if (data[2] & 0x80)
	f *= -1;
      if(S)
	f = convertCtoF(f);

      return f;
    }
  }
  Serial.print("Read fail");
  return NAN;
}

float DHT::convertCtoF(float c) {
	return c * 9 / 5 + 32;
}

float DHT::readHumidity(void) {
  float f;
  if (read()) {
    switch (_type) {
    case DHT11:
      f = data[0];
      return f;
    case DHT22:
    case DHT21:
      f = data[0];
      f *= 256;
      f += data[1];
      f /= 10;
      return f;
    }
  }
  Serial.print("Read fail");
  return NAN;
}

Alla richiesta dei dati il sensore spedisce 4 byte, umidità intero, umidità decimale, temperatura intero, temperatura decimale inserite in un vettore.
Il DHT11 legge solo la parte intera dei due dati (data[0] per l'umidità e data[2] per la temperatura), mentre gli altri 2 modelli leggono entrambi i byte e restituiscono un solo numero formato da intero e parte decimale.

Come non detto.. hai ragione tu... Il DHT22 ha un decimale, il DHT11 non ha decimali... avevo letto male un forum. Io normalmente uso il DHT22
Mi son sbagliato io... :*