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.
Indice
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.
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
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
/*#################################################################### 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
In realtà tutti sarà limitato a montare il display e i sensore
Una volta caricato lo sketch, dopo un messaggio iniziale, saranno mostrati i valori letti dal sensore
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
/*#################################################################### 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à