In questo tutorial scoprirai l’interessante sensore DHT11.
Sarà il sensore che utilizzerai per realizzare il tuo primo device LoRaWan.
Prima di prendere il tutto un oggetto connesso ad Internet tramite LoRaWan, è opportuno imparare ad utilizzare e leggere questo sensore.
Il DHT11 è il componente più economico della serie di sensori ambientali chiamati DHT.
Sono sensori digitali relativamente lenti, ma piuttosto precisi, che consentono di misurare temperatura e umidità relativa dell’aria.
Ti consigliamo di acquistare il sensore come componente singolo, non montato su una scheda PCB.
Avrai anche bisogno di una resistenza di valore compreso tra 4.7 e 10 KOhm.
Se dovessi acquistare un sensore già montato su scheda PCB, probabilmente il resistore è già incluso nella scheda.

Lo schema del circuito presentato nel video è il seguente.

La libreria Adafruit mostrata nel video rende semplice l’utilizzo del sensore che ha un suo semplice protocollo seriale di comunicazione.
Puoi trovare tutte le informazioni sul datasheet del sensore, che puoi scaricare tramite il pulsante che segue.
Il codice dello sketch mostrato nel video è il seguente.
#include "DHT.h"
#define DHTPIN 2 // Pin Digitale connesso al sensore
// La libreria Adafruit gestisce tutti i sensori DHT
// per cui uso una macro per parametrizzare il tipo di sensore collegato
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Creo l'oggetto DHT e lo configuro
DHT dht(DHTPIN, DHTTYPE);
void setup() {
// inizializzo la comunixazione seriale
// e stampo il messaggio di benvenuto
Serial.begin(9600);
while(!Serial); // attendo l'apertura del terminale seriale
Serial.println("Test del sensore DHTxx.");
// inizializzo il sensore
dht.begin();
}
void loop() {
// Il sensore è attivo dopo almeno un secondo.
// attendo alcuni secondi
delay(5000);
// La lettura dell'umidità impiega circa 250 millisecondi
// Il valore letto può essere vecchio anche di 2 secondi (il DHT è un sensore piuttosto lento)
float umidita = dht.readHumidity();
// leggo la temperatura in gradi Celsius (è il default)
float temperatura = dht.readTemperature();
// Verifico se le letture sono andate a buon fine
// in caso negativo termino la funzione loop.
if (isnan(umidita) || isnan(temperatura)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
// Calcolo l'indice di calore in gradi Celsius (isFahreheit = false perché il default sarebbe in gradi Farenheit)
float hic = dht.computeHeatIndex(temperatura, umidita, false);
Serial.print("Umidità: ");
Serial.print(umidita);
Serial.print("% Temperatura: ");
Serial.print(temperatura);
Serial.print("°C Indice di Calore: ");
Serial.print(hic);
Serial.println("°C ");
}
L’interpretazione del programma non dovrebbe presentare problemi particolari, alla luce delle competenze che hai maturato fino a questo punto.
L’unica istruzione nuova, dovrebbe essere la isnan(), si tratta di una istruzione del linguaggio C++ che permette di verificare se il contenuto di una variabile è effettivamente un numero. isnan, vuol dire letteralmente is not a number.