Lição 20/31: Exibindo temperatura e umidade do DHT11 na tela LCD
Este tutorial demonstra como combinar um sensor de temperatura e umidade DHT11 com um display LCD1602 habilitado para I2C para criar uma estação de monitoramento ambiental compacta. Em vez de ler dados brutos do sensor no monitor serial, você aprenderá a exibir leituras de temperatura e umidade em tempo real em uma tela de caracteres 16x2. Este projeto é ideal para construir uma estação meteorológica de mesa, um pequeno monitor de estufa ou adicionar uma leitura local a qualquer projeto de automação residencial. A interface I2C simplifica a fiação, tornando este um projeto acessível para iniciantes e uma adição rápida para criadores experientes.
Aqui estão algumas ideias práticas do que você pode construir com esse conhecimento:
- Uma estação meteorológica de mesa mostrando as condições atuais do ambiente.
- Um display compacto para um terrário de répteis ou plantas.
- Uma leitura local para um servidor ou ambiente de oficina.
- Um módulo base para um sistema de automação residencial mais complexo.
Hardware e Componentes
Para construir este projeto, você precisará dos seguintes componentes:
- Arduino Uno (ou placa compatível)
- Display LCD1602 com módulo de interface I2C
- Sensor de temperatura e umidade DHT11
- Um resistor pull-up de 4,7kΩ ou 10kΩ (se usar um sensor DHT11 puro)
- Cabos jumper
- Protoboard (opcional, para conexões mais fáceis)
Entendendo o LCD1602 I2C
O LCD1602 é um display de caracteres comum com 16 colunas e 2 linhas. O módulo "I2C" soldado na parte de trás do display é a chave para sua simplicidade. Este módulo converte a interface paralela do LCD em uma interface serial I2C, que requer apenas dois fios para dados (SDA e SCL) e dois para alimentação (VCC e GND). Isso reduz drasticamente o número de pinos necessários no seu Arduino, deixando mais disponíveis para outros sensores e atuadores. O módulo também inclui um pequeno potenciômetro para ajustar o contraste do display, o que é crucial para garantir que o texto seja visível. O endereço I2C do módulo pode ser alterado usando os pequenos jumpers de solda (A0, A1, A2) na placa, permitindo que vários dispositivos I2C coexistam no mesmo barramento.
Guia de Fiação
Conecte os componentes conforme mostrado no diagrama abaixo. O LCD I2C usa os pinos I2C do Arduino, enquanto o sensor DHT11 usa um pino digital.
Para o LCD1602-I2C:
- VCC ao 5V do Arduino
- GND ao GND do Arduino
- SDA ao A4 do Arduino
- SCL ao A5 do Arduino
Para o sensor DHT11:
- VCC (Pino 1) ao 5V do Arduino
- Data (Pino 2) ao Pino Digital 2 do Arduino (com um resistor pull-up de 10kΩ para 5V)
- NC (Pino 3) - Não Conectado
- GND (Pino 4) ao GND do Arduino
(no vídeo em 25:16)
Configurando as Bibliotecas
Este projeto requer duas bibliotecas. A biblioteca Wire.h faz parte da instalação padrão do Arduino. Você precisará instalar a biblioteca LiquidCrystal_I2C e a biblioteca dht11. O vídeo demonstra como instalá-las. Você pode baixar as bibliotecas nos links fornecidos na descrição do vídeo ou no site da Robojax. Após o download, você pode instalá-las via IDE do Arduino navegando para Sketch > Include Library > Add .ZIP Library... e selecionando os arquivos baixados. (no vídeo em 06:16)
Encontrando o Endereço I2C do Seu LCD
Antes de usar o display, você deve determinar seu endereço I2C. O endereço mais comum é 0x27 ou 0x3F, mas pode variar. Para encontrá-lo, você pode usar um sketch de varredura I2C. Este é um programa simples que varre o barramento I2C e relata quaisquer endereços encontrados ao Monitor Serial. Carregue o código de varredura, abra o Monitor Serial a 9600 baud, e ele exibirá o endereço do seu LCD. (no vídeo em 08:11)
Explicação do Código
Esta seção explica as partes principais e configuráveis do código. O programa completo está disponível para download abaixo do artigo.
O código começa incluindo as bibliotecas necessárias e definindo os pinos e objetos usados.
// arquivo de cabeçalho do GetHub: https://github.com/adidax/dht11
#include <dht11.h>
dht11 DHT11; // cria objeto de DHT11
#define dhtpin 2 // define o pino para conectar ao DHT11
// início das configurações para LCD1602-I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Define o endereço do LCD como 0x3F para um display de 16 caracteres e 2 linhas
LiquidCrystal_I2C lcd(0x3F, 16, 2);
// fim das configurações para LCD1602-I2C
Estas são as linhas mais importantes para configurar na sua montagem:
#define dhtpin 2: Isso define o pino do Arduino conectado ao pino de dados do sensor DHT11. Altere o número2se você usar um pino diferente.LiquidCrystal_I2C lcd(0x3F, 16, 2);: Esta linha cria o objeto do LCD. O primeiro parâmetro,0x3F, é o endereço I2C que você encontrou na etapa anterior. Os16e2definem o número de colunas e linhas do seu display. Atualize o endereço se o seu scanner encontrou um diferente (por exemplo,0x27).
O código usa uma função personalizada, getTemp(), para ler a temperatura e convertê-la em diferentes unidades. Este é um recurso poderoso que torna o código reutilizável para diferentes aplicações.
float getTemp(char type) {
float temp = (float)DHT11.temperature;//obtém a temperatura
if(type =='F')
{
return temp * 1.8 + 32;// converte para Fahrenheit
}else if(type =='K')
{
return temp + 274.15;// converte para Kelvin
}else{
return temp;
}
}
Para usar esta função, você a chama com um argumento de caractere único representando a unidade desejada. Por exemplo, getTemp('C') retorna a temperatura em Celsius, getTemp('F') retorna em Fahrenheit e getTemp('K') retorna em Kelvin. A função lê a temperatura bruta do sensor DHT11 e aplica a fórmula de conversão necessária. Isso permite que você altere facilmente a unidade exibida no loop() principal sem reescrever a lógica de leitura do sensor. O loop principal imprime a temperatura e a umidade no LCD usando as funções lcd.setCursor() e lcd.print() para controlar onde na tela os valores aparecem.
Exibindo o Símbolo de Grau
O conjunto de caracteres padrão do LCD HD44780 não inclui um símbolo de grau dedicado (°). Para exibi-lo, você deve usar a função lcd.write() com o valor decimal do caractere da ROM do LCD. Para o símbolo de grau, esse valor é 223. O código demonstra isso usando lcd.print((char)223); para imprimir o símbolo após o valor da temperatura. (no vídeo em 30:16)
Demonstração do Projeto ao Vivo
Uma vez que o código é carregado, o display mostrará uma mensagem de inicialização antes de limpar e exibir a temperatura e umidade atuais. A primeira linha do display mostra o texto "LCD1602 DHT11", enquanto a segunda linha mostra a temperatura em Celsius, seguida pelo símbolo de grau e "C", e depois a temperatura em Fahrenheit, seguida pelo símbolo de grau e "F". O valor da umidade é impresso no monitor serial. A demonstração no vídeo mostra o display atualizando a cada meio segundo enquanto o sensor é segurado, refletindo com precisão as condições ambientais. (no vídeo em 29:42)
Exibir a voltagem de um potenciômetro no LCD é abordado em Lição 20/31: Exibindo voltagem no LCD1602.
Usar o mesmo LCD para exibir a distância de um sensor ultrassônico é abordado em Lição 20/31: Usando LCD1602 com Arduino para exibir temperatura, voltagem e distância | Robojax.
Projetos relacionados deste vídeo
- Lição 20/31: Usando LCD1602 com Arduino para exibir temperatura, voltagem e distância | Robojax
- Lição 20/31: Exibindo voltagem no LCD1602
Capítulos
- [00:00] Introdução ao LCD1602 e visão geral do projeto
- [01:30] Explicação do hardware LCD1602 e módulo I2C
- [02:47] Ajustando o contraste do LCD
- [03:14] Pinagem do LCD e configuração do endereço I2C
- [05:28] Diagrama de ligação para o LCD1602
- [06:16] Instalando a biblioteca LiquidCrystal_I2C
- [08:11] Encontrando o endereço I2C com um scanner
- [09:28] Código básico para imprimir texto no LCD
- [11:10] Exemplos: cursor piscante e caracteres personalizados
- [13:46] Criando e usando caracteres personalizados
- [18:51] Exemplo de exibição serial
- [23:16] Rolando texto no LCD
- [24:36] Combinando o código do sensor DHT11 com o LCD
- [30:16] Exibindo o símbolo de grau
- [32:03] Removendo pontos decimais da temperatura
- [33:00] Exibindo voltagem de um potenciômetro no LCD
- [35:56] Exibindo distância de um sensor ultrassônico
/*
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;
}
}
Coisas que você pode precisar
-
AmazonasSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazonas
-
Amazonas
-
Amazonas
-
Amazonas
Recursos e referências
-
DocumentaçãoDocumentação para o Kit de Aprendizado 3 em 1 IoT/Carro Inteligente/SunFounderdocs.sunfounder.com
-
Externo
Arquivos📁
Bibliotecas do Arduino (zip)
-
Código fonte do kit de aprendizado Smart Car 3 em 1 da SunFounder
3in1-kit-main-v2.zip12.80 MB
Manual do Usuário
-
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