14 março 2013

Display LCD 16x2 e Sensor de temperatura LM35

Mostrei no último artigo como ligar o display LCD 16x2 WH1602A no Arduino. Hoje vamos acrescentar o sensor de temperatura LM35, e mostrar as informações de temperatura no display.

O circuito 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 :


display lcd e sensor de temperatura lm35
Depois disso, carregue o seguinte programa, que vai mostrar no display a temperatura atual, assim como a máxima e a mínima atingidas :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
// Programa : Display LCD 16 x 2 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;
}

18 comentários:

  1. qual a utilidade do potenciômetro nesse projeto????

    ResponderExcluir
    Respostas
    1. 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 !

      Excluir
  2. Não há necessidade de resistor para o LCD?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Não há necessidade, a não ser que você queira limitar o brilho.

      Abraço.

      Excluir
  3. Pode ligar mais de um sensor nessa placa?

    ResponderExcluir
    Respostas
    1. Bom dia,

      Pode sim, utilize as outras portas analógicas do Arduino.

      Abraço.

      Excluir
  4. posso utilizar a mesma programação no arduino pro micro com o sensor 18b20?

    ResponderExcluir
    Respostas
    1. 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!

      Excluir
  5. 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?

    ResponderExcluir
    Respostas
    1. 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!

      Excluir
  6. boa tarde, posso ligar no arduino uno quantos termometros ao mesmo tempo para temperatura em localidades distintas? obrigado

    ResponderExcluir
    Respostas
    1. 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!

      Excluir
  7. hahaha deu certinho!!! ótimo projeto!! só meu LCD q tinha a disposição dos pinos diferentes mas sem problemas!!

    ResponderExcluir
  8. Hahah ficou muito top!! acabei de terminar meu projeto!! Obrigado!! so meu LCD que tinha a disposição dos pinos diferentes mas sem problemas!

    ResponderExcluir
  9. 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?

    ResponderExcluir
    Respostas
    1. Oi Francisco,

      Já fiz circuitos com o LM35, DHT11 e DHT22. Os valores foram muito próximos.

      Abraço!

      Excluir
  10. A temperatura quando é menor do que 10° mostra com um zero no final
    por exemplo se for 9° mostra 90°

    ResponderExcluir
    Respostas
    1. 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!

      Excluir