Tutorial 1 – Misuratore di Umidita’ e di temperatura con Arduino

Misuratore di Umidita’ e di temperatura

Iniziamo una serie di tutorial imperniati sulla scheda Arduino. In questo primo tutorial creeremo un misuratore di Umidita’ e di temperatura

Il modulo DHT11 e’ un sensore composito che combina, in un sol corpo, un termometro ed un igrometro. Esistono parecchi moduli della serie DHT ed il modulo 11, trattato in questo esercizio, e’ il piu’ semplice ed il piu’ economico. Il modulo misura i valori di umidita’ e temperatura e, attraverso un microcontrollore ad 8 bit in esso racchiuso, li trasforma in segnali digitali. Si tratta di quindi di un componente evoluto, composto da un sensore di umidita’ di tipo resistivo, un sensore di temperatura di tipo NTC (Negative Temperature Coefficient – un sensore di analogico che diminuisce l’impedenza di una resistenza all’aumentare della temperatura) e da un microcontrollore. Questo sensore, su sollecitazione di Arduino, trasmette sul pin S (signal) un treno di quaranta bit:

  • 8 bit per indicare la parte intera del valore di umidita’
  • 8 bit per indicare la parte decimale dell’umidita’
  • 8 bit per indicare la parte intera della temperatura
  • 8 bit per indicare la parte decimale della temperatura
  • 8 bit per indicare il numero di controllo (per validare il valore dei precedenti 32 bit) La gestione del segnale e’ ovviamente a carico di una libreria (la DHT.h) che deve essere scaricata ed installata prima della compilazione del programma.

Per scaricare ed installare la libreria:

  • Aprire questo link: Arduino-master
  • Scompattare il file e ottenere una cartella con decine di librerie, tra cui la libreria DHTlib che a sua volta contiene una cartella example, e tre files: dht.cpp e dht.h ed un readme
  • Rinominare in “DHT” la libreria “DHTlib”
  • Installare la libreria DHT nella libreria di arduino (IDE->sketch->importa libreria->add library ->indirizzo della nuova libreria DHT->apri)
  • Chiudere e riaprire l’IDE per rendere operativa la libreria
  • Compilare il programma presente in IDE->file->esempi_>DHT->DHT11_test per verificare l’avvenuta installazione della libreria. Se tutto e’ andato bene si puo’ procedere alla esecuzione di questo esercizio che misura umidita’ e temperatura e li riporta su di un display LCD con driver I2C.

In assenza del display lcd e’ comunque possibile leggere umidita’ e temperatura anche sul sul monitor seriale.

Schema

Schema Arduino misuratore di temperatura e di umiditá

Schema Arduino misuratore di temperatura e di umiditá

Materiali

  • Un modulo DHT11 montato su basetta keyes
  • Un display lcd con driver LCMI602 (opzionale)
  • Un po’ di cavetteria
Modulo DHT11

Modulo DHT11

Programma

#include // richiama la libreria DHT

/* le prossime quattro righe sono da cancellare se non si dispone di un display lcd con driver LCMI – Next four lines must be erased if you don’t have a 1602 lcd dipslay with a I2C driver */

#include // libreria wire presente, di default, nell’IDE

#include // libreria di gestione del display lcd

//…….addr en,rw,rs,d4,d5,d6,d7,bl,blpol LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

// definisce la tipologia del display

dht DHT;
int chk;

#define DHT11_PIN 4

void setup()
{

lcd.begin(16, 2); // cancella se no lcd – erase if no lcd
Serial.begin(9600); // inizializza il monitor seriale

}

void loop()
{

Serial.print(“DHT11, \t”);
int chk = DHT.read11(DHT11_PIN); // legge i valori forniti dal sensore
switch (chk) {

case DHTLIB_OK:
Serial.println(“OK,\t”);
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.println(“errore di trasmissione,\t”);
break;

case DHTLIB_ERROR_TIMEOUT:
Serial.println(“Timeout,\t”);
break;

default:

Serial.println(“errore sconosciuto,\t”);
break;

}

//

// ************* display dei dati su lcd – display data on lcd ********************

lcd.setCursor(0, 0); // cancella se no lcd – erase if no lcd

lcd.print(“Tem:”); // cancella se no lcd – erase if no lcd

lcd.print(DHT.temperature,1); // cancella se no lcd – erase if no

lcd lcd.print(” C”); // cancella se no lcd – erase if no lcd

lcd.setCursor(0, 1); // cancella se no lcd – erase if no lcd

lcd.print(“Hum:”); // cancella se no lcd – erase if no lcd

lcd.print(DHT.humidity,1); // cancella se no lcd – erase if no lcd

lcd.print(” %”); // cancella se no lcd – erase if no lcd

//

// ********* display dei dati su monitor seriale display data on serial monitor *******

Serial.print(“Temperatura: “);

Serial.print(DHT.temperature,1);

Serial.println(” C “);

Serial.print(“Umidita: “);

Serial.print(DHT.humidity,1);

Serial.println(” %”);

delay(2000); // attende due secondi prima di controllare nuovamente umidita’ e temperatura

}