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

Motor paso a paso 28BYJ-48 con Arduino
Conexión del motor paso a paso 28BYJ-48 y el módulo ULN2003 con Arduino

Conexión del motor paso a paso 28BYJ-48 y el módulo ULN2003 con Arduino

| Actualizado:
Comentarios: 0

En este artículo veremos el motor paso a paso unipolar 28BYJ-48. Es un motor barato y que podemos utilizar en gran cantidad de proyectos como robots, impresoras 3D o fotocopiadoras. Nos vamos a centrar en la programación del motor con…

Salidas analógicas en Arduino
Salidas analógicas en Arduino. Intensidad lumínica.

Salidas analógicas en Arduino. Intensidad lumínica.

| Actualizado:
Comentarios: 0

El objetivo de este proyecto es regular la intensidad de un led usando las salidas que soportan PWM y que corresponden a los pines digitales con el símbolo "~". En primer lugar, cambiaremos la intensidad de un solo led. Seguidamente,…

Lectura de un potenciómetro con Arduino
Lectura de un potenciómetro. Entradas analógicas en Arduino.

Lectura de un potenciómetro. Entradas analógicas en Arduino.

| Actualizado:
Comentarios: 0

En este post vamos a leer una señal analógica a través de un potenciómetro, mostraremos el valor por el puerto serie (monitor), en un segundo experimento lo transformaremos a voltaje, en porcentaje y utilizaremos una media para reducir los valores…

¿Cómo medir el valor de una resistencia con Arduino?
Medir el valor de una resistencia con Arduino

¿Cómo medir el valor de una resistencia con Arduino?

| Actualizado:
Comentarios: 0

¿Cuántas veces se nos han mezclado las resistencias y no sabemos su valor? Para eso vamos a construir un sencillo óhmetro para medir la resistencia.

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.