Este tutorial mostra uma maneira interessante de fazer a leitura da temperatura ambiente com o Arduino, e exibi-la em um display LCD 16x2 (em graus Celsius), utilizando conceitos básicos de sua programação e o sensor de temperatura LM35DZ.
Para isto, serão necessários os seguintes componentes:
- 1 placa Arduino
- 1 display LCD 16x2
- 1 potenciômetro de 10K
- 1 sensor de temperatura LM35
- Jumpers para conexão
Este sensor captura a temperatura externa e converte-a em um valor de tensão correspondente. No circuito, conectamos a saída Vo do sensor a porta analógica A0 do Arduino, que por sua vez, converte este sinal em um valor (float) de temperatura e assim, exibe no LCD. O potenciômetro de 10K ajusta o contraste do display.
A seguir, monte o circuito abaixo com o Arduino e os outros componentes:
Então, abra a IDE do Arduino e digite o seguinte código:
#include <LiquidCrystal.h> // Inclui a biblioteca para utilizar o LCD.
#define sensor 0 // Define o pino A0 como “sensor”
int Ventrada; // Variável para ler o sinal do pino do Arduino
float Temperatura; // Variável que recebe o valor convertido para temperatura.
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);
/* Esta função acima declara quais os pinos do Arduino serão utilizados para o controle do LCD */
void setup()
{
lcd.begin(16, 2); // Diz para o Arduino que o display é 16x2.
lcd.print("Temperatura: "); // Manda o texto para a tela do display
}
void loop()
{
Ventrada = analogRead (sensor); /* Manda o Arduino ler o pino e armazena
o valor em “Ventrada”. */
Temperatura=(500*Ventrada)/1023; /* Converte o valor de tensão em
temperatura e armazena na variável “Temperatura” */
lcd.setCursor(0, 1); // Move o cursor do display para a segunda linha.
lcd.print(Temperatura); // Exibe o valor de temperatura no display.
lcd.print(" C"); // Escreve “C” para dizer que a escala é Celsius.
delay(1000); /* Aguarda 1 segundo para efetuar uma nova leitura de
temperatura. */
}
Finalmente, faça o Upload para o seu Arduino.
O seu projeto para indicar temperatura está pronto !!! Esperamos que tenha gostado. Qualquer dúvida, poste aqui mesmo.
Obs: o sensor LM35DZ converte temperaturas na faixa de -55ºC até 150ºC.
Para quem quiser, esta é a explicação para o cálculo de conversão de tensão para temperatura feita no software:
Neste sensor, para cada 1ºC recebido, sua saída é acrescida em 10mV, isto em uma faixa de 0 a 5V, com 10 bits de resolução para conversão Analógica/Digital (1024 valores diferentes para representar a temperatura). Assim, o valor máximo (1023, pois é de 0 a 1023) corresponderá aos 5V. A metade corresponderá a 511 ou 2,5V, e assim por diante. Para efeitos de cálculo, haveria 5V na saída do sensor para uma temperatura de 500ºC ( o que é diferente na prática). Porém, esta consideração nos permite generalizar isto para a seguinte regra de três:
Temperatura ----- Ventrada
500ºC ----- 1023 (valores máximos)
Assim, teremos:
Temperatura = (500*Ventrada)/1023, e este valor é exibido no display.
Até a próxima !!!
Links de Referência:
- arduino.cc/en/Tutorial/LiquidCrystal
Comentar
Comentário de leandro claudino de araujo em 19 maio 2013 às 12:47 ola amigos, estou montando uma mini estufa de morangos, e gostaria de além de controla a temperatura, gostaria que quando chegasse a uma temperatura acima de x fosse ligado um modulo de rele onde ligara um cooler uma bomba de água e luz , variando a ligação desse modulo conforme a temperatura EX:
(temp. < 15°c) ligar luz
(temp. > 30°c) ligar cooler
(humid. < 40%) ligar ligar bomba de água
arduino mega 2560
lcd 16x2
mudulo rele com 4 saídas
sensor DHT11
Comentário de Fabiano Anhaia em 13 abril 2013 às 1:39
Comentário de Pedro Henrique Fechener Waksman em 14 março 2013 às 16:30 as leituras negativas, pesquisando um pouco na internet, no site do arduino memso fala isso, vem da liguagem da programação quando estoura um inteiro ou conversão direta de valores tipo de float para inteiro as vezes da isso. Note que no exemplo eu troquei a funcao para float, assim elimina as leituras negativas. Bom eu acho que era isso, apesar do exemplo original do topico tambem está em Float.
Comentário de Pedro Henrique Fechener Waksman em 14 março 2013 às 16:26 só complementando, pra quem ainda ta iniciando e nao tem muito material ou nao entende muito dos termos mais tecnicos, como eu. Consegui estabilizar muito bem a conta fazendo uma média de 10 leituras (5 por segundo). A função que faz o calculo é a simplificação desta: "Leitura * 500 / 1023", simplificada por 20, resulta em: "(Leitura * 25) / 51.15" o código ficou assim:
// include the library code:
#include <LiquidCrystal.h>
int voltas;
int valor;
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
Serial.begin(9600);
voltas = 0;
valor = 0;
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("Inicializando!");
}
void loop() {
if (voltas < 10){
valor = valor + analogRead(A0);
voltas = voltas + 1;
}
if (voltas == 10 ){
float vLido = valor / 10;
float temperatura = LeituraParaGraus(vLido);
Serial.print("Teste 1: ");
Serial.print(temperatura);
Serial.println(" C");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temperatura: ");
lcd.setCursor(0, 1);
lcd.print(temperatura);
lcd.print(" C");
voltas = 0;
valor = 0.00;
}
delay(200); // delay in between reads for stability
}
float LeituraParaGraus(float Leitura){
return (Leitura * 25) / 51.15;
}
Comentário de José Carlos dos Santos Jesus em 6 março 2013 às 23:18 Olá Pedro,
Obrigado por sua resposta. Eu busquei um aparelho de estufa que indica a temperatura e a umidade relativa e tentei "calibrar" a fórmula de conversão em função deste aparelho e o resultado que mais aproximou foi mudar na fórmula o valor de 500 para 519. Usei também uma biblioteca para o LM35 e plotei o resultados dos dois métodos lado a lado no LCD. Descobri que você colocar um capacitor de 100 pF entre os pinos Gnd e +VS do LM35 reduzir os ruídos e estabiliza mais as leituras da temperatura.
Comentário de Pedro Henrique Fechener Waksman em 6 março 2013 às 22:42 Se eu nao entendi errado, quando voce liga ele, ele fica meio "doido", lendo temperaturas meio fora, tipo, -20, depois 22 mas ai estabiliza. Reparei tambem que a voltagem fornecida nao sai precisa, baixei o valor da multiplicacao de 500 para 430 ficou perfeito, ta identico ao que mostra no AR aqui. :)
Comentário de José Carlos dos Santos Jesus em 4 março 2013 às 8:54 Prezados companheiros,
Eu sou novato em arduido apesar de ser velhos com eletrônica e programação. Eu ao montar este experimento no arduino obtive um resultado curioso. Tudo funcionou perfeitamente com exceção do valor da temperatura ambiente mostrada na tela de LCD. Sempre mostra uma temperatura acima da realidade. Já verifiquei a fórmula de conversão de tensão para temperatura e na programação do arduino me parece que tudo esta perfeito.
Alguém com mais experiência pode me dar uma dica do que esta acontecendo?
Um abraço a todos
José Carlos
Comentário de Sydney Vianna Pinto Júnior em 22 dezembro 2012 às 1:44 Se substituir:
Temperatura=(500*Ventrada)/1023
por:
Temperatura= (Ventrada* 0.0049);
Temperatura= Temperatura*100;
A temperatura será mostrada com mais precisão.
:)
Comentário de Ricardo H.P. Barroso em 12 outubro 2012 às 0:07 como é feita a conexão com o LCD, na imagem ele parece esta solto ?
Comentário de danilo carnielo em 2 outubro 2012 às 12:44 obrigado pela dia mais tambem conseguimos mostrar hora ee temperatura, ex: mostra hora e temperatura.
tenho um relogio aqui apenas parte eletronica com led e gostaria de colocar Arduino junto pra funcionar.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
Por: R$ 29,00
Ou em até 6x de
R$ 5,18
Por: R$ 57,00
Ou em até 13x de
R$ 5,02
(com Arduino Uno REV3 Original)
Por: R$ 149,00
Ou em até 18x de
R$ 9,93
Kit Completo de Ferramentas - Avançado
Por: R$ 540,00
Ou em até 18x de
R$ 35,99
© 2013 Criado por Marcelo Rodrigues.
Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!
Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)