
¿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:
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.
Por tanto, el esquema eléctrico que necesitamos es el siguiente.
Esquema montaje
Mientras que el montaje en una protoboard sería el siguiente.
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); }
Descarga el código
Todo el código de esta entrada está disponible para su descarga en Github.
Anuncio:
El sensor im35 puede estar en contacto con vapor?
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)
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.
Una pregunta… soy nuevo en esto, porque se usa (value/1024)*5000?
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/
¿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.
saludo, disculpa y para usar un sensor ds18b20….como podria ser el codigo
Tenemos una entrada sobre el DS18B20 en este enlace https://www.luisllamas.es/temperatura-liquidos-arduino-ds18b20/
La línea 11 ¿no sería más correcto (value*5000)/1024?
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 »
Hola. Muy bueno este post. Como podría hacer para poner varios sensores lm35 y algún sensor para medir temperatura de agua.
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
Hola como puedo visualizar la temperatura en un LCD ??
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/
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
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/
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.
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.
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.
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
Buenas tardes, como se pasan los datos de temperatura registrados de Arduino UNO a una Micro SD? Gracias.
Hola, puedes consultar el tutorial de tarjetas SD y Micro SD en Arduino. https://www.luisllamas.es/tarjeta-micro-sd-arduino/
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
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.
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
¡Por supuesto! Sigue leyendo atentamente los tutoriales del blog y pronto serás capaz de realizar ese proyecto sin dificultad.
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 »
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;
Si miras el Datasheet veras que, con el montaje que hemos empleado, la salida del sensor es 0mV + 10mV/TºC. No hay que sumarle 2 para nada.
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/
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.
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?
Tienes una entrada sobre cómo controlar un ventilador justo aquí
https://www.luisllamas.es/controlar-un-ventilador-con-arduino/
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
En la figura 18 del datasheet te ponen un esquema para rango completo con una fuente asimétrica, usando 2 diodos y una resistencia.
Por otro lado, respecto a fmap, no hay ningún motivo especial. Simplemente me dio por hacerlo así, al final es un cambio de escala sin más. No hace falta complicarlo (y hacerlo más lento) con una interpelación completa.
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.
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..???
Hola, se puede usar este sensor para medir la temperatura del suelo?
Si tuviera que medir temperaturas más altas que sensor me recomendarias
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.
Buen día Senor Luis.
Que diferencia tiene con esta formula?
temp = (5.0 * analogRead(tempPin) * 100.0) / 1024;
[…] 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 […]
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