Usare il sensore DHT11 con Arduino

postato in: Arduino, Articoli | 0

Arduinolcd-HD44780

 

Molte volte, di inverno, non riusciamo mai a regolarci con la temperatura di casa, alziamo il riscaldamento, e poi ci dimentichiamo di abbassarlo, consumando ovviamente di più. Inoltre è sempre interessante monitorare la temperatura e l'umidità presenti in casa. Per tenere sotto controllo questi parametri è necessario comprare un qualche dispositivo elettronico, ma per fortuna ci viene in contro anche Arduino con il sensore DHT11 per la misurazione di temperatura e umidità.


Arduino direi che ormai lo conosciamo, se per caso non sapete cosa sia vi consiglio di leggere questo nostro post.

Vediamo invece più in dettaglio il sensore DHT11.

 

Jpeg

 

Esso ha 4 pin, il primo, quello più a sinistra nella foto, deve essere collegato all'alimentazione, da 3.3V a 5V. Il secondo pin serve per trasmettere i dati relativi sulla temperatura e sull'umidità. Il pin numero 3 non serve a nulla in quanto non è collegato. Infine il pin 4 serve per collegarlo al GND.

Se volete approfondimenti per quanto riguarda il sensore, vi consiglio la lettura del suo datasheet, troverete una descrizione completa e tutte le sue caratteristiche.

Ma procediamo a collegare il sensore al nostro Arduino. Il primo pin l'ho collegato all'uscita di 5V di Arduino, il secondo al pin digitale numero 3 infine il quarto pin l'ho collegato al GND di Arduino.

 

 

Jpeg

Jpeg
Una volta fatto il collegamento apriamo l'IDE di Arduino, e iniziamo a scrivere il codice per testare il sensore. Prima però dobbiamo procurarci la libreria per il sensore DHT11, che potete tranquillamente scaricare da questo link.

Una volta scaricata, dobbiamo includerla nel nostro progetto, quindi apriamo l'ide, andiamo su Sketch>Include Library>Add .ZIP Library… ci clicchiamo sopra e aggiungiamo il file zip che abbiamo scaricato dal link precedente.
Ora andiamo su Sketch>Include Library>dht11 e ci clicchiamo sopra, così la libreria sarà inclusa nel nostro Sketch.

Procediamo ora con la scrittura del sorgente, di seguito vi incollo quello che ho scritto per testarlo:

#include <dht11.h>

int pin_sensore = 3;
dht11 DHT;
void setup(){
   Serial.begin(9600);
}

void loop(){
   int ris = DHT.read(pin_sensore);
   switch(ris){
      case DHTLIB_OK:
         stampaDati();
         break;
      case DHTLIB_ERROR_CHECKSUM:
         Serial.println("Checksum error");
         break;
      case DHTLIB_ERROR_TIMEOUT:
         Serial.println("Time out error");
         break;
      default:
         Serial.println("Errore sconosciuto");
   }delay(10000);
}

void stampaDati(){
   Serial.print("Umidità: ");
   Serial.print(DHT.humidity,1);
   Serial.print("%tTemperatura: ");
   Serial.print(DHT.temperature,1);
   Serial.println(" C");
}


Ora commentiamo un po' il codice. Nelle prime righe dichiariamo la variabile intera “pin_sensore” e indica il pin digitale che andremo ad usare su Arduino per ricevere i dati dal sensore. Poi dichiariamo una variabile “DHT”, un oggetto in cui all'interno troviamo la funzione per leggere i dati, e le variabili in qui sono salvati i dati.

Nella funzione “void setup()” indichiamo la velocità di trasmissione della porta seriale. Da notare che in questa funzione non è presente la solita chiamata a “pinMode()” per impostare il pin in modalità INPUT o OUTPUT, essa non è presente perché viene già chiamata dalla libreria “dht11”

Nella funzione “void loop()”, all'inizio dichiariamo la variabile “ris” che conterrà il risultato letto dalla funzione “read” del sensore. Questo intero può assumere tre valori: DHTLIB_OK (che sta per 0), DHTLIB_ERROR_CHECKSUM (che sta per -1) e infine DHTLIB_ERROR_TIMEOUT (che sta per -2).
Nel blocco “switch” andiamo a verificare quale dei 3 valori è presente all'interno della variabile “ris”, nel caso di DHTLIB_OK chiamiamo la funzione “stampaDati()”, e stampiamo i dati letti, che sono all'interno dell'oggetto “DHT” rispettivamente nelle variabili “humidity” e “temperature”, essi verranno inviati al computer tramite la porta seriale, attraverso l'ausilio della funzione “Serial.print”.

Invece, gli altri due valori nel blocco “switch” stampano semplicemente un messaggio d'errore, sempre inviandolo al computer con la porta seriale.

Alla fine della funzione “void loop()” troviamo la funzione “delay(10000)”, e non fa altro che ritardare il loop di 10 secondi.

Per testarlo non dobbiamo fare altro che caricare il programma su Arduino, e successivamente aprire il monitor seriale per vedere i dati che ci invia. Vi ricordo che per aprire il monitor seriale dovete andare su Strumenti>Monitor seriale o in alternativa cliccare contemporaneamente CTRL + MAIUSC + M.

CONCLUSIONI
Ora avete le basi per costruire un piccolo termostato con il comodissimo sensore DHT11.

 

FONTI:
- Immagini Joel Garia;

 

Dottore in Informatica. Da sempre appassionato di Linux, reti informatiche, sicurezza e, in modo amatoriale, all'elettronica. Il mio intento è quello di trasmettere le mie conoscenze ad altri appassionati.

Lascia un commento