Progetto di sensore di temperatura e umidità Arduino DHT11

La linea di sensori DHT (DHT11/22) è una delle più utilizzate in molti sistemi elettronici. PCBA progetti, dalle stazioni meteorologiche domestiche ai sistemi di automazione degli impianti, grazie alla sua semplicità e compattezza come sensore di temperatura/umidità. Sebbene il DHT22, più preciso e costoso, possa essere sostituito (con alcune modifiche al codice), in questo progetto verrà utilizzato il modulo sensore DHT11. Con un'interfaccia di base a 3 pin, il sensore DHT11 che verrà utilizzato in questo progetto non è la versione standalone a 4 pin, ma piuttosto un modulo a 3 pin che ha un condensatore e una resistenza di pull-up incorporati, eliminando così la necessità di componenti aggiuntivi nella costruzione di questo circuito. Pertanto, quando viene interfacciato con una scheda Arduino, il modulo sensore DHT11 può essere collegato direttamente a un pin digitale che elabora e trasmette i dati seriali dal sensore al microcontrollore, per la lettura. In questo progetto, i dati di temperatura e umidità del sensore DHT11 saranno visualizzati su un display OLED (diodo organico a emissione di luce) da 0,96″ 128×64, in modo da poterli leggere visivamente. Il vantaggio di utilizzare un display OLED i2c rispetto ad altri tipi di display è che richiede solo una connessione a 4 fili alla scheda Arduino e che, grazie a un'ampia varietà di librerie, può essere programmato con facilità. Una caratteristica notevole di un display OLED è la chiarezza, la nitidezza e la qualità visiva di testi, figure e immagini che può visualizzare. Complessivamente, si tratta di un progetto abbastanza semplice, adatto ai principianti assoluti, in quanto richiede solo pochi componenti e alcune competenze di base di codifica. Tuttavia, per coloro che sono più esperti, questo progetto può essere sicuramente migliorato e aggiornato per aggiungere ulteriori funzionalità, come la comunicazione wireless (RF, LoRa), PCB BluetoothWiFi, ecc.), dati RTC (orologio in tempo reale), dati di sensori aggiuntivi (altitudine, pressione atmosferica, concentrazione di gas, ecc. Ecco i componenti necessari per questo progetto:
- Arduino Nano (funzionano anche altre schede Arduino compatibili)
- Cavo USB (compatibile con la scheda Arduino)
- Lavagna per pane
- Fili di ponticello maschio-maschio (7)
- 0,96″ 128×64 Display OLED i2c
- Modulo sensore DHT11
Cablaggio
A seconda della scheda Arduino, può essere necessario o meno un breadboard per collegarla. In questo esempio, è stato utilizzato un Arduino Nano, che richiede quindi una breadboard, ma se si utilizza un Arduino Uno, ad esempio, è possibile collegare i fili dei ponticelli dai componenti sulla breadboard direttamente ai pin della scheda. Tuttavia, il cablaggio dal modulo sensore DHT11 e dall'OLED alla scheda Arduino rimane lo stesso. Di seguito è riportato anche uno schema del circuito.
- Modulo sensore DHT11: Collegare il pin del segnale (S) del sensore a D2, il pin positivo (+) a +5 V e il pin negativo (-) a GND.
- OLED: Collegare SDA (dati seriali) ad A4, SCL/SCK (clock seriale) ad A5, VDD/VCC (tensione di alimentazione) a +5v e GND a GND.
- Ora è possibile collegare la scheda Arduino al computer tramite il cavo USB.

Codice progetto
1TP5Include <Wire.h>
1TP5Include <Adafruit_GFX.h>
1TP5Include <Adafruit_SSD1306.h>
#definizione larghezza_schermo 128
#definizione altezza_schermo 64
#definizione OLED_RESET 4
Adafruit_SSD1306 display(larghezza_schermo, altezza_schermo);
1TP5Include "DHT.h"
#definizione DHTPIN 2
#definizione DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
vuoto impostazione() {
dht.iniziare();
display.iniziare(SSD1306_SWITCHCAPVCC, 0x3C);
display.cancellaDisplay();
}
vuoto anello() {
display.cancellaDisplay();
display.setTextSize(1);
display.impostaColoreTesto(SSD1306_BIANCO);
display.impostaCursore(0, 15);
display.stampa("Temperatura:");
display.impostaCursore(80, 15);
display.stampa(dht.leggiTemperatura());
display.impostaCursore(110, 15);
display.stampa(" C");
display.impostaCursore(0, 35);
display.stampa("Umidità:");
display.impostaCursore(80, 35);
display.stampa(dht.leggiUmidità());
display.impostaCursore(110, 35);
display.stampa(“%”);
display.display();
ritardo(2000);
Informazioni sul codice
- Uno dei vantaggi di lavorare con un display OLED i2c è l'incredibile quantità di supporto disponibile online, sotto forma di librerie open-source, che possono aiutare notevolmente nella programmazione del display dall'IDE Arduino. In questo progetto, le librerie Adafruit SSD1306 e GFX sono le due librerie principali utilizzate per interfacciare il display OLED con Arduino e, poiché tutte le informazioni di configurazione sono già configurate nei file della libreria, i comandi di base vengono utilizzati all'interno dell'IDE, semplificando l'uso del display. Se non si dispone di queste librerie scaricate e installate nell'IDE, è possibile che si verifichino errori di compilazione; assicurarsi quindi di avere le ultime versioni delle librerie installate nell'IDE Arduino.
- Il codice inizia con la definizione delle librerie necessarie per configurare il display OLED: Wire, Adafruit SSD1306 e Adafruit GFX. Queste librerie sono necessarie per il funzionamento dell'OLED con Arduino.
- Nel secondo blocco vengono definiti diversi parametri relativi al display OLED, tra cui la larghezza e l'altezza dello schermo (128 x 64 pixel) e il pin di reset OLED (A4).
- Successivamente, vengono definite le librerie necessarie per l'interfacciamento del sensore DHT11 con Arduino, in particolare la libreria 'DHT'. Viene inoltre definito il pin digitale a cui è collegato il sensore DHT sulla scheda Arduino (pin digitale 2 - D2) e il particolare modello di sensore DHT che stiamo utilizzando, il sensore DHT11.
- Ora viene introdotta la sezione void setup, una delle due funzioni essenziali in ogni codice Arduino. Qui si avviano il sensore DHT11 (dht.begin()) e il display OLED e, prima di procedere nella sezione void loop, si cancella il display OLED da qualsiasi visualizzazione precedente (display.clearDisplay()).
- Per quanto riguarda la sezione void loop, la parte principale del codice che si ripete continuamente (in loop) finché la scheda Arduino è alimentata, essa consiste principalmente in funzioni specifiche per l'OLED che impostano innanzitutto la dimensione del testo, il colore del testo e il cursore (dove vogliamo che il testo venga stampato sull'OLED). Successivamente, si comanda all'OLED di stampare righe di testo in vari punti del display, che sono principalmente le informazioni sulla temperatura (in gradi Celsius) e sull'umidità (%) lette dal sensore DHT11. Grazie a questi semplici comandi prodotti dalle librerie definite, siamo in grado di stampare facilmente qualsiasi informazione sul display.
- La funzione di ritardo alla fine del codice è impostata per aggiornare il display OLED ogni 2000 millisecondi con gli ultimi dati letti dal sensore. Tuttavia, è possibile modificare questa tempistica a seconda della frequenza con cui si desidera ricevere informazioni aggiornate direttamente dal sensore.
Riassumere
Una volta acquisita una conoscenza di base di questo progetto e dei principi fondamentali che sono coinvolti nell'interfacciamento di un sensore a un display OLED, ci sono sicuramente una moltitudine di modi in cui questo progetto può essere aggiornato e migliorato. Nella maggior parte dei casi, una configurazione come questa può essere integrata in un progetto di stazione meteorologica molto più ampio, aggiungendo eventualmente altri sensori, un display più grande, funzionalità wireless, una custodia, ecc. Come dimostrato da questo progetto, basta familiarizzare con alcune delle librerie di Arduino disponibili per codificare la propria stazione meteorologica in modo relativamente semplice. Un progetto futuro potrebbe prevedere la trasmissione wireless di questi dati meteo da una scheda a microcontrollore a un'altra, per monitorare un ambiente remoto o controllare centralmente un sistema autonomo. Tuttavia, progetti come questo sono eccellenti per introdurre all'elettronica hobbistica un principiante assoluto e possono benissimo essere rivolti anche a maker più esperti che desiderano esplorare altri aspetti dell'elettronica.