Mostrando la temperatura de un LM35 en un LCD1602 en Celsius, Fahrenheit y Kelvin
En este tutorial, aprenderemos cómo utilizar un sensor de temperatura LM35 para medir la temperatura y mostrar los resultados en un módulo LCD1602 en tres unidades diferentes: Celsius, Fahrenheit y Kelvin. Este proyecto es una excelente manera de combinar lecturas de sensores con salida visual, mejorando tu comprensión de cómo trabajan juntos los sensores y las pantallas en proyectos de Arduino. Verás cómo conectar correctamente los componentes y cómo implementar el código necesario para esta tarea.
Para comenzar, utilizaremos el sensor de temperatura LM35, que es un dispositivo de tres pines. Produce un voltaje analógico que corresponde a la temperatura en grados Celsius. Se utilizará el LCD1602 para mostrar las lecturas de temperatura. Al final del tutorial, tendrás un sistema de visualización de temperatura completamente funcional. Para más aclaraciones, consulta el video en (en el video a 00:55).
Hardware Explicado
Los componentes principales de este proyecto incluyen el sensor de temperatura LM35 y el display LCD1602. El LM35 funciona proporcionando una salida de voltaje que es linealmente proporcional a la temperatura en Celsius, específicamente 10 mV/°C. Esto facilita la conversión de la lectura de voltaje en una lectura de temperatura usando cálculos simples en el código.
El LCD1602 es una pantalla de caracteres de 16x2 que puede mostrar dos líneas de texto. Se controla a través de una interfaz I2C, lo que simplifica el cableado al utilizar solo cuatro conexiones: VCC, GND, SDA (línea de datos) y SCL (línea de reloj). Esta configuración minimiza el número de pines requeridos en el Arduino, lo que permite conexiones y gestión más sencillas.
Detalles de la hoja de datos
| Fabricante | Texas Instruments |
|---|---|
| Número de pieza | LM35 |
| Voltaje de lógica/IO | 3-30 V |
| Tensión de salida | 10 mV/°C |
| Rango de temperatura | -55 a +150 °C |
| Precisión | ±0.5 °C (típ.) |
| Paquete | TO-46, TO-220 |
- Asegúrese de proporcionar una fuente de alimentación adecuada, mínimo 4V para el LM35.
- Utiliza una resistencia de tirón si es necesario para las líneas SDA/SCL.
- Mantén el cableado corto para minimizar el ruido.
- Desacoplar la fuente de alimentación con capacitores para estabilidad.
- Prueba cada conexión antes de encender el sistema.
Instrucciones de cableado

Para conectar el sensor de temperatura LM35, conecta el pin izquierdo a una fuente de alimentación de 5V del Arduino, que se define en el código comoVCC2El pin del medio, que es el pin de salida, debería estar conectado al pin de entrada analógica.A0en el Arduino. Finalmente, conecta el pin derecho del LM35 a tierra.
Para el módulo LCD1602, conecta el pin de tierra al tierra del Arduino. El pin VCC debe conectarse a la salida de 5V del Arduino. La línea de datos (SDA) debe conectarse al pin analógico.A4, mientras que la línea de reloj (SCL) debe conectarse aA5Esta configuración permite que el Arduino se comunique con el LCD utilizando el protocolo I2C.
Ejemplos de código y guía paso a paso
En el código, definimos el pin de entrada para el sensor LM35 y configuramos el LCD con su dirección I2C. La función de configuración inicializa la comunicación serial y la pantalla LCD. El siguiente extracto muestra cómo inicializar los pines:
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
Aquí,inPinestá configurado paraA0, donde se lee la salida del LM35. ElVCC2se define un pin para alimentar el LM35, yiterationse utiliza para promediar las lecturas de temperatura.
A continuación, tenemos el bucle principal que maneja las lecturas de temperatura y las muestra en el LCD. Cada tipo de temperatura se muestra secuencialmente con un retraso:
lcdDisplay(getTemperature('C'),'C');
delay(2000);
lcdDisplay(getTemperature('F'),'F');
delay(2000);
lcdDisplay(getTemperature('K'),'K');
delay(2000);
Este bloque de código llama allcdDisplayfunción para mostrar la temperatura en Celsius, Fahrenheit y Kelvin, pausing durante 2 segundos entre cada exhibición.
El código completo se cargará debajo de este artículo, donde podrás ver todas las funciones y la lógica implementadas para leer la temperatura y mostrarla en consecuencia.
Demostración / Qué esperar
Cuando ejecutes el proyecto completado, el LCD debería mostrar las lecturas de temperatura en Celsius, Fahrenheit y Kelvin, alternando entre cada visualización. Puedes probar la respuesta del sensor aplicando calor, como el de un soplador de calor, y observando los cambios en la temperatura mostrada (en el video a las 09:15). Si el sensor está conectado a una fuente de alimentación por debajo del voltaje recomendado, las lecturas pueden ser inexactas, así que asegúrate de que funcione a un mínimo de 4V.
Sellos de tiempo del video
- 00:00- Introducción
- 00:55- Visión general del hardware
- 03:30- Instrucciones de cableado
- 06:15- Visión general del código
- 09:15- Demostración
/*
* 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
}
Cosas que podrías necesitar
-
AmazonasPurchase LM35 from Amazonamzn.to
-
eBayPurchase LM35 from eBayebay.us
Recursos y referencias
-
Hoja de datosLM35 Datasheetti.com
-
ExternoHoja de datos del LM35 (PDF)ti.com
-
Interno
Archivos📁
No hay archivos disponibles.