DHT22 Quale codice ?

Salve a tutti,
dopo aver testato per un po' il DHT11, ho acquistato la versione DHT22, che dovrebbe essere più precisa. Purtroppo, cercando su Internet non sono riuscito a trovare un codice che funzionasse e sopratutto, se è necessaria la presenza di una resistenza da 10K. Qualcuno ha avuto già esperienza con questo sensore ?

Ciao... mi sembra strano che tu non abbia trovato niente... guarda su www.adafruit.com
comunque usi la stessa libreria del DHT11 e la resistenza in pull-up da 10k

Impossibile che tu non abbia trovato nulla... :wink:

Quasi sicuramente avrai usato la libreria di Lady Ada. commenta il define del dht 11 e Decommenta il define di dht22. Altrimenti segui i link degli altri arduinisti! :wink:

Grazie per le risposte. Il codice riportato, è lo stesso che ho utilizzato ieri sera e che non funziona. Eccolo:

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

#include "DHT.h"

#define DHTPIN 2     // what pin we're connected to

// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11 
#define DHTTYPE DHT22   // 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);

void setup() {
  Serial.begin(9600); 
  Serial.println("DHT22 test!");
 
  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");
  }
}

Come output ho 0°, mentre se utilizzo il DHT11, mi legge una temperatura, accettabile, anche se è sbagliata di qualche grado. Ho collegato il tutto correttamente (Arduino and DHT22 on Breadboard | Fritzing diagram of a DHT2… | Flickr). Inoltre, con il tester, ho misurato e c'è tensione tra il data il ground, quindi il sensore funziona.

E' sbagliato lo schema.
La resistenza non è in serie ma è una pull-up.

Questo è giusto.

In pratica la resistenza va a ponte tra il piedino 5V e data.

E' sbagliato lo schema.
La resistenza non è in serie ma è una pull-up.

mi consolo... non sono l'unico che invecchia...

PaoloP:
E' sbagliato lo schema.
La resistenza non è in serie ma è una pull-up.

Questo è giusto.

In pratica la resistenza va a ponte tra il piedino 5V e data.

Grazie per la risposta. Ho provato a mettere la resistenza in pull-up (in pratica è in parallelo al PIN1 e PIN2). Però il problema rimane e sopratutto non riesco a capire come possa segnare 0, se c'è una tensione.

Il sensore è digitale non analogico e usa il protocollo 1-wire.
Dovresti usare un analizzatore di stati logici per verificare il passaggio di dati dal sensore all'Arduino, con un semplice tester non puoi.

PaoloP:
Il sensore è digitale non analogico e usa il protocollo 1-wire.
Dovresti usare un analizzatore di stati logici per verificare il passaggio di dati dal sensore all'Arduino, con un semplice tester non puoi.

Grazie per l'osservazione. Vorrei essere sicuro sul corretto posizionamento della resistenza. é corretto mettere la resistenza da 10K in parallelo con il sensore che a sua volta è ancora in parallelo tra il 5V e il cavo che va alla porta A0 ?

La resistenza va messa come la figura.
Non ho capito cosa intendi per parallelo.

PaoloP:
La resistenza va messa come la figura.
Non ho capito cosa intendi per parallelo.

Grazie come sempre per la risposta. MI puoi confermare che è corretta la posizione ?

Si, è corretta sia la posizione che il valore. :wink:

PaoloP:
Si, è corretta sia la posizione che il valore. :wink:

Non ero sicuro del valore della resistenza, ma il tester me l'ha confermato e ho messo quella. Comunque mi da errore di lettura e poi mi scrive umidità zero, come la temperatura. Mentre se collego il DHT11 con lo stesso sorgente, per provare, mi da dei valori. Secondo te a cosa è dovuto ? Può essere difettoso il sensore, oppure può essere qualcos'altro ?

Quindi hai tutti e due i sensori?
Ricordati di cambiare il #define per l'uno o per l'altro.

PaoloP:
Quindi hai tutti e due i sensori?
Ricordati di cambiare il #define per l'uno o per l'altro.

Si ho entrambi i sensori. Se lascio la define per il dht22 e lascio quel sensore mi dice errore di lettura e mi legge valori nulli. Con il medesimo programma uso il Dht11 e mi da valori, sballati ma sono diversi da zero. Mentre se imposto la define per il dht11 e lascio collegato questo sensore, la temperatura è corretta. Come mai ho problemi con il dht22 ?

Che sia guasto?

Ragazzi uso questo topic per non aprirne un altro. Dunque ho un DHT22 (AM2302) collegato per bene con la R da 10Kohm. Quando avvio lo sketch e apro la stampa seriale ottengo un valore di temperatura congruo per le giornate che stiamo avendo (circa 30°C), mentre per l'umidità ottengo sempre un improbabile 1%.
E' scassato vero, o posso verificare qualcosa?

Questo è lo sketch:

#include "DHT.h"
 
DHT dht;
 
void setup()
{
  Serial.begin(9600);
  Serial.println();
  Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)");
 
  dht.setup(2); // data pin 2
}
 
void loop()
{
  delay(dht.getMinimumSamplingPeriod());
  float humidity = dht.getHumidity();
  float temperature = dht.getTemperature();
  
  Serial.print(dht.getStatusString());
  Serial.print("\t");
  Serial.print(humidity);
  Serial.print("\t\t");
  Serial.print(temperature);
  Serial.print("\t\t");
  Serial.println(dht.toFahrenheit(temperature), 1);
}

Ovviamente prima di scrivere ho provato anche altre librerie. Sempre la stessa solfa. Attendo input.
Grazie come sempre!

Prova con questo nei define
#define DHTPIN 2 //collegato al pin 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
Questo nel setup
dht.begin();
Questo nel loop
dht.readHumidity()
Per quanto riguarda la lettura dell umidità del sensore
Se non ti funziona domani ti passo la libreria che uso io con un test pure :wink: ( sono da Cell adesso)

P.S. Ti consiglio di provare questa libreria che ti metto in allegato, con il suo esempio. Estrai la cartella dal file .zip

dht.zip (7 KB)