Código de Pesquisa

Exibindo a temperatura de um LM35 em um LCD1602 em Celsius, Fahrenheit e Kelvin

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.

LM35_com_LCD-1

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.

LM35_pinout

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

LM35_LCD1602_wiring_new

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

LM35_com_LCD-2

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

Imagens

LM35_pinout
LM35_pinout
LM35_LCD1602_wiring_new
LM35_LCD1602_wiring_new
LM35_with_LCD-2
LM35_with_LCD-2
LM35_with_LCD-1
LM35_with_LCD-1
326-On Lm35 Prints the temperature as C, F, or K on the LCD1602 or LCD2004
Idioma: C++
/*
 * 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

Recursos e referências

Arquivos📁

Nenhum arquivo disponível.