1. El Octavo Bit
  2. / Arduino
  3. / Proyectos para Arduino
  4. / Medir la temperatura con el sensor LM35 y Arduino

Medir la temperatura con el sensor LM35 y Arduino

| Actualizado:
Comentarios: 5

Medir la temperatura con el sensor LM35 y Arduino
Medir la temperatura con el sensor LM35 y Arduino

Veremos cómo medir la temperatura con el sensor analógico LM35 y mostrar el valor de la temperatura en el monitor serial de Arduino o en un display de 4 dígitos y 7 segmentos.

El LM35 es uno de los sensores de temperatura más populares, puede medir temperaturas desde los -55 hasta los 150 ºC. El ajuste de salida de voltaje del LM35 es proporcional al de su entrada, por cada grado que aumenta o disminuye, varía 10 mV por grado centrígrado.

Dependiendo del tipo de encapsulado, puede oscilar su escala de temperaturas:

  • LM35 / A: -55 ºC a 150 ºC
  • LM35C / A: -40 ºC a 11 ºC
  • LM35D: 0 a 100 ºC
Sensor de temperatura analógico LM35.
Sensor de temperatura analógico

El LM35 consta de 3 patillas: VCC o pin para su alimentación, con un rango de 4 a 30V; en el centro encontramos la patilla de salida, y la tercera, es la de tierra.

Leer la temperatura de un LM35 es muy sencillo, teniendo en cuenta que su salida de tensión tendrá un valor de 10mV por grado centrígrado, es decir que si el sensor estuviese a la temperatura de un grado, el sensor daría una salida de 10 mV. Por ejemplo:

  • A una temperatura de 24 ºC la lectura sería de 240 mV (0.240 V)
  • A una temperatura de 16.4 ºC la lectura sería de 164 mV (0.164 V)

¿Cómo calcular la temperatura a partir de la tensión del sensor LM35?

El sensor conectado a la placa Arduino se alimenta con 5V y la patilla de salida, se conecta a la entrada analógica A0, de esta forma con la función analogRead(A0) podemos leer el valor que guardaremos en una variable llamada sensor que puede tener un valor entre 0 y 1023, que equivale a una tensión entre 0 y 5V.

Cálculo de la temperatura a partir del sensor LM35

La fórmula para poder convertir la salida analógica del sensor LM35 a un valor digital sería:

Temperatura = ((sensor x 5000)/1023) / 10

Medir la temperatura con el sensor LM35 y mostrar el resultado por el monitor serial.

Material necesario:

  • Placa Arduino o similar.
  • Sensor de temperatura LM35.
  • Cables.
  • Protoboard

Esquema:

Esquema para el sensor de temperatura analógico LM35 con la placa Arduino

La patilla izquierda (VCC) del LM35 la conectamos a 5V de la placa, la patilla derecha a GND y el pin del medio a la entrada analógica A0 de Arduino.

Código:

int sensor;  // Para guardar el valor de A0
float temperatura;

void setup(){
  Serial.begin(9600);
}

void loop(){
  sensor = analogRead(A0);
  temperatura = ((sensor * 5000.0) / 1023) / 10;
  Serial.print(temperatura, 1); // Con un solo decimal
  Serial.println(" C");
  delay(1000);
}

Si subimos el programa y comprobamos los resultados por el monitor serial:

Resultados de la medición de la temperatura por el monitor serial

Como se puede observar hay una variación de los valores debido a que trabajamos con tensiones muy bajas, la presición no es muy exacta, pero sí podemos mostrar la media de varias lecturas, obteniendo de esta manera una variación menor.

Medir la temperatura y hallar la media.

Trabajaremos con el mismo esquema anterior. La idea es hacer 5 lecturas de la temperatura y mostrar en el monitor serial la media.

Código:

int sensor;
float temperatura;
float suma;

void setup(){
  Serial.begin(9600);
}

void loop(){
  suma = 0;
  for (int i=0; i<5; i++){
    sensor = analogRead(A0);
    temperatura = ((sensor * 5000.0) / 1023) / 10;
    suma = temperatura + suma;
    delay(500);
  }
  Serial.print(suma/5.0, 1);
  Serial.println(" C");
}

En el código se añade una nueva variable suma para guardar la suma de las cinco medidas con las que calcular la media.

En la función loop(), tenemos un bucle for para realizar 5 lecturas de la temperatura en intervalos de medio segundo. Calculamos la media e imprimimos el resultado en el monitor serial.

Medir la temperatura y mostrar el resultado por un display de 4 dígitos.

Resulta bastante mas cómodo ver la temperatura reflejada en un display que en el monitor serial. Para conocer el funcionamiento de un display de 4 dígitos recomendamos ver antes el artículo «Funcionamiento del display de 4 dígitos y 7 segmentos con Arduino«.

Material necesario:

  • Placa Arduino o compatible.
  • Sensor de temperatura LM35.
  • Display 4 dígitos (hemos utilizado el 3461AS).
  • 4 resistencias.
  • Cables.

Esquema:

Esquema de montaje del sensor LM35, el display de 4 dígitos y la placa Arduino
Esquema de montaje del sensor LM35, el display de 4 digitos y la placa Arduino

Código:

Lo primero es incluir la librería SevSeg.h para la utilización del display de 4 dígitos, lo hacemos desde el menú principal del IDE: Programa / incluir librería / Administrar Biblioteca. Podéis verlo en la siguiente imagen:

Incluir librería SevSeg, para controlar el display de 4 digitos.
#include "SevSeg.h"
SevSeg sevseg;
int sensor;
float temperatura;
unsigned long start;

void setup(){
  Serial.begin(9600);
  byte numDigits = 4;
  byte digitPins[] = {10, 11, 12, 13};
  byte segmentPins[] = {9, 2, 3, 5, 6, 8, 7, 4};
  bool resistorsOnSegments = true; 
  bool updateWithDelaysIn = true;
  byte hardwareConfig = COMMON_CATHODE; 
  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
  sevseg.setBrightness(90);
}

void loop(){
  if (millis() - start > 1000){
    sensor = analogRead(A0);
    temperatura = ((sensor * 5000.0) / 1023) / 10;
    Serial.print(temperatura, 1);  // un solo decimal
    Serial.println(" C");
    sevseg.setNumber(temperatura,1);  
    start = millis();
  }
  sevseg.refreshDisplay();
}

Medir la temperatura y mostrar la media en un display de 4 dígitos.

Utilizaremos el mismo esquema que en el apartado anterior.

Código:

#include "SevSeg.h"
SevSeg sevseg;
int sensor;
float temperatura;
unsigned long start;
float suma;
float resultado;

void setup(){
  Serial.begin(9600);
  byte numDigits = 4;
  byte digitPins[] = {10, 11, 12, 13};
  byte segmentPins[] = {9, 2, 3, 5, 6, 8, 7, 4};
  bool resistorsOnSegments = true; 
  bool updateWithDelaysIn = true;
  byte hardwareConfig = COMMON_CATHODE; 
  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
  sevseg.setBrightness(90);
}

void loop(){
  if (millis() - start > 1000){
    suma = 0;
    for (int i=0; i<10; i++){
      sensor = analogRead(A0);
      temperatura = ((sensor * 5000.0) / 1023) / 10;
      suma = temperatura + suma;
    }
    resultado = suma/10.0;    
    Serial.print(resultado, 1);
    Serial.println(" C");
    sevseg.setNumber(resultado,1);    
    start = millis();
  }
  sevseg.refreshDisplay();
}

Artículos que te pueden interesar

Robot controlado por bluetooth con Arduino
¿Cómo hacer un coche controlado por bluetooth con Arduino?

¿Cómo hacer un coche controlado por bluetooth con Arduino?

| Actualizado:
Comentarios: 4

En este tutorial construiremos un robot móvil controlado por Bluetooth desde nuestro móvil a través de una aplicación de Android. El montaje y la puesta en funcionamiento de este pequeño coche es sencillo puesto que es el resultado de la…

Detector de incendios con Arduino
Detector de incendios con Arduino y el sensor KY-026

Detector de incendios con Arduino y el sensor KY-026

| Actualizado:
Comentarios: 0

El módulo KY-026 es un sensor de llama que permite detectar un fuego gracias a un sensor óptico sensible a la radiación emitida por la llama. El sensor puede detectar fuentes de luz en el rango de una longitud de…

Display de 4 dígitos y 7 segmentos
Funcionamiento del display de 4 dígitos y 7 segmentos con Arduino

Funcionamiento del display de 4 dígitos y 7 segmentos con Arduino

| Actualizado:
Comentarios: 0

Para mostrar más información, como la hora o la temperatura, necesitamos un display de más dígitos o conectar varios display de un solo dígito. En este tutorial veremos cómo conectar un display de 4 dígitos a Arduino. Contenido 1 Esquema…

Robot Arduino controlado por un mando a distancia de infrarrojos
Robot Arduino dirigido con un mando infrarrojo

Robot Arduino controlado por un mando a distancia de infrarrojos

| Actualizado:
Comentarios: 0

El objetivo de este proyecto es controlar el movimiento de un robot Arduino con un mando a distancia, a través de una señal de infrarrojo.

Comentarios - 5

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Pascual
25 November, 2020

hola tengo un problema al compilar el sketch me dice SevSeg.h: No such file or directory , como lo puedo solucionar

Eloctavo
26 November, 2020

Hola, te falta incluir la biblioteca SevSeg. La puedes incluir desde el menú «Programa /incluir librería/ Administrar bibliotecas». Escribes SevSeg, escoge la última versión y presiona sobre instalar.


Enrique
3 February, 2021

Hola, gracias por el tutorial! pero tengo un 3461BS y es ANODO COMUN, yo reemplace en el sketch y en conf de hard puse ANODE, anda pero no me muestra el dígito decimal y vos definiste como float y debería mostrarlo. Tendré algún problema con los pines y cables al ser de distinto punto en común (digo ánodo por cátodo común)?


Fermin herrera
4 April, 2021

Cordial saludo Muy agradecido por esta manera de explicar cada programa para poderlos implementar.


Juan Carlos
25 August, 2021

Buenas tardes, gracias por el tutorial, me ha ayudado mucho, pero en el ultimo codigo me he dado cuenta al probarlo que le hacia falta algunas declaraciones, asi como esta no funciona o al menos a mi no me funciono. Un saludo.