Lezione 20/31: Visualizzazione di temperatura e umidità dal DHT11 su schermo LCD
Questo tutorial dimostra come combinare un sensore di temperatura e umidità DHT11 con un display LCD1602 abilitato I2C per creare una stazione di monitoraggio ambientale compatta. Invece di leggere i dati grezzi del sensore dal monitor seriale, imparerai a visualizzare letture di temperatura e umidità in tempo reale su uno schermo a caratteri 16x2. Questo progetto è ideale per costruire una stazione meteorologica da scrivania, un piccolo monitor per serra o per aggiungere una lettura locale a qualsiasi progetto di automazione domestica. L'interfaccia I2C semplifica il cablaggio, rendendo questo progetto accessibile ai principianti e una rapida aggiunta per i maker esperti.
Ecco alcune idee pratiche su cosa puoi costruire con questa conoscenza:
- Una stazione meteorologica da scrivania che mostra le condizioni attuali della stanza.
- Un display compatto per un terrario di rettili o piante.
- Una lettura locale per un server room o un ambiente di lavoro.
- Un modulo base per un sistema di automazione domestica più complesso.
Hardware e Componenti
Per costruire questo progetto, avrai bisogno dei seguenti componenti:
- Arduino Uno (o scheda compatibile)
- Display LCD1602 con modulo interfaccia I2C
- Sensore di temperatura e umidità DHT11
- Una resistenza pull-up da 4.7kΩ o 10kΩ (se si utilizza un sensore DHT11 nudo)
- Cavi jumper
- Breadboard (opzionale, per connessioni più facili)
Capire il LCD1602 I2C
Il LCD1602 è un display a caratteri comune con 16 colonne e 2 righe. Il modulo "I2C" saldato sul retro del display è la chiave della sua semplicità. Questo modulo converte l'interfaccia parallela del LCD in un'interfaccia seriale I2C, che richiede solo due fili per i dati (SDA e SCL) e due per l'alimentazione (VCC e GND). Questo riduce drasticamente il numero di pin necessari sul tuo Arduino, lasciandone più disponibili per altri sensori e attuatori. Il modulo include anche un piccolo potenziometro per regolare il contrasto del display, fondamentale per garantire che il testo sia visibile. L'indirizzo I2C del modulo può essere modificato utilizzando i piccoli ponticelli di saldatura (A0, A1, A2) sulla scheda, consentendo a più dispositivi I2C di coesistere sullo stesso bus.
Guida al Cablaggio
Collega i componenti come mostrato nel diagramma qui sotto. Il LCD I2C utilizza i pin I2C dell'Arduino, mentre il sensore DHT11 utilizza un pin digitale.
Per il LCD1602-I2C:
- VCC ad Arduino 5V
- GND ad Arduino GND
- SDA ad Arduino A4
- SCL ad Arduino A5
Per il sensore DHT11:
- VCC (Pin 1) ad Arduino 5V
- Data (Pin 2) ad Arduino Pin Digitale 2 (con una resistenza pull-up da 10kΩ a 5V)
- NC (Pin 3) - Non Connesso
- GND (Pin 4) ad Arduino GND
(nel video a 25:16)
Configurazione delle Librerie
Questo progetto richiede due librerie. La libreria Wire.h fa parte dell'installazione standard di Arduino. Dovrai installare la libreria LiquidCrystal_I2C e la libreria dht11. Il video dimostra come installarle. Puoi scaricare le librerie dai link forniti nella descrizione del video o dal sito web di Robojax. Una volta scaricate, puoi installarle tramite l'IDE Arduino navigando su Sketch > Include Library > Add .ZIP Library... e selezionando i file scaricati. (nel video a 06:16)
Trovare l'Indirizzo I2C del Tuo LCD
Prima di poter utilizzare il display, devi determinare il suo indirizzo I2C. L'indirizzo più comune è 0x27 o 0x3F, ma può variare. Per trovarlo, puoi utilizzare uno sketch di scansione I2C. Questo è un semplice programma che scansiona il bus I2C e riporta eventuali indirizzi trovati al Monitor Seriale. Carica il codice di scansione, apri il Monitor Seriale a 9600 baud e visualizzerà l'indirizzo del tuo LCD. (nel video a 08:11)
Spiegazione del Codice
Questa sezione spiega le parti chiave e configurabili dall'utente del codice. Il programma completo è disponibile per il download sotto l'articolo.
Il codice inizia includendo le librerie necessarie e definendo i pin e gli oggetti utilizzati.
// file header da GetHub: https://github.com/adidax/dht11
#include <dht11.h>
dht11 DHT11; // crea oggetto di DHT11
#define dhtpin 2 // imposta il pin per collegare DHT11
// inizio impostazioni per LCD1602-I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Imposta l'indirizzo LCD a 0x3F per un display a 16 caratteri e 2 righe
LiquidCrystal_I2C lcd(0x3F, 16, 2);
// fine impostazioni per LCD1602-I2C
Queste sono le righe più importanti da configurare per la tua configurazione:
#define dhtpin 2: Questo definisce il pin Arduino collegato al pin dati del sensore DHT11. Cambia il numero2se usi un pin diverso.LiquidCrystal_I2C lcd(0x3F, 16, 2);: Questa riga crea l'oggetto LCD. Il primo parametro,0x3F, è l'indirizzo I2C che hai trovato nel passaggio precedente. I valori16e2definiscono il numero di colonne e righe del tuo display. Aggiorna l'indirizzo se il tuo scanner ha trovato uno diverso (ad esempio,0x27).
Il codice utilizza una funzione personalizzata, getTemp(), per leggere la temperatura e convertirla in diverse unità di misura. Questa è una funzionalità potente che rende il codice riutilizzabile per diverse applicazioni.
float getTemp(char type) {
float temp = (float)DHT11.temperature;//ottieni la temperatura
if(type =='F')
{
return temp * 1.8 + 32;// converti in Fahrenheit
}else if(type =='K')
{
return temp + 274.15;// converti in Kelvin
}else{
return temp;
}
}
Per utilizzare questa funzione, la si chiama con un singolo carattere come argomento che rappresenta l'unità desiderata. Ad esempio, getTemp('C') restituisce la temperatura in Celsius, getTemp('F') la restituisce in Fahrenheit e getTemp('K') la restituisce in Kelvin. La funzione legge la temperatura grezza dal sensore DHT11 e applica la formula di conversione necessaria. Questo consente di cambiare facilmente l'unità visualizzata nel loop() principale senza riscrivere la logica di lettura del sensore. Il ciclo principale stampa la temperatura e l'umidità sul display LCD utilizzando le funzioni lcd.setCursor() e lcd.print() per controllare dove sullo schermo appaiono i valori.
Visualizzazione del simbolo del grado
Il set di caratteri standard del display LCD HD44780 non include un simbolo di grado dedicato (°). Per visualizzarlo, è necessario utilizzare la funzione lcd.write() con il valore decimale del carattere dalla ROM del display LCD. Per il simbolo del grado, questo valore è 223. Il codice lo dimostra utilizzando lcd.print((char)223); per stampare il simbolo dopo il valore della temperatura. (nel video a 30:16)
Dimostrazione dal vivo del progetto
Una volta caricato il codice, il display mostrerà un messaggio di avvio prima di cancellarsi e visualizzare la temperatura e l'umidità attuali. La prima riga del display mostra il testo "LCD1602 DHT11", mentre la seconda riga mostra la temperatura in Celsius, seguita dal simbolo del grado e "C", e poi la temperatura in Fahrenheit, seguita dal simbolo del grado e "F". Il valore dell'umidità viene stampato sul monitor seriale. La dimostrazione nel video mostra il display che si aggiorna ogni mezzo secondo mentre il sensore viene tenuto in mano, riflettendo accuratamente le condizioni ambientali. (nel video a 29:42)
La visualizzazione della tensione da un potenziometro sul display LCD è trattata in Lezione 20/31: Visualizzazione della tensione su LCD1602.
L'utilizzo dello stesso display LCD per mostrare la distanza da un sensore a ultrasuoni è trattato in Lezione 20/31: Utilizzo di LCD1602 con Arduino per visualizzare temperatura, tensione e distanza | Robojax.
Progetti correlati da questo video
- Lezione 20/31: Utilizzo di LCD1602 con Arduino per visualizzare temperatura, tensione e distanza | Robojax
- Lezione 20/31: Visualizzazione della tensione su LCD1602
Capitoli
- [00:00] Introduzione all'LCD1602 e panoramica del progetto
- [01:30] Spiegazione dell'hardware LCD1602 e del modulo I2C
- [02:47] Regolazione del contrasto del display LCD
- [03:14] Pinout del display LCD e configurazione dell'indirizzo I2C
- [05:28] Schema di collegamento per l'LCD1602
- [06:16] Installazione della libreria LiquidCrystal_I2C
- [08:11] Trovare l'indirizzo I2C con uno scanner
- [09:28] Codice di base per stampare testo sul display LCD
- [11:10] Esempi: cursore lampeggiante e caratteri personalizzati
- [13:46] Creazione e utilizzo di caratteri personalizzati
- [18:51] Esempio di visualizzazione seriale
- [23:16] Scorrimento del testo sul display LCD
- [24:36] Combinazione del codice del sensore DHT11 con il display LCD
- [30:16] Visualizzazione del simbolo del grado
- [32:03] Rimozione dei punti decimali dalla temperatura
- [33:00] Visualizzazione della tensione da un potenziometro sul display LCD
- [35:56] Visualizzazione della distanza da un sensore a ultrasuoni
/*
Lesson 20/31: Displaying Temperature and humidity from DHT11 on LCD screen
Get this code and watch video Download and resource page https://robojax.com/RJT603
YouTube video https://www.youtube.com/watch?v=NXAswOc_2zg
* This is the Arduino code for DHT11 module to read temperature and humidity
* This code can display temperature in:
* C is used to get Celsius
* F is used to get Fahrenheit
* K is used for Kelvin
* *
* Written by Ahmad Shamshiri for Robojax
* on Jan 04, 2018
* Robojax.com
Please watch video instruction here https://youtu.be/0XMLnCYkvbE
This code is available at http://robojax.com/course1/?vid=lecture11
with over 100 lectures Free On YouTube Watch it here http://robojax.com/L/?id=338
Get the code for the course: http://robojax.com/L/?id=339
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// header file from GetHub: https://github.com/adidax/dht11
#include <dht11.h>
dht11 DHT11; // create object of DHT11
#define dhtpin 2 // set the pin to connect to DHT11
// start of settings for LCD1602-I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x3F for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x3F, 16, 2);
// end of settings for LCD1602-I2C
void setup() {
Serial.begin(9600);// setting up serial monitor
// initialize the LCD,
lcd.begin();
// Turn on the blacklight and print a message.
lcd.backlight();
lcd.clear();
lcd.setCursor (0,0); //
lcd.print("DHT11 Sensor");
delay(2000);
}
void loop() {
//Robojax Step By Step Arduino Course YouTube Watch it here http://robojax.com/L/?id=338
DHT11.read(dhtpin);// initialize the reading
int humidity = DHT11.humidity;// get humidity
lcd.clear();// clear previous values from screen
lcd.setCursor (0,0); //character zero, line 1
lcd.print("LCD1602 DHT11"); // print text
// print distance in degrees C
lcd.setCursor (0,1); //character 0, line 2
lcd.print(getTemp('C'));// print Temperature Celsius
lcd.setCursor (4,1); //character 5, line 2
lcd.print((char)223);// print degree
lcd.setCursor (5,1); //character 6, line 2
lcd.print("C");// print C
// print distance degrees F
lcd.setCursor (7,1); //character 8, line 2
lcd.print(getTemp('F'));// print distance in cm
lcd.setCursor (13,1); //character 14, line 2
lcd.print((char)223);// print degree
lcd.setCursor (14,1); //character 16, line 2
lcd.print("F");// print F
//code for Robojax.com video
Serial.print(getTemp('C'));
Serial.print("C ");
Serial.print(getTemp('F'));
Serial.print("F ");
Serial.print(getTemp('K'));
Serial.print("K ");
Serial.print(" humidity:");
Serial.print (humidity);
Serial.print("% ");
Serial.println();
delay(500);
}
/*
* getTemp(char type)
* type character of upper case
* C is used to get Celsius
* F is used to get Fahrenheit
* K is used for Kelvin
*/
float getTemp(char type) {
//Robojax Step By Step Arduino Course YouTube Watch it here http://robojax.com/L/?id=338
float temp = (float)DHT11.temperature;//get temp
if(type =='F')
{
return temp * 1.8 + 32;// convert to Fahrenheit
}else if(type =='K')
{
return temp + 274.15;// convert to Kelvin
}else{
return temp;
}
}
Cose di cui potresti avere bisogno
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Risorse e riferimenti
-
DocumentazioneDocumentazione per il kit di apprendimento SunFounder 3 in 1 IoT/Smart Car.docs.sunfounder.com
-
Esterno
File📁
Librerie Arduino (zip)
-
Codice sorgente del kit di apprendimento Smart Car 3-in-1 di SunFounder
3in1-kit-main-v2.zip12.80 MB
Manuale dell'utente
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB