Progetto di sensore di temperatura e umidità Arduino DHT11

Linea del sensore DHT

La linea di sensori DHT (DHT11/22) è una delle più utilizzate in molti progetti elettronici, 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 PCBA fai da teI 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.

Nel complesso, si tratta di un progetto di circuito 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ù avanzati, questo progetto può essere sicuramente migliorato e aggiornato per aggiungere ulteriori funzionalità come la comunicazione wireless (RF, LoRa), PCB Bluetooth, Wi-Fi, ecc.), i dati RTC (orologio in tempo reale), i dati dei sensori aggiuntivi (altitudine, pressione atmosferica, concentrazione di gas, ecc. Per realizzare questo progetto, è necessario acquistare i componenti:

  • 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

Se si utilizza una scheda di sviluppo diversa, potrebbe essere necessario un tipo diverso di breadboard. Per questo progetto, FS Technology utilizza un Arduino Nano, che richiede l'uso di una breadboard. Tuttavia, se invece si utilizza un Arduino Uno, i fili dei ponticelli possono essere collegati direttamente ai pin della scheda, eliminando la necessità della breadboard. Nonostante il cambio di scheda, il cablaggio del modulo sensore DHT11 e del display OLED sulla scheda Arduino rimane coerente. Inoltre, di seguito è riportato lo schema di cablaggio del circuito del sensore di temperatura e umidità DHT11.

  • 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.
Sensore di temperatura e umidità DHT11

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 indirizzati anche a un pubblico più esperto. Produttore di PCBA che potrebbero voler esplorare altri aspetti dell'elettronica. 

Blog sui progetti di elettronica fai da te