Medir temperatura con Arduino y sensor LM35


arduino-LM35

¿Que es un sensor LM35?

El LM35 es un sensor de temperatura de precisión integrado. A diferencia de otros dispositivos como los termistores en los que la medición de temperatura se obtiene de la medición de su resistencia eléctrica, el LM35 es un integrado con su propio circuito de control, que proporciona una salida de voltaje proporcional a la temperatura.

La salida del LM35 es lineal con la temperatura, incrementando el valor a razón de 10mV por cada grado centígrado. El rango de medición es de -55ºC (-550mV) a 150ºC (1500 mV). Su precisión a temperatura ambiente es de 0,5ºC.

Los sensores LM35 son relativamente habituales en el mundo de los aficionados a la electrónica por su bajo precio, y su sencillez de uso.

Precio

Los sensores LM35 son baratos. Podemos encontrar un sensor LM35 por 0,60€ en vendedores internacionales en Ebay o AliExpress.

Anuncio:

lm35

Esquema eléctrico

El patillaje del LM35 se muestra en la siguiente imagen. Los pines extremos son para alimentación, mientras que el pin central proporciona la medición en una referencia de tensión, a razón de 10mV/ºC.

arduino-LM35-sensor

Por tanto, el esquema eléctrico que necesitamos es el siguiente.

arduino-LM35-esquema--electrico

Esquema montaje

Mientras que el montaje en una protoboard sería el siguiente.

arduino-LM35-montaje-electrico

Ejemplo de código

El código necesario para realizar la lectura es simple. Simplemente leemos el valor del tensión mediante la entrada analógica, y traducimos el valor a grados celsius usando la relación 10 mV/C.

const int sensorPin= A0;

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

void loop()
{
  int value = analogRead(sensorPin);
  float millivolts = (value / 1023.0) * 5000;
  float celsius = millivolts / 10; 
  Serial.print(celsius);
  Serial.println(" C");
  delay(1000);
}

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección Tutoriales de Arduino

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github.



3.7 15 votes
Article Rating

Anuncio:

Previous Medir vibración con Arduino y sensor SW-18020P
Next Detector de movimiento con Arduino y sensor PIR
43 Comments
oldest
newest
Inline Feedbacks
View all comments
Carlos
7 years ago

El sensor im35 puede estar en contacto con vapor?

luisllamas
6 years ago
Reply to  Carlos

Sí, siempre que no excedas un límite de temperatura, y la humedad no sea suficiente para que condense y forme un cortocircuito entre algún contacto.
/y en general, ten cuidado al mezclar agua con electrónica)

luisllamas
6 years ago

Puedes visualizarlo en pantalla del PC, como vimos en la entrada https://www.luisllamas.es/arduino-puerto-serie/.
O puedes mostrarlo en un LCD, como en https://www.luisllamas.es/arduino-lcd-hitachi-hd44780/
O muchas otras opciones (BCD, LED, TFT’s, OLED….)
Depende de las necesidades de tu proyecto.

Omar Segovia Arriola
6 years ago

Una pregunta… soy nuevo en esto, porque se usa (value/1024)*5000?

luisllamas
6 years ago

Forma parte del funcionamiento de las entradas analógicas. Para profundizar puedes consultar el tutorial básico “Entradas analógicas en Arduino” https://www.luisllamas.es/entradas-analogicas-en-arduino/

luisllamas
6 years ago

¿Has copiado el código exactamente? ¿Incluido lo del “float”? Unos saltos tan raros en la medición pueden producirse por usar variables int, cuando necesitas float. (Los “redondeos” hacen que den esos saltos)
Otra opción es que hayas montado algo incorrectamente, que el sensor esté roto, que la entrada analógica esté rota. Revisa el montaje, y prueba en otra entrada analógica.

arturo caballero
6 years ago

saludo, disculpa y para usar un sensor ds18b20….como podria ser el codigo

luisllamas
6 years ago

Tenemos una entrada sobre el DS18B20 en este enlace https://www.luisllamas.es/temperatura-liquidos-arduino-ds18b20/

Mario Pereira
6 years ago

La línea 11 ¿no sería más correcto (value*5000)/1024?

luisllamas
6 years ago
Reply to  Mario Pereira

Si te refieres a conceptualmente, para mi no. El value es un integer de 0 a 1023, por lo que lo lógico es ponderarlo a tanto por uno, y después multiplicarlo para escalarlo al valor deseado. Si te refieres a desde el punto de vista de programación, rotundamente no. En tu caso estás perdiendo los decimales, porque a la derecha de la igualdad estás operando con integer, y después haciendo cast a float. En el mio los conservas, porque divides por 1023.0, por lo que fuerzas el cast a float. (En el caso de que prefieras multiplicar, me daría igual… Read more »

Sebastian
6 years ago

Hola. Muy bueno este post. Como podría hacer para poner varios sensores lm35 y algún sensor para medir temperatura de agua.

luisllamas
6 years ago
Reply to  Sebastian

Te recomendaría que miraras la entrada del sensor DS18B20 https://www.luisllamas.es/temperatura-liquidos-arduino-ds18b20/, que normalmente viene en forma de sonda impermeable, y tiene el bus One_Wire, que permite conectar múltiples sensores

Seba Salinas
6 years ago

Hola como puedo visualizar la temperatura en un LCD ??

luisllamas
6 years ago
Reply to  Seba Salinas

Es sencillo, consulta las entradas “Conectar Arduino a un display LCD HITACHI HD44780” https://www.luisllamas.es/arduino-lcd-hitachi-hd44780/ y “Conectar un display LCD HITACHI con Arduino por el bus I2C” https://www.luisllamas.es/arduino-lcd-i2c/

Boris
6 years ago

Una pregunta porque dividís por 1023.0 en vez de 1024.0 si es de 10 bit?Consulto porque estuve haciendo las prueba y e cierto que da un valor mas exacto usando el 1023.0

luisllamas
6 years ago
Reply to  Boris

Porque en un ADC de N bits tienes 2^N niveles, y el rango de medición es de 0 a 2^N-1. En este caso, de 0 a 1023.
(Creo que te habías olvidado de que empezamos a numerar en 0)

Para más información consulta la entrada sobre entradas analógicas en Arduino https://www.luisllamas.es/entradas-analogicas-en-arduino/

francisco
6 years ago
Reply to  luisllamas

Hola perdona, creo que lo más correcto es dividir por 1024 que son los diferentes niveles posibles con 10 bits. Es cierto que los valores “numéricos” que representan esos niveles van desde 0 hasta 1023, pero son 1024 niveles entre los que dividir el valor máximo.
Te ruego me corrijas en caso contrario. Disculpa y gracias, muy bueno el post.

luisllamas
6 years ago
Reply to  francisco

No hay nada que perdonar, pero lo que planteas no es correcto. En 1024 niveles, solo tienes 1023 intervalos entre ellos, y tú estás dividiendo entre intervalos, no entre puntos (lo cuál ni siquiera tendría un sentido matemático). Créeme, lo correcto es dividir entre N^2-1 intervalos

Te lo planteo de una forma alternativa. Tu quieres linealizar la medición entre 0.0 – 1023.0 a un rango de 0.0 – 1.0, para que al multiplicar por 5V, obtengas un valor entre 0.0 – 5.0V. Si divides entre 1024, nunca llegarás a tener 1.

luisllamas
6 years ago

Sí, puedes registrarlas en la eeprom interna de Arduino. Si necesitas mayor capacidad, puedes usar una eeprom externa, o una tarjeta sd o micro sd. Por último, otra opción es leerlas y almacenarlas en un ordenador.

luisllamas
6 years ago

Hola Oscar
Échale un ojo a la entrada “Generar frío con Arduino y una placa Peltier” https://www.luisllamas.es/arduino-peltier/
Tienes un ejemplo parecido, en tu caso sólo tienes que prescindir de la placa Peltier y dejar sólo el ventilador.

Un saludo

Eñaut Armendariz
6 years ago

Buenas tardes, como se pasan los datos de temperatura registrados de Arduino UNO a una Micro SD? Gracias.

luisllamas
6 years ago

Hola, puedes consultar el tutorial de tarjetas SD y Micro SD en Arduino. https://www.luisllamas.es/tarjeta-micro-sd-arduino/

XFC XFC
6 years ago

Hola! se puede utilizar este sensor para que este dentro de un purificado de aire de cocina?
la idea es que se encienda solo a x temperatura, pero no sé si es mejor otro tipo.
saludos

luisllamas
6 years ago
Reply to  XFC XFC

Te recomendaría que miraras la entrada del sensor DS18B20 https://www.luisllamas.es/temperatura-liquidos-arduino-ds18b20/, que puede adquirirse en forma de sonda impermeable.

Jose ed
6 years ago

Hola que tal, tengo en mente construir un horno de gas con monitoreo y controlador de temperatura la cual, pretendo, alcance 500 °c, contara con una electrovalvula ¿sirve arduino para este fin? y de ser así, ¿que tipo de sensores debería ocupar? Gracias

luisllamas
5 years ago

¡Por supuesto! Sigue leyendo atentamente los tutoriales del blog y pronto serás capaz de realizar ese proyecto sin dificultad.

luisllamas
5 years ago

Ante la duda, haz caso siempre al Datasheet (o en su defecto, en lo que te contemos en el blog :D) La único común para toda la familia LM35 es el la relación 10mV/ºC) El rango de temperaturas (y por tanto, el rango de tensión) depende del modelo y encapsulado, habiendo modelos de 0-70º, 0-100ºC, -40-110ºC y -55-150ºC. No obstante, en general, las mediciones de temperatura por debajo de 0ºC o por encima de 100ºC, suelen requerir más cuidados, por lo que son menos habituales. Por eso, seguramente, lo que indicaban en la página que has visto de que lo… Read more »

felixuco
5 years ago
Reply to  luisllamas

En el datasheet pone que es 10mV/ºC de 2º a 150º.
no habría que añadir a tu código:

float celsius = 2 + millivolts / 10;

luisllamas
5 years ago

Puedes tantos LM35 como necesites, empleando para cada uno una entrada analógica distinta. Si necesitas más puedes emplear un multiplexor como el CD74HC4067 https://www.luisllamas.es/mas-salidas-y-entradas-en-arduino-con-multiplexor-cd74hc4067/

luisllamas
5 years ago

Pues sin mirar tu código, no te puedo decir. Pero si siempre es más o menos en el mismo intervalo, a mi me “huele” a desbordamiento de variable.

Iván Camilo Herrera Pineda
5 years ago

hola ingeniero nececito ayuda,nececito hacer un proyecto de un ventilador que se active cuando sobre pase los 24 grados como lo programo en arduino y como programo tambien para que el ventilador se mueva,tienes el algoritmo?

luisllamas
5 years ago

Tienes una entrada sobre cómo controlar un ventilador justo aquí
https://www.luisllamas.es/controlar-un-ventilador-con-arduino/

Joel
5 years ago

Hola,

Ante todo, gracias por estos tutoriales tan bien explicados.

He revisado el datasheet del LM35 y dice que para leer el rango completo (-55 a 150) habría que poner una resistencia pull-down a -Vs desde el pin de salida, pero Arduino no tiene pin -5V, alguna solución (no se si poniendolo a GND valdría)? Algún otro integrado que trabaje de 0 a 5V con temperaturas negativas?

Por otro lado, hay alguna razón por la que no usas fmap en este ejemplo? En muchos otros te la veo usar mucho.

Saludos

Daniel
5 years ago

Buenas. Muy buenos los posts. Solo una duda respecto al código, ¿si deseo medir temperaturas negativas que debería hacer?. ¿Tendría que restarle 55 a Celsius? o como variaría el código o el circuito?, pregunto ésto pues cuando te fijas que la lectura mínima (value 0 = 0mV) obtendré una temperatura de 0 ºC, por lo que en el código se trunca la posibilidad de lecturas negativas.

Walter
4 years ago

Hola Luis, quería consultarte lo siguiente: Para medir temperatura de seis bobinas de cobre de un motor brushless casero (experimental), tienen que estar los sensores en contacto permanente con las bobinas..???

Juan Soplin
4 years ago

Hola, se puede usar este sensor para medir la temperatura del suelo?

Arnoldo
4 years ago
Reply to  Juan Soplin

Si tuviera que medir temperaturas más altas que sensor me recomendarias

PedroD.
4 years ago

Estoy viendo que dependiendo del modelo de Lm35, su rango de temperatura cambia. Para la versión lm35Dz, parece que el rango es de 0 a 100ºC. ¿Es correcto? Imagino que en el artículo indicas un rango genérico, independiente del encapsulado.
Me gustaría saber, para medir valores negativos, que opinas de los TMP36.

Muchas gracias y un saludo.

felipe
4 years ago

Buen día Senor Luis.
Que diferencia tiene con esta formula?

temp = (5.0 * analogRead(tempPin) * 100.0) / 1024;

Mesura de la temperatura amb el sensor digital DS18B20 – Experimentació lliure
2 years ago

[…] apreciat per mesurar la temperatura ambient. Podeu veure com s’ha de connectar i programar en Luis Llamas o en el web Física con Arduino de la professora Beatriz Padín […]

Alex Ivanne
2 years ago

hola tengo una duda como puedo visualiza la temperatura en mi telefonfo por medio de bluetooh se que tengo que dessarrollar una app pero se necesita agregar algo mas al codigo?

una disculpa por molestar