Display LCD 16×2 e Sensor de temperatura LM35

Mostrei no último artigo como ligar o display LCD 16×2 WH1602A no Arduino. Hoje vamos acrescentar o sensor de temperatura LM35 e mostrar as informações de temperatura no display, com máximas e mínimas registradas.

Observação: hoje não é tão comum encontrar o display com o controlador WH1602A, sendo mais fácil usar um com o controlador HD44780, que virou praticamente um padrão de ligação em displays LCD. Se for usar um HD44780, apenas fique atendo à pinagem, que é um pouco diferente desta ligação que vamos apresentar. Para mais detalhes consulte o post Display LCD 16×2 Arduino HD44780.

Circuito LM35 com Arduino e display LCD

O circuito do LM35 com Arduino Uno não tem grandes alterações, basta ligar o display como explicado no post anterior, e acrescentar o LM35, ligando-o a entrada analógica A0.

O circuito fica assim, lembrando que você pode utilizar outras placas da linha Arduino, como por exemplo o Arduino Mega 2560:

Lembrando que o potenciômetro conectado no display é usado para ajuste do contraste, ok?

Programa sensor de temperatura LM35

Montado o circuito, carregue o seguinte programa, que vai mostrar no display a temperatura atual, assim como a máxima e a mínima atingidas:

//Programa: Display LCD 16x2 e sensor de temperatura LM35
//Autor: Arduino e Cia

#include <LiquidCrystal.h>

//Pino analogico para ligacao do LM35
int pin = 0; 

//Variaveis que armazenam a temperatura em Celsius e Fahrenheit
int tempc = 0,tempf=0; 

//Array para precisão na medição
int samples[8]; 

//Variáveis que guardam a temperatura máxima e mínima
int maxtemp = -100,mintemp = 100; 

int i;

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

//Array que desenha o simbolo de grau
byte a[8]= {B00110,B01001,B00110,B00000,B00000,B00000,B00000,B00000,}; 

void setup()
{
  Serial.begin(9600); //Inicializa comunicação serial
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  lcd.begin(16, 2); //Inicializa 
  lcd.print("Temperatura: ");
  //Atribui a "1" o valor do array "A", que desenha o simbolo de grau
  lcd.createChar(1, a); 
  lcd.setCursor(7,1); //Coloca o cursor na coluna 7, linha 1
  lcd.write(1); //Escreve o simbolo de grau
  lcd.setCursor(15,0);
  lcd.write(1);
  lcd.setCursor(15,1);
  lcd.write(1);
}

void loop()
{
  //Loop que faz a leitura da temperatura 8 vezes
  for(i = 0;i<=7;i++)
  {
    samples[i] = ( 5.0 * analogRead(pin) * 100.0) / 1024.0;
    //A cada leitura, incrementa o valor da variavel tempc
    tempc = tempc + samples[i]; 
    delay(100);
  }

//Divide a variavel tempc por 8, para obter precisão na medição
tempc = tempc/8.0; 

//Converte a temperatura em Fahrenheit e armazena na variável tempf
tempf = (tempc * 9)/ 5 + 32; 

//Armazena a temperatura máxima na variável maxtemp
if(tempc > maxtemp) {maxtemp = tempc;} 

//Armazena a temperatura minima na variavel mintemp
if(tempc < mintemp) {mintemp = tempc;} 


//As linhas abaixo escrevem o valor da temperatura na saída serial
    Serial.print(tempc,DEC);
    Serial.print(" Celsius, ");
    Serial.print(tempf,DEC);
    Serial.print(" fahrenheit -> ");
    Serial.print(maxtemp,DEC);
    Serial.print(" Max, ");
    Serial.print(mintemp,DEC);
    Serial.println(" Min");

delay(100); 
lcd.setCursor(13, 0);
lcd.print(tempc,DEC); //Escreve no display o valor da temperatura
lcd.setCursor(0, 1);
lcd.print("Min:"); 
lcd.setCursor(5,1);  //Posiciona o cursor na coluna 5, linha 1 do display
lcd.print(mintemp,DEC); //Escreve no display o valor da temperatura minima
lcd.setCursor(9, 1); //Posiciona o cursor na coluna 9, linha 1 do display
lcd.print("Max: ");  //Escreve no display o valor da temperatura maxima
lcd.setCursor(13,1);
lcd.print(maxtemp,DEC);

tempc=0;
}

O programa também mostra as mesmas informações no serial monitor, se você desejar usar este circuito sem o display LCD.

Outro ponto a se registrar é que, ao desligar o Arduino, as informações de temperatura máxima e mínima são perdidas. Para evitar isso, uma alternativa é você usar a EEPROM do Arduino para guardar esses dados. No post Como gravar dados na memória EEPROM do Arduino eu mostro como você pode fazer isso de um jeito relativamente simples.

Por último, sugiro também o uso de um display LCD 16×2 nesse projeto. Por que? Porque ele utiliza a interface I2C para comunicação e somente dois fios de conexão no Arduino, reduzindo consideravelmente o tempo e a complexidade de montagem do projeto.

Posts com display LCD I2C você encontra neste link.

5/5 - (2 votos)

Related posts

Como usar o módulo I2C com Arduino e display LCD 16×2

by Arduino e Cia
10 anos ago

EasyEDA: Desenho de circuitos eletrônicos e PCB

by Arduino e Cia
8 anos ago

Sequencial de Leds com Arduino Uno

by Arduino e Cia
12 anos ago
Sair da versão mobile