Skip to Content

Tutorial de sensor de temperatura analógico LM35 con Arduino

Tutorial de sensor de temperatura analógico LM35 con Arduino

En este tutorial, aprenderás a utilizar un sensor de temperatura analógico LM35 con Arduino. ¡He incluido un diagrama de cableado y códigos de ejemplo para ayudarle a empezar!

En la primera parte de este artículo, puedes encontrar las especificaciones y el pinout del LM35. A continuación, veremos cómo conectar el sensor al Arduino.

El primer ejemplo de código se puede utilizar para tomar las lecturas de temperatura del sensor y mostrar los resultados en el Monitor Serial. En el segundo ejemplo, le mostraré cómo utilizar la tensión de referencia de 1,1 V incorporada en el Arduino para obtener lecturas más precisas. Por último, veremos cómo mostrar la temperatura en una pantalla LCD I2C para crear un termómetro independiente.

Si quiere saber más sobre otros sensores de temperatura, consulte los artículos siguientes.

Artículos recomendados

Suministros

Componentes de hardware

Sensor de temperatura analógico LM35 (TO-92)× 1Amazon
Arduino Uno× 1Amazon
Tablero de pruebas× 1Amazon
Cables de puente~ 10Amazon
LCD I2C de 16×2 caracteres× 1Amazon
Cable USB tipo A/B× 1Amazon

Software

Arduino IDEArduino IDE

Makerguides.com is a participant in the Amazon Services LLC Associates Program, an affiliate advertising program designed to provide a means for sites to earn advertising fees by advertising and linking to products on Amazon.com. As an Amazon Associate we earn from qualifying purchases.

Acerca de la LM35

El LM35 es un sensor de temperatura centígrado de precisión, barato, fabricado por Texas Instruments. Proporciona un voltaje de salida que es linealmente proporcional a la temperatura centígrada y es, por lo tanto, muy fácil de usar con el Arduino.

El sensor no requiere ninguna calibración o ajuste externo para proporcionar precisiones de ±0,5°C a temperatura ambiente y ±1°C en el rango de temperatura de -50°C a +155°C.

Una de las desventajas del sensor es que requiere una tensión de polarización negativa para leer temperaturas negativas. Así que si eso es necesario para tu proyecto, te recomiendo usar el DS18B20 o el TMP36 en su lugar. El TMP36 de Analog Devices es muy similar al LM35 y puede leer temperaturas de -40°C a 125°C sin ningún componente externo.

Puedes encontrar un tutorial dedicado al TMP36 y al DS18B20 aquí:

El factor de escala de salida del LM35 es de 10 mV/°C y proporciona una tensión de salida de 250 mV a 25°C (véase la figura siguiente).

Tensión de salida del LM35 en mV frente a la temperatura
Tensión de salida del LM35 en mV frente a la temperatura

Tenga en cuenta que el sensor funciona en un rango de tensión de 4 a 30 V y que la tensión de salida es independiente de la tensión de alimentación.

El LM35 forma parte de una serie de sensores de temperatura analógicos comercializados por Texas Instruments. Otros miembros de la serie son:

  • LM335 - tensión de salida directamente proporcional a la temperatura absoluta a 10 mV/°K.
  • LM34 - tensión de salida linealmente proporcional a la temperatura Fahrenheit 10 mV/°F.

Pinout de LM35

El LM35 viene en 4 paquetes diferentes, pero el tipo más común es el paquete de transistores TO-92 de 3 pines.

Paquete TO-92

El pinout del sensor es el siguiente:

Pinout del sensor de temperatura analógico LM35

Tenga en cuenta que la clavija 1 (+VS) es la más a la izquierda cuando el lado plano del sensor (con el texto impreso) está orientado hacia usted.

NombrePinDescripción
+VS1Clavija de alimentación positiva (4 - 30 V)
VOUT2Salida analógica del sensor de temperatura
GND3Clavija de tierra del dispositivo, conectada al terminal negativo de la fuente de alimentación

Puede encontrar las especificaciones del LM35 en la siguiente tabla.

Especificaciones del sensor de temperatura analógico LM35

Tensión de alimentación4 V a 30 V
Corriente de trabajo60 µA
Rango de temperatura-55°C a + 155°C
Precisión garantizada±0,5°C a +25°C
±1°C de -55°C a +150°C
Factor de escala de salida10 mV/°C
Tensión de salida a 25°C250 mV
Autocalentamiento<0.1°C in still air
PaqueteTO-92 de 3 polos
FabricanteTexas Instruments
CosteComprobar el precio

Para más información, también puede consultar la hoja de datos aquí:

Cableado - Conexión del sensor de temperatura analógico LM35 a Arduino

Conectar un LM35 al Arduino es muy fácil ya que sólo necesitas conectar 3 pines. Empieza por conectar el pin +VS a la salida de 5 V del Arduino y el pin GND a la tierra.

A continuación, conecta el pin del medio (VOUT) a cualquiera de las entradas analógicas del Arduino. En este caso, he utilizado el pin de entrada analógica A0.

Sensor de temperatura analógico LM35 con diagrama de cableado de Arduino Uno
Sensor de temperatura analógico LM35 con diagrama de cableado de Arduino Uno

Las conexiones también se indican en la tabla siguiente:

Conexiones del sensor de temperatura analógico LM35

LM35Arduino
Pin 1 (+VS)5 V
Pin 2 (VOUT)Pin A0
PIN 3 (GND)GND

Conversión de la tensión de salida del LM35 en temperatura

Para convertir la tensión de salida del sensor en la temperatura en grados centígrados, puede utilizar la siguiente fórmula:

Temperatura (°C) = VOUT / 10

con VOUT en milivoltios (mV). Así, si la salida del sensor es de 750 mV, la temperatura es de 75°C.

Como puedes ver en el diagrama de cableado anterior, la salida del LM35 está conectada a una de las entradas analógicas del Arduino. El valor de esta entrada analógica se puede leer con la función analogRead(). Sin embargo, esta función no devolverá realmente la tensión de salida del sensor.

Las placas Arduino contienen un convertidor analógico-digital (ADC) multicanal de 10 bits, que asignará los voltajes de entrada entre 0 y la tensión de funcionamiento (5 V o 3,3 V) a valores enteros entre 0 y 1023. En un Arduino Uno, por ejemplo, esto produce una resolución entre las lecturas de 5 voltios / 1024 unidades o, 0,0049 voltios (4,9 mV) por unidad.

Así que si usas analogRead() para leer el voltaje en una de las entradas analógicas del Arduino, obtendrás un valor entre 0 y 1023.

Para volver a convertir este valor en la tensión de salida del sensor, puedes utilizar

VOUT = lectura del ADC * (Vref / 1024)

Utilizaremos estas fórmulas en los ejemplos de código que aparecen a continuación.

Sensor de temperatura analógico LM35 con código de ejemplo de Arduino

Con el siguiente código de ejemplo, puedes leer la temperatura de un sensor LM35 y mostrarla en el Monitor Serial.

Puedes cargar el código de ejemplo en tu Arduino utilizando el IDE de Arduino.

/* LM35 analog temperature sensor with Arduino example code. More info: https://www.makerguides.com */

// Define to which pin of the Arduino the output of the LM35 is connected:
#define sensorPin A0

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);
}

void loop() {
  // Get a reading from the temperature sensor:
  int reading = analogRead(sensorPin);

  // Convert the reading into voltage:
  float voltage = reading * (5000 / 1024.0);

  // Convert the voltage into the temperature in degree Celsius:
  float temperature = voltage / 10;

  // Print the temperature in the Serial Monitor:
  Serial.print(temperature);
  Serial.print(" \xC2\xB0"); // shows degree symbol
  Serial.println("C");

  delay(1000); // wait a second between readings
}

Debería ver la siguiente salida en el Monitor Serial:

Salida del monitor en serie

Asegúrese de que la tasa de baudios del Monitor Serial también está ajustada a 9600.

Cómo funciona el código

En primer lugar, he definido a qué pin del Arduino se dirige el VOUT del sensor está conectado. En este caso, utilizamos el pin analógico A0. La declaración #define se puede utilizar para dar un nombre a un valor constante. El compilador sustituirá todas las referencias a esta constante por el valor definido cuando se compile el programa. Por lo tanto, en todos los casos en los que se menciona sensorPinel compilador lo sustituirá por A0 cuando se compile el programa.

// Define to which pin of the Arduino the output of the LM35 is connected:
#define sensorPin A0

En la sección de configuración del código, comenzamos la comunicación en serie a una velocidad de 9600 baudios.

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);
}

En la sección de bucle del código, comenzamos tomando una lectura del sensor con la función analogRead(pin).

  // Get a reading from the temperature sensor:
  int reading = analogRead(sensorPin);

A continuación, utilizamos las fórmulas que he mencionado antes en el artículo para convertir la lectura en tensión y luego en temperatura.

  // Convert the reading into voltage:
  float voltage = reading * (5000 / 1024.0);

  // Convert the voltage into the temperature in degree Celsius:
  float temperature = voltage / 10;

Por último, los resultados se imprimen en el monitor de serie:

  // Print the temperature in the Serial Monitor:
  Serial.print(temperature);
  Serial.print(" \xC2\xB0"); // shows degree symbol
  Serial.println("C");

Mejorar la precisión de las lecturas

Como hemos utilizado la tensión de referencia por defecto del Arduino para la entrada analógica (es decir, el valor utilizado como tope del rango de entrada), la resolución máxima que obtenemos del ADC es de 5000/1024 = 4,88 mV o 0,49°C.

Si queremos una mayor precisión, podemos utilizar la referencia incorporada de 1,1 V del Arduino en su lugar. Este voltaje de referencia se puede cambiar usando la función analogReference().

Con 1,1 V como tensión de referencia, obtenemos una resolución de 1100/1024 = 1,07 mV o 0,11°C. Tenga en cuenta que esto limita el rango de temperatura que podemos medir a 0 a 110 grados Celsius.

He resaltado las líneas que necesitas añadir/cambiar en el código de abajo:

/* LM35 analog temperature sensor with Arduino example code. More info: https://www.makerguides.com */

// Define to which pin of the Arduino the output of the LM35 is connected:
#define sensorPin A0

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);

  // Set the reference voltage for analog input to the built-in 1.1 V reference:
  analogReference(INTERNAL);
}

void loop() {
  // Get a reading from the temperature sensor:
  int reading = analogRead(sensorPin);

  // Convert the reading into voltage:
  float voltage = reading * (1100 / 1024.0);

  // Convert the voltage into the temperature in degree Celsius:
  float temperature = voltage / 10;

  // Print the temperature in the Serial Monitor:
  Serial.print(temperature);
  Serial.print(" \xC2\xB0"); // shows degree symbol
  Serial.println("C");

  delay(1000); // wait a second between readings
}
Observe los incrementos más pequeños entre las lecturas

LM35 con LCD I2C y código de ejemplo de Arduino

Si quieres hacer un termómetro autónomo que no necesite un ordenador, puede ser bueno saber cómo mostrar las lecturas de temperatura en una pantalla LCD.

Con el código de ejemplo que se muestra a continuación, puede mostrar las lecturas de temperatura en una pantalla LCD I2C de 16×2 caracteres.

Connecting the I2C LCD is fairly easy as you can see in the wiring diagram below. You can check out my detailed tutorial on How to control a character I2C LCD with Arduino for more information. If you want to use a standard non-I2C LCD instead, take a look at How to use a 16×2 character LCD with Arduino.

Sensor de temperatura analógico LM35 con LCD I2C de 16x2 caracteres y diagrama de cableado de Arduino.
Sensor de temperatura analógico LM35 con LCD I2C de 16×2 caracteres y diagrama de cableado de Arduino.

Las conexiones también se indican en la tabla siguiente:

Conexiones I2C LCD

LCD de caracteres I2CArduino
GNDGND
VCC5 V
SDAA4
SCLA5

Tenga en cuenta que el sensor de temperatura LM35 está conectado de la misma manera que antes.

Instalación de las librerías Arduino necesarias

Para utilizar una pantalla LCD I2C, es necesario instalar la biblioteca LiquidCrystal_I2C Arduino.

Para instalar esta biblioteca, vaya a Herramientas > Gestionar Bibliotecas (Ctrl + Shift + I en Windows) en el IDE de Arduino. El Administrador de Bibliotecas se abrirá y actualizará la lista de bibliotecas instaladas.

Instalar una librería Arduino paso 1 abrir Library Manager
Library Manager

Ahora busca 'liquidcrystal_i2c' y busca la biblioteca de Frank de Brabander. Selecciona la última versión y haz clic en Instalar.

Instalación de la biblioteca LiquidCrystal_I2C Arduino

Código de ejemplo de LM35 con I2C LCD

/* LM35 analog temperature sensor with I2C LCD and Arduino example code. More info: https://www.makerguides.com */

// Include the required Arduino libraries:
#include "LiquidCrystal_I2C.h"

// Create a new instance of the LiquidCrystal_I2C class:
LiquidCrystal_I2C lcd(0x27, 16, 2);

// Degree symbol:
byte Degree[] = {
  B00111,
  B00101,
  B00111,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000
};

// Define to which pin of the Arduino the output of the LM35 is connected:
#define sensorPin A0

void setup() {
  // Start the LCD and turn on the backlight:
  lcd.init();
  lcd.backlight();

  // Create a custom character:
  lcd.createChar(0, Degree);
}

void loop() {
  // Get a reading from the temperature sensor:
  int reading = analogRead(sensorPin);

  // Convert the reading into voltage:
  float voltage = reading * (5000 / 1024.0);

  // Convert the voltage into the temperature in degree Celsius:
  float temperature = voltage / 10;

  // Print the temperature on the LCD;
  lcd.setCursor(0, 0);
  lcd.print("Temperature:");
  lcd.setCursor(0, 1);
  lcd.print(temperature);
  lcd.write(0); // print the custom character
  lcd.print("C");

  delay(1000); // wait a second between readings
}

Debería ver la siguiente salida en la pantalla LCD:

DS18B20-16x2-I2C-LCD-output
Salida LCD

Conclusión

En este tutorial, he mostrado cómo utilizar un sensor de temperatura analógico LM35 con Arduino. Espero que lo hayas encontrado útil e informativo. Si lo hiciste, por favor comparte este artículo con un amigo que también le guste la electrónica y hacer cosas.

Me encantaría saber qué proyectos planeas construir (o ya has construido) con este sensor. Si tienes alguna pregunta, sugerencia, o si crees que faltan cosas en este tutorial, por favor deja un comentario abajo.

Tenga en cuenta que los comentarios son retenidos por la moderación para evitar el spam.

Licencia Creative Commons

Philip

Monday 26th of June 2023

The statement for Vout is wrong. To determine the voltage returned by the analogRead(): Vout = (reading from ADC *(Vref/1023) >>> NOT 1024! 1024 is the number of possible readings from the ADC but one of those readings is 0 which is the starting point. The number of discrete segments is 1023. The reading should be divided by the highest number of segments. For example, suppose the ADC returned a number between 0 and 10. To find the proportion, the number would be divided by 10 (the highest reading) and not by 11 (the number of possible readings including 0).