Componentes Eletronicos

Medidor de Temperatura com Arduino – Tutorial Definitivo

Eletrogate 14 de agosto de 2020

Introdução

Neste tutorial, veremos a aplicação do Display LCD (Liquid Crystal Display, em inglês) usado para representar um medidor de temperatura que será dado pelo LM35. Para deixar o projeto mais visual possível, utilizaremos também 2 LED’s para indiciar se a temperatura está acima ou abaixo da temperatura padrão.

Veja só o protótipo final montado:

Medidor de temperatura com Arduino

Projeto medidor de temperatura

Este projeto te possibilita fazer medições em qualquer ambiente que estiver, do seu próprio corpo e de objetos ao seu redor (aproxime um isqueiro no sensor e veja como a temperatura aumenta drasticamente).

Além disso, com este tutorial você irá entender a lógica por trás da programação do LCD e do LM35 e no final desde artigo, iremos te recomendar um mapa mental das principais funções utilizadas com Arduino e os principais artigos aqui do blog sobre programação em C/C++ para te ajudar durante a construção dos seus projetos.

Ademais, caso você se você ainda não sabe como um LCD funciona, ou, gostaria de se aprofundar mais sobre este componente, recomendamos que leia nosso tutorial completo sobre o componente aqui.

Medidor de temperatura com Arduino - Display LCD

Display LCD 16×2 utilizado no projeto

Já se sua dúvida for com o medidor de temperatura, veja este tutorial:

Medidor de temperatura com Arduino - sensor LM35

Medidor de temperatura LM35 utilizado no projeto

Caso tenha dificuldade com potenciômetros, acesse este guia.

Medidor de temperatura com Arduino - Potenciometro

Potenciômetro utilizado no projeto


Materiais Necessários para o Projeto Medidor de Temperatura com Arduino

Você irá precisar de:

cta_cart

Sabemos que existem diversos outros sensores no mercado. Então, porque utilizamos o sensor LM35 neste tutorial? E qual a diferença deste componente para os outros existentes?

O LM35 é um CI de baixo custo e de baixa tensão que requer uma fonte de alimentação de +4 VDC a +20 VDC. Isso é ideal porque podemos alimentar o sensor com a saída de +5 V do Arduino. Sua acurácia para 25°C é ± 0.4 (vide datasheet) enquanto que, à -10 °C o sensor pode variar em ± 0.5 na medição.

Já a pinagem do componente, o LM35 possui apenas 3 pinos, 2 para a fonte de alimentação e um para a saída analógica. O pino de saída fornece uma saída de tensão analógica que é linearmente proporcional à temperatura em graus Celsius.

Segue abaixo ilustração dos pinos:

Sensor de temperatura LM35

Esquema dos pinos do sensor LM35

A saída varia de 0 V – 1,75 V, quando alimentado por uma única fonte de alimentação. Uma saída de 0 V corresponde a uma temperatura de 0°C, e a saída aumenta 10 Mv para cada aumento de grau na temperatura.

Em síntese, os benefícios e principais características do medidor de temperatura LM35 são:

  • Operação em torno de 2,7 V a 5,5 V;
  • Trabalha entre temperaturas de −55 ° C a + 150 ° C;
  • Calibrado diretamente em ° C;
  • Auto aquecimento baixo;
  • Fator de escala de 10 Mv / ° C;
  • Linearidade de ± 0,5 ° C;
  • Estável com grandes cargas capacitivas;
  • Menos de 50 Μa de corrente quiescente;
  • Corrente de desligamento 0,5 Μa máx.;
  • Qualificado para aplicações automotivas.

Montagem do Circuito

O circuito do medidor de temperatura que construímos está mostrado abaixo:

Montagem dos componentes do projeto

Montagem dos componentes do projeto.

Lembre-se de que você pode usar qualquer tensão entre 2,7 V e 5,5 V como fonte de alimentação. Para este exemplo, estamos utilizando uma fonte de 5 V, mas observe que você pode utilizar uma fonte de 3,3 V com a mesma facilidade. Não importa qual fonte você use, a leitura de tensão analógica variará de cerca de 0 V (terra) a cerca de 1,75 V.

Já o esquema elétrico está representado abaixo:

Esquema elétrico do projeto

Esquema elétrico do projeto

Se estiver usando um Arduino de 5 V e conectando o sensor diretamente a um pino analógico, você pode usar estas fórmulas para transformar a leitura analógica de 10 bits em uma temperatura:

Tensão no pino em MiliVolts = (leitura do ADC) * (5000/1024)
Esta fórmula converte o número 0-1023 do ADC em 0-5000Mv (= 5V)

Se estiver usando um Arduino de 3,3 V, você terá que escrever esta fórmula:

Tensão no pino em MiliVolts = (leitura do ADC) * (3300/1024)
Esta fórmula converte o número 0-1023 do ADC em 0-3300Mv (= 3,3V)

Então, para converter milivolts em temperatura, use esta fórmula:

Temperatura °C = [(tensão analógica em Mv) – 500] / 10

Como medir a temperatura

Usar o LM35 é fácil, basta conectar o pino esquerdo à alimentação (2,7-5,5 V) e o pino direito ao GND. Então, o pino do meio terá uma tensão analógica que é diretamente proporcional (linear) à temperatura. A tensão analógica é independente da fonte de alimentação.

Para converter a tensão em temperatura, neste tutorial usamos a seguinte fórmula:

temperatura = (tensao) * 100.0

onde, tensao = (valorSensor/1024.0)*5.0

Ou seja, para uma tensão de 0.29 volts teríamos um valor de 29° C.

Para converter a temperatura em °C para Fahrenheit, basta fazer:

Temp em °F = (temperatura*9)/5 + 32;

No entanto, não precisa se preocupar com os cálculos pois eles estão todos prontos no código para você usar em seu projeto.

Código utilizado no projeto

Abaixo está o código utilizado no projeto:

/*
      Projeto Medidor de Temperatura Eletrogate  

      Tutorial programando um sensor de temperatura LM35 e um display LCD
      Criado por Flávio Babos (https://flaviobabos.com.br/arduino/)

*/

//Inclua a biblioteca do LCD
#include <LiquidCrystal.h>

//Defina as portas do Arduino para cada pino do LCD
const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); 

//Defina a temperaturaC ambiente do lugar em que estiver para que as LED's acendam com base nisso
int tempPadrao = 24;

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

//declare a variável de leitura do sensor
const int sensorLM35 = A0; 
       
int i;
float temperaturaC = 0;

void setup() {

  //Inicializa comunicação serial
  Serial.begin(9600);

  //Método de percorrer os pinos e ao mesmo tempo declara-los como saída 
  for(i=8; i<12; i++){
    pinMode(i, OUTPUT);
  }

  //Inicializa o LCD e posteriormente exibe a temperaturaC e a tensão
  lcd.begin(16, 2);
  lcd.print("Temp: ");
  lcd.setCursor(0, 2);
  lcd.print("Tensao: ");
  lcd.setCursor(12, 2);
  lcd.print("V");

  //Atribui a "1" o valor do array "A", que desenha o simbolo de grau
  lcd.createChar(1, a);
  //Coloca o cursor na coluna 7, linha 1 
  lcd.setCursor(10,0); 
  //Escreve o simbolo de grau
  lcd.write(1);
}            

void loop() {

  //Variável que faz a leitura do sensor
  int valorSensor = analogRead(sensorLM35);

  //Conversao da leitura do sensor em tensão V
  float tensao = (valorSensor/1024.0)*5.0; 
  
  //Divide a variavel temperaturaC por 8, para obter precisão na medição
  temperaturaC = (tensao) * 100.0; 

  //Conversão de Celsius para Fahrenheit
  float temperaturaF = (temperaturaC*9)/5 + 32;

  //mostra no monitor serial o valor lido
  Serial.print("Valor do sensor: ");       
  Serial. print(valorSensor);

  //Mostra no monitor serial a tensão lida
  Serial.print(", Tensao (V): ");          
  Serial.print(tensao); 
  //Mostra no monitor serial os graus lidos
  Serial.print(", Celsius: ");
  Serial.print(temperaturaC);
  //Printa no serial monitor o valor convertido
  Serial.print(", Fahrenheit: ");
  Serial.println(temperaturaF);

  delay(100); 
  lcd.setCursor(6, 0);
  //Escreve no display o valor da temperaturaC
  lcd.print(temperaturaC,1);

  lcd.setCursor(8, 1);
  //Escreve no display o valor da tensão
  lcd.print(tensao,2); 
  
  if(temperaturaC < tempPadrao){      //se a temperaturaC lida for inferior a 27 °C
    digitalWrite(10, HIGH);            //apaga led da porta 10
    digitalWrite(11, LOW);            //apaga led da porta 11
        
  }else if(temperaturaC >= tempPadrao){  //se a temperaturaC lida estiver entre 27 ºC e 31 ºC
    digitalWrite(10, HIGH);           //acende led da porta 10
    digitalWrite(11, HIGH);            //apaga led da porta 11
  
  delay(1000);
  }
}
A programação passo a passo do medidor de temperatura

Defina as portas do LCD a serem usadas

const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

Use esta imagem como parâmetro para fazer as ligações em seu componente:

Esquema de pinos do display LCD

Esquema de pinos do display LCD

Variáveis do projeto

int tempPadrao = 24;
byte a[8]= {B00110,B01001,B00110,B00000,B00000,B00000,B00000,B00000,};
const int sensorLM35 = A0;
int i;
float temperaturaC = 0;

Essas são as variáveis universais declaradas antes do setup (). Para a temperatura que está representando o ambiente (no caso utilizamos 24 °C), faça a primeira medição e adeque o valor de acordo com a temperatura do ambiente em que estiver e alterando, posteriormente, a variável tempPadrao.

Já para desenhar o caractere de grau “°”, declare uma variável byte e defina-a como um array “a” de 8 elementos.

Além disso, não se esqueça de determinar a porta que o seu LM35 estiver conectado e defina-o como leitura const int. Ademais declare a variável temperatura como float.

Setup de inicialização

void setup() {
  Serial.begin(9600);
  for(i=8; i<12; i++){
    pinMode(i, OUTPUT);
  }

Inicie a comunicação serial em 9600 e declare os pinos utilizados aqui como OUTPUT em um laço de repetição for para economizar linha de código e otimizar sua programação.

Leitura do LCD

lcd.begin(16, 2);
  lcd.print("Temp: ");
  lcd.setCursor(0, 2);
  lcd.print("Tensao: ");
  lcd.setCursor(12, 2);
  lcd.print("V");
  lcd.createChar(1, a);
  lcd.setCursor(10,0);
  lcd.write(1);
}

Inicialize o LCD de forma a exibir a temperatura e a tensão coletada do sensor. Da mesma forma, escreva os símbolos de medição que representam o grau e a tensão (V).

Loop do programa

void loop() {
  int valorSensor = analogRead(sensorLM35);
  float tensao = (valorSensor/1024.0)*5.0;
  temperaturaC = (tensao) * 100.0;
  float temperaturaF = (temperaturaC*9)/5 + 32;

É aqui que o código irá: coletar as informações do sensor em valorSensor, transformar o valor lido em uma tensão, fazer a conversão de tensão em temperatura °C e transformar essa temperatura em °F.

Monitor Serial

Serial.print("Valor do sensor: ");      
Serial. print(valorSensor);
Serial.print(", Tensao (V): ");         
Serial.print(tensao);
Serial.print(", Celsius: ");
Serial.print(temperaturaC);
Serial.print(", Fahrenheit: ");
Serial.println(temperaturaF);
delay(100);

Essas linhas de comando são escritas para você poder acompanhar as leituras exibidas na tela do seu computador e validar as leituras exibidas no LCD e LED’s.

Os valores deverão aparecer da seguinte forma em seu monitor serial:

Medidor de temperatura – Monitor Serial

Não se esqueça de inserir um delay () entre a exibição dos valores no monitor serial e a exibição deles no LCD.

Exibição da temperatura e da tensão no seu LCD

lcd.setCursor(6, 0);
lcd.print(temperaturaC,1);
lcd.setCursor(8, 1);
lcd.print(tensao,2);

Já essas linhas de código são cruciais para exibir, no display, a temperatura até então calculada e a tensão gerada pelo sensor. Para fazer isso use lcd.setCursor(coluna, linha) onde o primeiro atributo se refere a coluna e o segundo a linha do LCD.

Acendendo os LED’s

  if(temperaturaC < tempPadrao){     
    digitalWrite(10, HIGH);         
    digitalWrite(11, LOW);      
    
  }else if(temperaturaC >= tempPadrao){ 
    digitalWrite(10, HIGH);          
    digitalWrite(11, HIGH);           
  delay(1000);
  }
}

Agora entra em jogo a temperatura padrão que você definiu no começo no código. Para nós aqui da eletrogate, a temperatura está em 27 °C mas para você, essa temperatura pode variar para mais ou para menos. Portanto, certifique-se de que a temperatura ambiente esteja condizente e use condicional if () para acender/apagar seus LED’s.

Medidor de temperatura com Arduino - LED's

Um LED aceso pois temperatura está abaixo da temperatura padrão de 24 °C


Conclusão

Hoje aprendemos a construir um sistema de medição da temperatura ambiente e da temperatura corporal com um display LCD e um LM35. Nesse sentido, para ajudar você na sua caminhada de programação, recomendamos utilizar o mapa mental abaixo que contém as principais funções utilizadas nos códigos do Arduino IDE:

Mapa mental principais funções no Arduino IDE

Baixe o mapa mental em alta definição das principais funções com Arduino aqui.

E, indicamos você estudar nossos artigos sobre programação na IDE do Arduino:

Caso deseje se aprofundar na plataforma Arduino, leia nosso artigo completo:

Se ainda assim possuir alguma dúvida de programação ou de projeto, utilize os comentários abaixo e deixe-nos saber para te ajudar.

Por fim, se tiver gostado do tutorial ou se ele te ajudou de alguma forma não deixe de o curtir e o compartilhar com seus amigos!

Para ficar melhor informado (a) sobre futuras promoções e futuros tutoriais, recomendamos nos acompanhar no Instagram @eletrogate.

Parabéns se você leu até aqui e até o próximo projeto.

Tenha a Metodologia Eletrogate na sua Escola! Conheça nosso Programa de Robótica Educacional.


Sobre o Autor


Flavio Babos

Graduando em Engenharia Mecatrônica na UFU, descobriu o Arduino em 2014 e, desde então, não parou de fazer projetos com a plataforma. Flávio busca trazer conteúdos de uma maneira diferente aqui na eletrogate e em seu blog pessoal. Sempre se interessou por eletrônica e robótica e adora assuntos de negócios e gestão de empresas.


Eletrogate

14 de agosto de 2020

A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.

Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!

Eletrogate Robô

Cadastre-se e fique por
dentro de novidades!