.: HosiriS :.

Informatica e non solo

Gestiamo un sensore DHT22 con Arduino

Posted by hosiris su novembre 7, 2011

Tempo fa ho descritto una metodologia che ci permettesse di sfruttare un sensore di temperatura per ottenere delle statistiche sull’andamento di questo parametro.
Al fine di costruire una stazione meteo completa, ho modificato il progetto precedente utilizzando un sensore DHT22 che trova integrati sia un sensore di temperatura che un sensore di umidità.

Comunque questo sarà un progetto temporaneo.
In un prossimo articolo mostrerò come utilizzare un sensore di pressione ed in conclusione scriverò un bel tutorial completo di tutte le parti, guardando il sistema nel suo insieme.
Reputo comunque importanti questi passaggi intermedi perché, secondo me, permettono una maggiore comprensione. Ma passiamo alla parte interessante.

Come sempre diamo una bella letta al datasheet, così da poter creare il circuito di adatto:

A questo punto sarà necessario scaricare la libreria del sensore per Arduino: Libreria DHT22.
Una volta preparato tutto possiamo passare alla scrittura del codice:


#include 
#define DHT22_PIN 2
DHT22 myDHT22(DHT22_PIN);

void setup(void)
{
  Serial.begin(9600);
}

void loop(void)
{ 
  DHT22_ERROR_t errorCode;
  delay(5000);
  Serial.print("Requesting data...");
  errorCode = myDHT22.readData();
  switch(errorCode)
  {
    case DHT_ERROR_NONE:
      Serial.print("Got Data ");
      Serial.print(myDHT22.getTemperatureC());
      Serial.print("C ");
      Serial.print(myDHT22.getHumidity());
      Serial.println("%");
      break;
    case DHT_ERROR_CHECKSUM:
      Serial.print("check sum error ");
      Serial.print(myDHT22.getTemperatureC());
      Serial.print("C ");
      Serial.print(myDHT22.getHumidity());
      Serial.println("%");
      break;
    case DHT_BUS_HUNG:
      Serial.println("BUS Hung ");
      break;
    case DHT_ERROR_NOT_PRESENT:
      Serial.println("Not Present ");
      break;
    case DHT_ERROR_ACK_TOO_LONG:
      Serial.println("ACK time out ");
      break;
    case DHT_ERROR_SYNC_TIMEOUT:
      Serial.println("Sync Timeout ");
      break;
    case DHT_ERROR_DATA_TIMEOUT:
      Serial.println("Data Timeout ");
      break;
    case DHT_ERROR_TOOQUICK:
      Serial.println("Polled to quick ");
      break;
  }
}

Un semplicissimo tratto di codice in cui non facciamo altro che leggere dal pin dati del sensore e restituire i valori sul monitor seriale.
Nel seguente video è possibile vedere il risultato:

Buon divertimento!

12 Risposte to “Gestiamo un sensore DHT22 con Arduino”

  1. […] Gestiamo un sensore DHT22 con Arduino ::: HosiriS […]

  2. Francesco said

    Ciao ma da quanto è la resistenza nell’esempio?

  3. Francesco said

    ho messo una resistenza da 10 kohm mi legge lla temp e l’umidità ma solo ogni tanto…le altre volte mi dà sync timeout!O_o

    • hosiris said

      Ciao,
      la resistenza è da 4.7kOhm.
      Anceh io ho avuto il problema del timeout, puoi risolvere giocando con i delay, quelli che ho messo nell’esempio rispondevano bene con il mio sistema.

      • Francesco said

        in che senso rispondevano bene con il tuo sistema? 5000ms so sempre 5000ms! e poi la tua resistenza ha l’ultimo colore giallo che va corretto a rosso per avere il valore di 4.7 k….così sono 470 K ;)….cmq grazie mille per la risposta e a presto!

      • hosiris said

        Si hai ragione, è normale che 5s so sempre gli stessi, magari ci ritardi piccolissimi sulle trasmissioni di cui non teniamo conto e che fanno la differenza. Scusa per la confusione ma non mi ero accorto di aver sbagliato il valore della resistenza nello schema, cercherò di correggere al più presto.

  4. Francesco said

    quindi non ho cmq capito come e in che senso “giocare” con il delay!

  5. federica said

    come potrei questo prolema? case DHT_ERROR_ACK_TOO_LONG:

    • hosiris said

      Ciao, anche io ho avuto qualche volta lo stesso problema. Per risolvere dovresti apportare una modifica alla libreria DHT22. All’interno del codice devi cercare la linea in cui viene gestito quell’errore (è sufficiente fare una ricerca con la stringa DHT_ERROR_ACK_TOO_LONG) e aumentare il tempo.

      • federica said

        no credo sia perchè avevo il sensore collegato al contrario perchè nell’imagine non è chiaro qual è il fronte e quale i retro

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

 
%d blogger cliccano Mi Piace per questo: