Início
/
Projetos Arduino
/
Projetos Squids
/
Básico
/
Projeto 89 - Veja as diferenças dos sensores DHT11 e DHT22 na prática - Arduino
Projeto 89 - Veja as diferenças dos sensores DHT11 e DHT22 na prática - Arduino
Angelo Luis Ferreira | 18/08/2020
Acessos: 6.155
Básico - Projeto 89
Sensor de temperatura e umidade DHT22 e DHT 11 com display LCD
Objetivo
Neste projeto vamos mostrar as diferenças de leituras entre os sensores de temperatura e umidade DHT22 e DHT11 exibidas em um display de LCD. Para compararmos, vamos fazer a leitura da temperatura, umidade relativa e do ponto de orvalho do ambiente.
Sensores DHT22 e DHT11 são dispositivos de baixo custo para a medição de umidade e temperatura do ar ambiente através de um sensor capacitivo e um termistor NTC, respectivamente.
Observações:
a. Existem várias versões diferentes dos sensores DHT22 e DHT11 com a mesma aparência e número de pinos. Portanto é sempre importante verificar o "datasheet" dos componentes para obter as suas características principais. No nosso projeto as características estão descritas na tabela de componentes.
b. O sensor poderá ser conectado em pino digital ou analógico do Arduino. Os valores lidos serão os mesmos, pois dentro do sensor existe um microcontrolador que transmite as medições no formato digital através de um pino de saída.
c. É recomendável que a transmissão digital seja realizada por um cabo de no máximo 20 metros.
d. Os sensores DHT22 e DHT11 são utilizados em: estações meteorológicas, controle de irrigação, desumidificadores, controle de temperatura e umidade em ambientes controlados, etc.
e. Veja como utilizar o sensor DHT22 e DHT11 nos projetos: Projeto 87 - Sensor de temperatura e umidade DHT22 com display LCD e Projeto 40 - Sensor de temperatura e umidade DHT11 com display LCD
d. Veja o sensor DHT22 por dentro na imagem abaixo:
Diferenças entre DHT22 e DHT11: Veja abaixo a tabela comparativa como os parâmetros dos dois sensores (valores de referência)
|
DHT22 |
DHT11 |
Faixa de temperatura |
-40ºC a 80ºC |
0ºC a 50ºC |
Precisão na temperatura |
± 0.5 °C |
± 2 °C |
Resolução na temperatura |
0.1ºC |
1.0ºC |
Faixa de umidade relativa |
0 a 100% |
0 a 80% |
Precisão na umidade |
± 2% RH |
± 5% RH |
Resolução de umidade |
0.1% RH |
1.0% RH |
Tempo de resposta |
2 s |
1 s |
Alimentação |
3,5 V a 5 V |
3,5 V a 5 V |
Corrente de utilização |
0.5 mA |
2.5 mA |
Datasheet |
datasheet |
datasheet |
Aplicação
Para fins didáticos e projetos onde é necessária a medição de temperatura e/ou umidade do ambiente.
Componentes necessários
Referência
|
Componente
|
Quantidade
|
Imagem
|
Observação
|
Protoboard |
Protoboard 830 pontos |
1 |
|
No mínimo utilizar protoboard com 830 pontos
|
Jumpers |
Kit cabos ligação macho / macho |
1 |
|
|
Display LCD |
Display LCD 16X2 com pinos
|
1 |
|
LCD que utilize o controlador HD44780 (veja na descrição ou datasheet do componente)
O display poderá ser de qualquer cor (fundo verde, azul ou vermelho)
|
Módulo I2C |
Módulo I2C com CI PCF8574
|
1 |
|
O módulo I2C poderá vir separado ou já soldado no display LCD
(datasheet)
Se você não possui um módulo I2C para display LCD, poderá adaptar o projeto para o display LCD sem o adaptador.
|
Sensor de Temperatura e Umidade DHT11 |
Sensor de Temperatura DHT11
|
1 |
|
Características do DHT11 utilizado neste exemplo:
Tensão de alimentação: 3,3V a 5,5V
Umidade relativa: 20% a 95% (precisão de 5%)
Temperatura: 0 a 50 ºC (precisão de 2%)
Intervalo entre medições: mínimo 2s
Corrente de utilização: 2,5mA
datasheet
|
Sensor de Temperatura e Umidade DHT22 |
Sensor de Temperatura e Umidade DHT22
|
1 |
|
Características do DHT22 utilizado neste exemplo:
Tensão de alimentação: 3,3V a 5V
Umidade relativa: 0% a 100% (precisão de 2%)
Temperatura: -40 a 80 ºC (precisão de 1%)
Resolução: 0,1
Intervalo entre medições: mínimo 2s
Corrente de utilização: 0,5mA
(datasheet)
|
Resistor |
Resistor |
2 |
|
1 Resistor de 4,7KΩ a 10KΩ
|
Arduino UNO R3 |
Arduino UNO |
1 |
|
Você poderá utilizar uma placa Arduino UNO original ou similar
|
Montagem do Circuito
Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da força enquanto você monta o circuito.
Atenção
1. Neste projeto vamos utilizar um display LCD 20x4 com controlador HD44780, que se adapta aos mais diversos projetos com vários modelos de placas e microcontroladores. Este display possui 16 colunas por 2 linhas com backlight (luz de fundo) verde, azul ou vermelha e tem 16 pinos para a conexão. Atenção: Utilize um display LCD com os pinos soldados.
2. Para a montagem do display com adaptador, entenda a estrutura do módulo I2C para display LCD 16x2 / 20X4:
2.1. Na lateral do adaptador encontramos 4 pinos, sendo: 2 pinos para alimentação (Vcc e GND) e 2 pinos para conexão com a interface I2C (SDA e SCL) que deverão estar conectados nos pinos analógicos A4 (SDA) e A5 (SCL) do Arduino Uno ou nos pinos A20 (SDA) e A21 (SCL) do Arduino Mega 2560. Veja a tabela abaixo com onde temos as principais placas Arduino e suas conexões com o I2C.
2.2. Para controlar o contraste do display, utilize o potenciômetro de ajuste de contraste. O jumper lateral, quando utilizado, permite que a luz do fundo (backlight) seja controlada pelo programa ou permaneça apagada.
2.3. A seleção de endereço do adaptador I2C para display LCD, na maioria dos módulos fornecidos no mercado já vêm configurados com o com o endereço 0x27. Se você não sabe qual endereço que o seu módulo I2C e/ou módulo RTC DS3231 está configurado, baixe o seguinte "sketch":
DOWNLOAD - I2C_scanner.ino
2.3.1 Após instalar e rodar o sketch acima, abra o monitor serial que mostrará qual é o endereço que o seu módulo I2C está configurado:
2.3.1.1 Nos casos em que módulo I2C estiver configurado com uma faixa de endereços diferente do endereço 0X27 altere a alinha de programação -> LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE); com o endereço correto.
2.5. Para saber mais sobre a montagem e utilização de display LCD com módulo I2C leia o tutorial: Projeto 48 - Como controlar um display LCD com o módulo I2C.
Conexão sensores DHT22 e DHT11
3. Cuidado para não ligar os sensores de temperatura DHT11 e DHT22 invertidos. Ambos devem ficar conectados da seguinte forma:
3.1. O pino 1 deverá estar conectado no polo positivo Vcc - tensão de contínua contínua de 3.3V a 5V.
3.2. O pino 2 deverá estar conectado em uma porta analógica do Arduino. No nosso projeto utilizamos a porta analógica A1 para o DHT22 e A0 para o DHT11. (O pino 2 do sensor poderá também ser conectado em uma porta digital do Arduino, tanto faz).
3.2.1. ATENÇÃO: Para evitar flutuações e garantir que o sinal seja lido corretamente é necessário acrescentar um resistor "pull up" de 4,7KΩ a 10KΩ em cada sensor.
3.2.2. Veja abaixo como deve ser a montagem do resistor "pull up" para o sensores DHT22 e DHT11:
3.3. O pino 3 não deverá estar conectado (NC - não conectado);
3.4. O pino 4 deverá estar conectado ao polo negativo GND - tensão 0V)
4. A montagem do nosso projeto foi realizada em um protoboard com linhas de alimentação contínuas. Verifique se o seu protoboard possui linhas de alimentação contínuas ou separadas.
Incluindo a biblioteca para os Sensores de Temperatura DHT11, DHT22, DHT33 e DHT44
Para facilitar e reduzir o tempo gasto em programação, utilizaremos a biblioteca DHTIB desenvolvida para os sensores DHT11, DHT22, DHT33 e DHT44:
Download dos arquivos da biblioteca do sensor DHT11
Para trabalharmos de forma mais fácil com o sensor DHT, podemos baixar a biblioteca DHTlib que foi desenvolvida para os sensores DHT11, DHT22, DHT33 e DHT44:
DOWNLOAD - DHTlib.zip
Para saber detalhes desta biblioteca clique aqui.
Instalando a biblioteca pelo IDE do Arduino
Após fazer o download do arquivo DHTlib.zip com todos os arquivos da biblioteca compactados no formato zip, abra o IDE do Arduino e siga o tutorial: Como incluir uma biblioteca no IDE do Arduino.
Incluindo biblioteca LiquidCrystal_I2C
Atenção: Caso você opte pela utilização do display de LCD sem o módulo I2C, siga os procedimentos do Projeto 38 - Controlando um display LCD (instalação e comandos básicos) e não instale a biblioteca abaixo.
Para que o módulo I2C funcione corretamente é necessário adicionarmos a biblioteca LiquidCrystal_I2C no IDE do Arduino. Uma das grandes vantagens das placas Arduino é a diversidade de bibliotecas disponíveis que podem ser utilizadas em seus programas. Estas bibliotecas podem ser criadas para a linguagem "C" ou especificamente para o Arduino, reduzindo drasticamente o tempo gasto com programação. Veja a tabela Coletânea de bibliotecas para módulos.
Download dos arquivos da biblioteca LiquidCrystal_I2C
DOWNLOAD - NewliquidCrystal_1.3.4.zip
Para saber detalhes desta biblioteca clique aqui.
Instalando a biblioteca pelo IDE do Arduino
Após fazer o download do arquivo NewliquidCrystal_1.3.4.zip com todos os arquivos da biblioteca compactados no formato zip, abra o IDE do Arduino e siga o tutorial: Como incluir uma biblioteca no IDE do Arduino.
Utilizando a biblioteca LiquidCrystal_I2C
Para instalação e utilização da biblioteca para o módulo I2C como comunicação para um display LCD siga o tutorial: Projeto 48 - Como controlar um display LCD com o módulo I2C
Comandos do display LCD para a biblioteca LiquidCrystal
No projeto vamos utilizar alguns comandos de controle do display LCD através da biblioteca LiquidCrystal que já vem embutida na IDE do Arduino. Para conhecer todos os comandos desta biblioteca, acesse o link: Biblioteca LiquidCrystal - Comandos display LCDl e LiquidCrystal Library (Arduino Reference).
Obs.: Para acessarmos uma biblioteca embutida na IDE do Arduino, assim como, para acessarmos um biblioteca local através de um header file, utilizaremos a diretiva #include.
Código do Projeto (Sketch)
1) Faça o dowload e abra o arquivo projeto89.ino no IDE do Arduino: DOWNLOAD - projeto89.ino
Obs. 1: Nos casos em que módulo I2C estiver configurado com um endereço diferente do endereço 0X27, altere a alinha de programação -> LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE); com o endereço correto. - Veja o tutorial Projeto 48 - Como controlar um display LCD com o módulo I2C
Obs. 2: Se estiver utilizando um display de LCD 16 X 2, altere o comando da linha 21 para lcd.begin (20,4);
Obs.3: Se não possuir o módulo I2C utilize apenas o display LCD conforme Projeto 38 - Controlando um display LCD (instalação e comandos básicos)
Se preferir, copie e cole o código abaixo no IDE do Arduino:
/*******************************************************************************
*
* Projeto 89 - Comparando sensor DHT11 X DHT22 na prática
* Autor: Angelo Luis Ferreira
* Data: 17/08/2020
* http://squids.com.br/arduino
*
*******************************************************************************/
#include <dht.h> // Inclui a biblioteca dht
#include <LiquidCrystal_I2C.h>//Carrega a biblioteca lcd com I2C
//Define os pinos que serão utilizados para ligação ao display
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);
dht DHT; // Cria um objeto da classe dht
uint32_t timer = 0;
void setup()
{
Serial.begin(9600); // Inicializa serial com taxa de transmissão de 9600 bauds
lcd.begin(20, 4); // Define o display com 16 colunas e 2 linhas
lcd.clear(); // limpa a tela do display
}
void loop() {
// Executa 1 vez a cada 2 segundos
if(millis() - timer>= 2000) {
// le DHT 22
// Exibe no display LCD o valor da temperatura
DHT.read22(A1); // uso do sensor DHT12
lcd.setCursor(0,0); // Define o cursor na posição de início
lcd.print("DHT22");
lcd.setCursor(0,1); // Define o cursor na posição de início
lcd.print("T= ");
lcd.print(DHT.temperature,1);
lcd.write(B11011111); // Imprime o símbolo de grau
lcd.print("C");
// Exibe no display LCD o valor da humidade
lcd.setCursor(0,2); // Define o cursor na posição de início
lcd.print("U= ");
lcd.print(DHT.humidity,1);
lcd.print(" %");
// Exibe no display o valor do ponto de orvalho (dew point)
lcd.setCursor(0,3); // Define o cursor na posição de início
lcd.print("DP ");
lcd.print(dewPoint(DHT.temperature, DHT.humidity),1);
lcd.write(B11011111); // Imprime o símbolo de grau
lcd.print("C");
// lê DHT11
// Exibe no display LCD o valor da temperatura
DHT.read11(A0); // uso do sensor DHT11
lcd.setCursor(10,0); // Define o cursor na posição de início
lcd.print("DHT11");
lcd.setCursor(10,1); // Define o cursor na posição de início
lcd.print("T= ");
lcd.print(DHT.temperature,1);
lcd.write(B11011111); // Imprime o símbolo de grau
lcd.print("C");
// Exibe no display LCD o valor da humidade
lcd.setCursor(10,2); // Define o cursor na posição de início
lcd.print("U= ");
lcd.print(DHT.humidity,1);
lcd.print(" %");
// Exibe no display o valor do ponto de orvalho (dew point)
lcd.setCursor(10,3); // Define o cursor na posição de início
lcd.print("DP ");
lcd.print(dewPoint(DHT.temperature, DHT.humidity),1);
lcd.write(B11011111); // Imprime o símbolo de grau
lcd.print("C");
timer = millis(); // Atualiza a referência
}
}
// CALCULO DO PONTO DE ORVALHO (DEW POINT)
// Referência: https://playground.arduino.cc/Main/DHT11Lib/
// dewPoint function NOAA
// reference (1) : https://wahiduddin.net/calc/density_algorithms.htm
// reference (2) : https://www.colorado.edu/geography/weather_station/Geog_site/about.htm
//
double dewPoint(double celsius, double humidity) {
// (1) Saturation Vapor Pressure = ESGG(T)
double RATIO = 373.15 / (273.15 + celsius);
double RHS = -7.90298 * (RATIO - 1);
RHS += 5.02808 * log10(RATIO);
RHS += -1.3816e-7 * (pow(10, (11.344 * (1 - 1/RATIO ))) - 1) ;
RHS += 8.1328e-3 * (pow(10, (-3.49149 * (RATIO - 1))) - 1) ;
RHS += log10(1013.246);
// factor -3 is to adjust units - Vapor Pressure SVP * humidity
double VP = pow(10, RHS - 3) * humidity;
// (2) DEWPOINT = F(Vapor Pressure)
double T = log(VP/0.61078); // temp var
return (241.88 * T) / (17.558 - T);
}
Como o projeto deve funcionar
1. Ao executar o programa, a temperatura atual, em Celsius, a umidade relativa, em porcentagem, e a temperatura do Ponto de Orvalho serão exibidas no display LCD, sendo atualizadas a cada 2 segundos.
Obs1: Veja no Projeto 88 - Calculando o "ponto de orvalho" com o Arduino e dados obtidos pelo sensor DHT22 (ou DHT11) para que serve o ponto de orvalho e quais são os métodos para a sua obtenção a partir da leitura da temperatura e da umidade relativa do ar.
Obs2: Após iniciar o programa é necessário aguardar 5 segundos para que o sensor estabilize a leitura de dados.
O anúncio abaixo ajuda a manter o Squids Arduino funcionando
Comentários