Exibindo a temperatura de um LM35 em um LCD1602 em Celsius, Fahrenheit e Kelvin
Neste tutorial, aprenderemos a usar um sensor de temperatura LM35 para medir a temperatura e exibir os resultados em um módulo LCD1602 em três unidades diferentes: Celsius, Fahrenheit e Kelvin. Este projeto é uma excelente maneira de combinar leituras de sensores com saída visual, aprimorando sua compreensão de como sensores e displays funcionam juntos em projetos com Arduino. Você verá como conectar os componentes corretamente e como implementar o código necessário para essa tarefa.
Para começar, usaremos o sensor de temperatura LM35, que é um dispositivo de três pinos. Ele emite uma tensão analógica que corresponde à temperatura em graus Celsius. O LCD1602 será usado para exibir as leituras de temperatura. Ao final do tutorial, você terá um sistema de exibição de temperatura totalmente funcional. Para mais esclarecimentos, confira o vídeo (no vídeo em 00:55).
Hardware Explicado
Os principais componentes deste projeto incluem o sensor de temperatura LM35 e o display LCD1602. O LM35 opera fornecendo uma saída de tensão que é linearmente proporcional à temperatura em Celsius, especificamente 10 mV/°C. Isso torna simples converter a leitura de tensão em uma leitura de temperatura usando cálculos simples no código.
O LCD1602 é um display de caracteres 16x2 que pode mostrar duas linhas de texto. Ele é controlado via uma interface I2C, que simplifica a fiação utilizando apenas quatro conexões: VCC, GND, SDA (linha de dados) e SCL (linha de clock). Esta configuração minimiza o número de pinos necessários no Arduino, permitindo conexões e gerenciamento mais fáceis.
Detalhes da Ficha Técnica
| Fabricante | Texas Instruments |
|---|---|
| Número da peça | LM35 |
| Tensão lógica/IO | 3-30 V |
| Tensão de saída | 10 mV/°C |
| Faixa de temperatura | -55 a +150 °C |
| Precisão | ±0,5 °C (típ.) |
| Pacote | TO-46, TO-220 |
- Certifique-se de que a fonte de alimentação seja adequada, mínimo de 4V para o LM35.
- Use um resistor de pull-up se necessário para as linhas SDA/SCL.
- Mantenha a fiação curta para minimizar o ruído.
- Desacople a fonte de alimentação com capacitores para estabilidade.
- Teste cada conexão antes de ligar o sistema.
Instruções de Fiação

Para ligar o sensor de temperatura LM35, conecte o pino da esquerda a uma fonte de alimentação de 5V do Arduino, que está definido no código comoVCC2O pino do meio, que é o pino de saída, deve ser conectado ao pino de entrada analógica.A0na placa Arduino. Finalmente, conecte o pino direito do LM35 ao terra.
Para o módulo LCD1602, conecte o pino de terra ao terra do Arduino. O pino VCC deve ser conectado à saída de 5V do Arduino. A linha de dados (SDA) deve ser conectada ao pino analógico.A4, enquanto a linha de relógio (SCL) deve se conectar aA5. Esta configuração permite que o Arduino se comunique com o LCD usando o protocolo I2C.
Exemplos de Código e Passo a Passo
No código, definimos o pino de entrada para o sensor LM35 e configuramos o LCD com seu endereço I2C. A função de configuração inicializa a comunicação serial e o display do LCD. O trecho a seguir mostra como inicializar os pinos:
const int inPin = A0; // Pin for LM35 output
const int VCC2 = 2; // Pin for LM35 VCC
const int iteration = 1000; // Number of readings for averaging
Aqui,inPinestá definido paraA0, onde a saída do LM35 é lida. OVCC2o pino é definido para alimentar o LM35, eiterationé usado para calcular a média das leituras de temperatura.
Em seguida, temos o loop principal que gerencia as leituras de temperatura e as exibe no LCD. Cada tipo de temperatura é exibido sequencialmente com um atraso:
lcdDisplay(getTemperature('C'),'C');
delay(2000);
lcdDisplay(getTemperature('F'),'F');
delay(2000);
lcdDisplay(getTemperature('K'),'K');
delay(2000);
Este bloco de código chama olcdDisplayfunção para mostrar a temperatura em Celsius, Fahrenheit e Kelvin, pausando por 2 segundos entre cada exibição.
O código completo será carregado abaixo deste artigo, onde você pode ver todas as funções e a lógica implementadas para ler a temperatura e exibi-la de acordo.
Demonstração / O que Esperar
Ao executar o projeto concluído, o LCD deve exibir as leituras de temperatura em Celsius, Fahrenheit e Kelvin, alternando entre cada exibição. Você pode testar a resposta do sensor aplicando calor, como o de um soprador térmico, e observando as mudanças na temperatura exibida (no vídeo em 09:15). Se o sensor estiver conectado a uma fonte de energia abaixo da voltagem recomendada, as leituras podem ser imprecisas, portanto, certifique-se de que funcione com um mínimo de 4V.
Marcas de Tempo do Vídeo
- 00:00- Introdução
- 00:55- Visão Geral do Hardware
- 03:30- Instruções de Fiação
- 06:15- Visão Geral do Código
- 09:15- Demonstração
/*
* This Arduino sketch is to use LM35 to measure temperature.
* Prints the temperature as C, F, or K on the LCD1602 or LCD2004 with I2C module (4 wires).
*
* Watch video instructions for this code: https://youtu.be/XpMtQVCMIRA
*
* Written by Ahmad Shamshiri on May 12, 2020 at 19:53 in Ajax, Ontario, Canada
* in Ajax, Ontario, Canada. www.robojax.com
*
or make a donation using PayPal: http://robojax.com/L/?id=64
* * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
const int inPin =A0;//can change
const int VCC2 =2;
const int iteration = 1000; //can change (see video)
const float LM35_FACTOR =0.01;// do not change
// start of settings for LCD1602 with I2C
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x26, 16, 2);
// end of settings for LCD1602 with I2C
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
Serial.println("Robojax LM35 with LCD for Arduino");
pinMode(VCC2,OUTPUT);
digitalWrite(VCC2, HIGH);
lcd.begin();
lcd.backlight();
lcd.print("Robojax LM35");
lcd.setCursor(0,1);
lcd.print("Temp: ");
}
// the loop routine runs over and over again forever:
void loop() {
//robojax.com LM35 with LCD Code for Arduino
lcdDisplay(getTemperature('C'),'C');
delay(2000);
lcdDisplay(getTemperature('F'),'F');
delay(2000);
lcdDisplay(getTemperature('K'),'K');
delay(2000);
if(getTemperature('C') >87)
{
// do something here (watch video)
}
// printTemperature('C');
// Serial.println();
// printTemperature('F');
// Serial.println();
// printTemperature('K');
// Serial.println();
// Serial.println();
// Serial.print(" Temperature: ");
// printDegree();
// Serial.print(getTemperature('C'));
// Serial.println();
delay(100);
}
/*
* getTemperature()
* @brief gets the average temperature
* @param average temperature
* @param "type" is character
* C = Celsius
* K = Kelvin
* F = Fahrenheit
* @return returns one of the values above
* Written by Ahmad Shamshiri for robojax.com
* on May 08, 2020 at 02:36 in Ajax, Ontario, Canada
*/
float getTemperature(char type)
{
float value;
float averageTemperature =0;
int sensorValue = analogRead(inPin);
float voltage = sensorValue * (5.0 / 1023.0);
float temperature = voltage / LM35_FACTOR;
for(int i=0; i< iteration; i++)
{
averageTemperature += temperature;
}
averageTemperature /=iteration;
if(type =='F')
{
value = averageTemperature *9/5 + 32;//convert to Fahrenheit
}else if(type =='K')
{
value = averageTemperature + 273.15;//convert to Kelvin
}else{
value = averageTemperature;// return Celsius
}
return value ;
}//getTemperature()
/*
* printTemperature()
* @brief prints temperature on serial monitor
* @param charact type
* @param "type" is character
* C = Celsius
* K = Kelvin
* F = Fahrenheit
* @return none
* Written by Ahmad Shamshiri for robojax.com
* on May 08, 2020 at 02:45 in Ajax, Ontario, Canada
*/
void printTemperature(char type)
{
float value;
float temp = getTemperature(type);
Serial.print(temp);
printDegree();
if(type =='F')
{
Serial.print("F");
}else if(type =='K')
{
Serial.print("K");
}else{
Serial.print("C");
}
}//printTemperature()
/*
* @brief prints degree symbol on serial monitor
* @param none
* @return returns nothing
* Written by Ahmad Shamshiri on July 13, 2019
* for Robojax Tutorial Robojax.com
*/
void printDegree()
{
Serial.print("\\xC2");
Serial.print("\\xB0");
}
/*
* lcdDisplay(float value,char symbol)
* displays value and title on LCD1602
* How to use:
* lcdDisplay(35.3,'C');
*/
void lcdDisplay(float value,char symbol)
{
// Robojax.com LCD1602 for LM35 Demo
for(int i=7; i<16;i++)
{
lcd.setCursor(i,1);
lcd.write(254);
}
lcd.setCursor (7,1); //
lcd.print(value);
lcd.print((char)223);
if(symbol =='F')
{
lcd.print("F");
}else if(symbol =='K')
{
lcd.print("K");
}else{
lcd.print("C");
}
// Robojax.com LCD1602 for LM35 Demo
}
Coisas que você pode precisar
-
AmazonasPurchase LM35 from Amazonamzn.to
-
eBayPurchase LM35 from eBayebay.us
Recursos e referências
-
Folha de dadosLM35 Datasheetti.com
-
ExternoLM35 folha de dados (PDF)ti.com
-
Interno
Arquivos📁
Nenhum arquivo disponível.