Home Assistant Fácil

Curso de Home Assistant y domótica

  • Blog
  • Soy un pardillo
  • Podcast
  • Curso Arduino
  • Curso Domótica
  • Acceder
Usted está aquí: Inicio / Blog / Arduino / Leer el sensor de temperatura LM35 en Arduino

Leer el sensor de temperatura LM35 en Arduino

Comentarios(4)
Luis del Valle Hernández

En este fragmento de código os voy a mostrar cómo debemos leer el sensor de temperatura LM35 en Arduino. En cualquier proyecto que se precie es muy recomendable tener un sensor de temperatura para monitorear. En este caso hemos optado por un sensor bastante normal que detecta temperaturas desde -55ºC a 150ºC, 1ºC equivale a 10mV y soporta voltajes de entre 4V y 30V. Todo esta información se ha obtenido de la ficha técnica del LM35. Cuando leemos un sensor analógico con Arduino lo hacemos a través de la función analogRead que nos da un valor entre 0 y 1023, 1024 valores posibles. Si tenemos 0V a la entrada nos devolverá 0 y si tenemos 5V nos devolverá 1023.

A partir de esta información podemos obtener una fórmula matemática que nos calcule la temperatura en función del voltaje que nos facilita el LM35.

Temperatura = Valor * 5 * 100 / 1024

Para más detalle de cómo se obtiene esta fórmula puedes leer y escuchar el capítulo 48. Sensor de temperatura en Arduino.

Lo primero es ver cómo se conecta el LM35 con Arduino y aquí os dejo el esquema eléctrico que vamos a seguir.

  • temperatura-lm35

El código que debemos de subir a nuestra placa sería el siguiente.

/*
 Creado: Luis del Valle (ldelvalleh@programarfacil.com)
 https://programarfacil.com
*/

// Declaracion de variables globales
float tempC; // Variable para almacenar el valor obtenido del sensor (0 a 1023)
int pinLM35 = 0; // Variable del pin de entrada del sensor (A0)

void setup() {
  // Configuramos el puerto serial a 9600 bps
  Serial.begin(9600);

}

void loop() {
  // Con analogRead leemos el sensor, recuerda que es un valor de 0 a 1023
  tempC = analogRead(pinLM35); 
   
  // Calculamos la temperatura con la fórmula
  tempC = (5.0 * tempC * 100.0)/1024.0; 

  // Envia el dato al puerto serial
  Serial.print(tempC);
  // Salto de línea
  Serial.print("\n");
  
  // Esperamos un tiempo para repetir el loop
  delay(1000);
}

Dos cosas a tener en cuenta son la utilización del monitor serie y de la función delay. El puerto serie nos permite ver el resultado de una forma rápida a través del entorno de desarrollo de Arduino. Se utiliza la función begin para iniciar la comunicación con el monitor serie y para escribir cada línea utilizamos la función print. Una vez cargado el código en nuestra placa, puedes ver el monitor serie si accedes a Herramientas/Monitor serie o con el atajo de teclaco Ctrl+Mayús+M. Te dejo una imagen de donde se encuentra esta opción y como es el monitor serie de Arduino.

  • activar-monitor-serie
  • monitor-serie

Por otro lado utilizamos la función delay para esperar 1 segundo a volver a tomar la temperatura. Si no esperáramos este tiempo se producirían muchas lecturas en 1 segundo y para este ejemplo no es necesario.

En esta segunda parte del fragmento de código vamos a cambiar la resolución. Si utilizas la fórmula que hemos detallado antes te darás cuenta que podemos medir temperaturas de 500ºC con 5V. Esto nunca se va a producir ya que se encuentra fuera del rango de temperaturas del sensor. Para ello vamos a utilizar la función analogReference que nos permite establecer el valor de referencia para la entrada 1023. Hasta ahora hemos trabajado con 5V pero si utilizamos INTERNAL podremos tener más resolución, 1.1V. Esto equivale a poder medir temperaturas de hasta 110ºC, dentro del rango de operación del LM35. Para ello solo debemos utilizar la siguiente fórmula:

Temperatura = Valor * 1.1 * 100 / 1024

El código que debemos cargar es el siguiente.

/*
  Creado: Luis del Valle (ldelvalleh@programarfacil.com)
  https://programarfacil.com
*/

// Declaracion de variables globales
float tempC; // Variable para almacenar el valor obtenido del sensor (0 a 1023)
int pinLM35 = 0; // Variable del pin de entrada del sensor (A0)

void setup() {
  // Cambiamos referencia de las entradas analógicas
  analogReference(INTERNAL);
  
  // Configuramos el puerto serial a 9600 bps
  Serial.begin(9600);
}

void loop() {
  // Con analogRead leemos el sensor, recuerda que es un valor de 0 a 1023
  tempC = analogRead(pinLM35); 
   
  // Calculamos la temperatura con la fórmula
  tempC = (1.1 * tempC * 100.0)/1024.0; 

  // Envia el dato al puerto serial
  Serial.print(tempC);
  // Salto de línea
  Serial.print("\n");
  
  // Esperamos un tiempo para repetir el loop
  delay(1000);
}

Como puedes comprobar los únicos cambios son la inclusión de la función analogReference y el cambio en la fórmula para pasar de 5V a 1.1V.

Ya sabéis, hay que practicar con los fragmentos de código, cualquier duda, sugerencia o mejora nos las podéis hacer llegar a través del formulario de contacto.

slzb-06

SLZB-06U: migrar coordinador Zigbee desde Sonoff Dongle P (y por qué el Dongle E es diferente)

Vale, lo confieso: no hay nada que me dé más pereza en domótica que tener que migrar toda la red Zigbee. El típico momento en el que tu viejo … [+ info...]

Home Assistant 2026.6

Home Assistant 2026.6: dashboard inteligente, IR bidireccional y automatizaciones más claras

Llevas meses peleándote con el dashboard de Home Assistant: añadir una tarjeta requería saber de memoria el nombre de cada tipo de bloque, y al final … [+ info...]

MATTER HOME ASSISTANT

Matter Home Assistant: Thread local sin nube

Hay automatizaciones que parecen una chorrada hasta que las vives todos los días. Sesenta minutos después del amanecer, los toldos de mi terraza bajan … [+ info...]

Copyright © 2026 · Programar Fácil · Aviso legal