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.