Aula 8: Temperatura e umidade no display LCD 16×2

Na aula 6 aprendemos como utilizar o sensor DHT11, mostramos como acompanhar as informações de temperatura e umidade no monitor serial. Já na aula 7 você aprendeu a utilizar um display LCD 16×2. Agora está na hora de juntar esse dois conhecimentos. Pronto? Vamos lá!

Sensor DHT11 com display LCD 16x2

Material Necessário

Circuito sensor DHT11 e display LCD 16×2

  • Pino 4 (RS) ligado ao pino 12 do Arduino
  • Pino 6 (E) ligado ao pino 11 do Arduino
  • Pino 11 (D4) ligado ao pino 5 do Arduino
  • Pino 12 (D5) ligado ao pino 4 do Arduino
  • Pino 13 (D6) ligado ao pino 3 do Arduino
  • Pino 14 (D7) ligado ao pino 2 do Arduino

O pino 3 do display será ligado ao pino central de um potenciômetro de 10K ohm, que tem a função de regular o contraste. As demais ligações são feitas ao GND (pinos 1, 5 e 16) e aos 5 V do Arduino (pinos 2 e 15) , e qualquer inversão pode impedir a exibição dos caracteres:

Circuito sensor DHT11 com display LCD 16x2

Conecte o pino de dados do DHT11 ao pino analógico 5 do seu Arduino Uno como mostra o código exemplo abaixo, mas você poderá alterar por outro se desejar.

Código sensor DHT11 e display LCD 16×2

No programa, vamos utilizar a biblioteca LiquidCrystal para controle do LCD (esta biblioteca já vêm instalada na IDE), e também a biblioteca DHT, que pode ser baixada neste link.

Para mostrar o símbolo do grau (º), podemos utilizar um dos caracteres especiais disponíveis nesse display, usando o comando

lcd.print((char)223);

Ou criar um caractere customizado, com a forma mais arredondada. Para isso, criamos um array e desenhamos nosso próprio símbolo, e para utilizá-lo no programa, usamos o comando

lcd.createChar(valor, data);

onde valor se refere ao nome que daremos ao caractere especial, podendo ser um número de 0 a 7, e data se refere ao array criado para formar o símbolo do grau.

O comando delay no final do programa não deve ter um valor abaixo de 2000 (2 segundos), que é o valor mínimo para que o sensor possa fornecer os dados corretamente.

//Programa : Temperatura e umidade com o DHT11 e LCD 16x2
//Autor : FILIPEFLOP

#include <LiquidCrystal.h> //Carrega a biblioteca LCD
#include <DHT.h> //Carrega a biblioteca DHT

//Define a ligação ao pino de dados do sensor
#define DHTPIN A5

//Define o tipo de sensor DHT utilizado
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

//Define os pinos que serão ligados ao LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

//Array simbolo grau
byte grau[8] ={ B00001100,
                B00010010,
                B00010010,
                B00001100,
                B00000000,
                B00000000,
                B00000000,
                B00000000,};

void setup()
{
Serial.begin(9600); //Inicializa a serial
lcd.begin(16,2); //Inicializa LCD
lcd.clear(); //Limpa o LCD
//Cria o caractere customizado com o simbolo do grau
lcd.createChar(0, grau);
}

void loop()
{
float h = dht.readHumidity(); //Le o valor da umidade
float t = dht.readTemperature(); //Le o valor da temperatura
lcd.setCursor(0,0);
lcd.print("Temp : ");
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(t,1);
lcd.setCursor(12,0);

//Mostra o simbolo do grau formado pelo array
lcd.write((byte)0);

//Mostra o simbolo do grau quadrado
//lcd.print((char)223);

lcd.setCursor(0,1);
lcd.print("Umid : ");
lcd.print(" ");
lcd.setCursor(7,1);
lcd.print(h,1);
lcd.setCursor(12,1);
lcd.print("%");

//Intervalo recomendado para leitura do sensor
delay(2000);
}

Possíveis erros

Caso o projeto não funcione, verifique alguns dos possíveis erros:

  • Verifique se os jumpers estão na mesma coluna dos terminais dos componentes, fazendo assim a conexão;
  • Verifique se os jumpers estão ligados nos pinos corretos no Arduino;
  • Verifique se as conexões do display LCD estão corretas;
  • Verifique se as conexões do DHT11 estão corretas;
  • Verifique se os pinos do potenciômetro estão bem inseridos na protoboard;
  • Verifique se a biblioteca DHT foi instalada corretamente e
  • Verifique se o código carregou na placa através da IDE Arduino.