DHT22 AM2302 Sensore Temperatura Umidità

Ultima modifica il 1 Giugno 2022 by Adriano

Il sensore di temperatura e umidità DHT22-AM2302 utilizza al suo interno un sensore di umidità capacitivo e un termistore per misurare l’aria circostante, e comunica le sue misurazioni tramite un segnale digitale sul pin dei dati. E’ simile al modello DTH11, ma fornisce misurazioni più accurate.

DHT22 AM2302 Sensore Temperatura Umidità

Caratteristiche

Il sensore di temperatura e umidità DHT22-AM2302,  è piuttosto semplice da utilizzare, ma richiede un attenta sincronizzazione per intercettare a dovere i dati.  Un suo lato negativo può essere che potete avere nuovi dati solo ogni 2 secondi, in altri termini, ogni volta che leggete dei dati, questi potrebbero essere vecchi di 2 secondi.
D’altro canto, il DHT22, versione più costosa del DTH11 presenta specifiche migliori, come potete vedere dalla tabella sottostante.

DHT11 DHT22
Range temperatura 0÷50°C / ± 2°C - 40÷125 °C / ± 0,5°C
Range umidità 20÷40% / ± 5% 0÷100% / ±2,5%
Campionamento 1 Hz (una lettura al secondo) 0,5 Hz (una lettura ogni 2 secondi)
Dimensioni 15x12x5,5 mm 15.1x25x7.7 mm
Range alimentazione 3-5V 3-5V
Max assorbimento 2,5 mA 2,5 mA

Come funziona il sensore

Il componente di rilevamento dell’umidità è formato da due elettrodi con un substrato che trattiene l’umidità (un polimero di plastica conduttivo o di sale) tra loro. Gli ioni vengono rilasciati dal substrato quando il vapore acqueo viene assorbito da esso, il che a sua volta aumenta la conduttività tra gli elettrodi. La variazione di resistenza tra i due elettrodi è proporzionale all’umidità relativa. Una maggiore umidità relativa diminuisce la resistenza tra gli elettrodi, mentre una minore umidità relativa aumenta la resistenza tra gli elettrodi.
Sebbene si utilizzi una singola linea per inviare i dati, il formato non è compatibile con Dallas One Wire! Infatti, se avete bisogno di più sensori DHT22, ognuno deve avere il proprio pin dati riservato sul microcontrollore. Per utilizzarlo potete scaricare la libreria scritta da Adafruit e seguite il tutorial.

DHT22 AM2302 Sensore Temperatura Umidità

La temperatura viene invece misurata tramite un termistore NTC, il termistore è un resistore termico, un resistore che cambia la sua resistenza con la temperatura. Tecnicamente, tutti i resistori sono termistori – la loro resistenza cambia leggermente con la temperatura – ma la variazione è solitamente molto piccola e difficile da misurare.
I termistori invece sono realizzati in modo che la resistenza cambi drasticamente con la temperatura in modo che possa essere di 100 ohm o più di variazione per grado.
Il termine “NTC” significa “coefficiente di temperatura negativo”, il che significa che la resistenza diminuisce con l’aumentare della temperatura.

Dove trovare il sensore

Il Modulo Sensore di Temperatura e Umidità DHT22  potrà essere acquistato presso:

Il sito Homotix, codice articolo HMTDHT22M. Ricordo che inserendo il codice di sconto dedicato agli utenti del sito adrirobot avranno uno sconto del 3%.

Preso il sito Futura Elettronica, è disponibile sia il modulo montato, codice articolo 8300-MODDHT22, sia il solo sensore che potrà essere utilizzato  nelle proprie applicazioni. In questo caso il codice articolo è 2846-DHT22.

Come si presenta il sensore

Il sensore è formato da un contenitore plastico di colore bianco su cui è presente una griglia. Dal corpo fuoriescono  4 pin, spaziati di 2,54 mm. (pin 1 VCC, pin 2 DATA pin 3  NC pin 4 GND)

Versioni del modulo

Per un più semplice utilizzo, magari su una breadboard, il sensore viene montati su un piccolo PCB. Il modulo è prodotto da varie aziende e può essere trovato in varie forme. Sotto alcune foto

Schema elettrico del modulo

Lo schema elettrico del modulo compreso di PCB, è stato realizzato con il programma EasyEDA e può essere scaricato a questo link.  Per informazioni sul programma EasyEDA,  leggete questo articolo.

Come abbiamo visto il sensore dispone di 4 pin anche se solo tre sono collegati internamente.

  • 1 VCC, è quello di alimentazione può essere collegato ad una fonte compresa tra  3-5V.
  • 2 DATA fornisce l’input dei dati del vostro microcontrollore
  • 3  NC, non  è collegato
  • 4 GND è da connettere alla massa

Fanno poi parte del circuito una resistenza da 4,7k-10k, con funzione di pull up dal pin dati verso VCC. e un condensatore da 100 nF per livellare la tensione di alimentazione.

Libreria di gestione

Per facilitare l’uso del sensore è indispensabile utilizzare una libreria specifica, in questo caso utilizzeremo la libreria DHT di Adafruit, che è valida si per il modello DTH22 sia per il modello DHT11.
Per installarla , è sufficiente andare in Sketch > #include libreria > Gestione libreria , quindi inserite nel campo di ricerca “DHT” e selezionate la libreria fornita da  Adafruit.  Adesso nella versione 1.4.2
Vedete anche l’articolo Arduino – Tutorial, come installare una libreria

Link libreria

Test base del sensore

Per testare semplicemente il sensore, basterà montare il circuito riportato sotto, per fare questo occorrono:

 

Una volta caricato lo sketch, attivando il monitor seriale, se non avete commesso errori, vi appariranno i dati misurati.  Ricordarsi di non scendere come tempo di campionamento sotto i due secondi.

/*####################################################################
  FILE: test_-DHT22.ino
  VERSION: 1.0
  Test del sensore di umidità e temperatura tipo DHT22-AM2302

  Creato il 10/4/2021 da Adriano Gandolfo
  Sito web https://www.adrirobot.it
  This example code is in the public domain.
  #################################################################### */

// Impostazione del sensore DHT22-AM2302
#include "DHT.h"
#define DHTPIN 2        // Pin a cui è collegato il sensore
#define DHTTYPE DHT22    // Indicazione del modello del sensore
DHT dht(DHTPIN, DHTTYPE);

#include <SPI.h>

void setup()   {
  Serial.begin(9600);
  Serial.println("Test sensore DHT22-AM2302");
  dht.begin();
}

void loop()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  Serial.print("Umidita' (%): ");
  Serial.print(h, 1);
  Serial.print(" -  ");
  Serial.print("Temperatura (C): ");
  Serial.println(t, 1);

  delay (2000); // Pausa di 2 secondi
}

Visualizzazione dati su display

Nello sketch precedente la lettura era effettuata tramite il monitor seriale. In questo caso i dati saranno mostrati su un display OLED montato sul Multi test shield, vedere articolo Multi test shield per moduli e sensori compatibile Arduino
Sullo shield per testare i sensori Arduino sono disponibili molti connettori che risultano già opportunamente collegati con le porte digitali o analogiche di Arduino.

Sotto è riportato lo schema equivalente dei collegamenti

 

DHT22 AM2302 Sensore Temperatura Umidità

In realtà tutti sarà limitato a montare il display e i sensore

DHT22 AM2302 Sensore Temperatura Umidità

DHT22 AM2302 Sensore Temperatura Umidità

Una volta caricato lo sketch, dopo un messaggio iniziale, saranno mostrati i valori letti dal sensore

/*####################################################################
  FILE: test_shield-DHT22.ino
  VERSION: 1.0
  Test del sensore di umidità e temperatura tipo DHT22-AM2302

  Creato il 10/4/2021 da Adriano Gandolfo
  Sito web https://www.adrirobot.it
  This example code is in the public domain.
  #################################################################### */

// Definizione dei pin di collegamento
#define sclk 13
#define mosi 11
#define cs   10
#define rst  9
#define dc   8

// Impostazione del sensore DHT22-AM2302
#include "DHT.h"
#define DHTPIN 17        // Pin a cui è collegato il sensore
#define DHTTYPE DHT22    // Indicazione del modello del sensore
DHT dht(DHTPIN, DHTTYPE);

// Definizione dei colori
#define BLACK           0x0000
#define BLUE            0x001F
#define RED             0xF800
#define GREEN           0x07E0
#define CYAN            0x07FF
#define MAGENTA         0xF81F
#define YELLOW          0xFFE0
#define WHITE           0xFFFF

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1331.h>
#include <SPI.h>

Adafruit_SSD1331 display = Adafruit_SSD1331(cs, dc, rst);

void setup()   {
  Serial.begin(9600);
  display.begin();
  dht.begin();

  // Messaggio iniziale
  display.fillScreen(BLACK);
  display.setTextSize(1);
  display.setTextColor(BLUE);
  display.setRotation(2); //Ruota display
  display.setCursor(0, 0);
  display.println("www.adrirobot.it");
  display.println("");
  display.setTextColor(GREEN);
  display.println("Multitest shield");
  delay(2000);
  display.fillScreen(BLACK);
  display.setTextColor(YELLOW);
  display.setCursor(0, 0);
  display.println("   TEST MODUL0  ");
  display.println("");
  display.setTextColor(CYAN);
  display.println("  DHT22-AM2302 ");
  display.println(" umidity sensor ");
  display.println("");
  delay (200);
}

void loop()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  Serial.println("\n");
  Serial.print("Umidita' (%): ");
  Serial.println(h, 1);
  Serial.print("Temperatura (C): ");
  Serial.println(t, 1);

  display.fillRect(0, 40, 96, 30, BLACK);
  display.setCursor(0, 40);

  display.setTextColor(WHITE);
  display.print("Umidita' %: ");
  display.setTextColor(RED);
  display.println(h, 1);

  display.println("");
  display.setTextColor(WHITE);
  display.print("Temp.    C: ");
  display.setTextColor(GREEN);
  display.println(t, 1);

  delay (2000); // Pausa di 1 secondo
}

Filmato dimostrativo

Altre tipologie di sensori di temperatura

Per altre tipologie di sensore vedere l’articolo Panoramica sensori di temperatura e umidità

sensori umidità temperatura