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.
qual a utilidade do potenciômetro nesse projeto????
Boa tarde Kélvin,
Obrigado pela visita. O potenciômetro serve apenas para ajustar o contraste do display. Você pode fazer alguns testes e trocá-lo por um resistor.
Abraço !
Não há necessidade de resistor para o LCD?
Boa noite,
Não há necessidade, a não ser que você queira limitar o brilho.
Abraço.
Pode ligar mais de um sensor nessa placa?
Bom dia,
Pode sim, utilize as outras portas analógicas do Arduino.
Abraço.
posso utilizar a mesma programação no arduino pro micro com o sensor 18b20?
Boa noite Marcelo,
Não, pois a forma de comunicação é diferente. Tente as informações desse post:
http://www.arduinoecia.com.br/2013/04/sensor-de-temperatura-ds18b20_11.html
Abraço!
Boa tarde, posso ligar um sensor de temperatura LM35 pra ele além de mostrar a tag do RFID também a temperatura no mesmo display?
Boa dia Gustavo,
Pode sim, vc só vai ter que alterar algumas coisas no código, porque nesse exemplo eu uso as portas 11 e 12 para o Display, e o leitor RFID também usa essas portas. Mas a alteração é tranquila de fazer.
Abraço!
boa tarde, posso ligar no arduino uno quantos termometros ao mesmo tempo para temperatura em localidades distintas? obrigado
Boa noite,
Para usar vários sensores de temperatura, eu recomendo o uso do DS18B20, tenho alguns posts sobre ele aqui no site.
Abraço!
hahaha deu certinho!!! ótimo projeto!! só meu LCD q tinha a disposição dos pinos diferentes mas sem problemas!!
Hahah ficou muito top!! acabei de terminar meu projeto!! Obrigado!! so meu LCD que tinha a disposição dos pinos diferentes mas sem problemas!
amigo gostaria de saber se essa leitura com lm 35 é real? se vc já fez comparação com outro termometro para ver se confere a temperatura?
Oi Francisco,
Já fiz circuitos com o LM35, DHT11 e DHT22. Os valores foram muito próximos.
Abraço!
A temperatura quando é menor do que 10° mostra com um zero no final
por exemplo se for 9° mostra 90°
Oi Rossato,
O que acontece é que o programa não apaga o valor anterior. Antes de mostrar a temperatura na tela, adiciona duas linhas como essa no programa:
lcd.setCursor(13, 0);
lcd.print(" ");
Isso vai apagar o valor anterior e deixar só o 9 (ou outro valor com apenas 1 dígito)
Abraço!
em qual parte do programa add essas duas linhas ?
tem como eu acionar outra porta digital para quando a temperetura for maior que 2 graus pois quero colocar isso em uma geladeira
Não estou conseguindo ajustar o contraste do lcd. Poderia ser defeito no potenciômetro
Bom dia,
Sim, tanto no potenciômetro como no próprio LCD. Tente utilizar uma resistência simples para verificar se o problema é no potenciômetro.
Abraço!
Adilson
preciso da numeração dos pinos do display.
[…] Gostou? Confira também uma aplicação prática no post Display LCD 16×2 Winstar WH1602A e Sensor de temperatura LM35. […]