Sensor de temperatura LM35 y arduino


Vamos a ver como poder realizar mediciones de temperatura con nuestro Arduino y el sensor LM35. Dicho sensor es un sensor analógico de la casa Texas Instruments, que nos permite realizar medidas de temperatura de una forma bastante precisa a través de las entradas analógicas de nuestro Arduino (pines A0-A5) sin necesidad de emplear ninguna librería especifica para su programación.

Encapsulados LM35

LM35

 

 

 

 

 

 

 

 

 

 

Como se puede ver es un sensor que presenta únicamente 3 pines (VCC, GND y Data), por ello su conexión es muy sencilla. Además presenta las siguientes características:

  • Está calibrado directamente en grados Celsius.
  • Rango de medición de -55ºC a 150ºC.
  • La tensión de salida es proporcional a la temperatura. Esto quiere decir que 1ºC equivale a 10mV.
  • Presenta una precisión garantizada de 0.5ºC a 25ºC.
  • Presenta un rango de alimentación entre 4 y 30V.
  • Presenta baja impedancia de salida.
  • Presenta baja corriente de alimentación (60uA).
  • No necesita de circuitos adicionales para su calibración.
  • Presenta un coste bastante reducido.

Aquí podéis ver una imagen de como conectaríamos este sensor a nuestro Arduino para poder realizar las mediciones de temperatura:

LM35 fritzing

Como siempre os dejo los archivos Fritzing de este ejemplo, el datasheet del sensor y el código empleado para su programación. Lo podéis descargar desde este enlace: http://www.mediafire.com/?atycg43ubfnnunn

Aquí tenéis un código de ejemplo, de como obtener tanto el voltaje leído por el sensor, como los grados centígrados y los grados fahrenheit, además de mostrar los valores máximos y mínimos para cada una de las medidas mencionadas.

/* Sketch de ejemplo para testear el sensor de temperatura analógico LM35
 Escrito por Regata para www.tallerarduino.wordpress.com

 MODO DE CONEXIÓN DEL SENSOR

 Conectamos el pin 1 que corresponde a la alimentación del sensor con los 5V del Arduino
 Conectamos el pin 2 que corresponde al pin de datos del sensor con cualquier pin analógico del Arduino A0
 Conectamos el pin 3 que corresponde al pin de masa (GND) del sensor con el pin GND del Arduino

*/

int temp = 0;  //Pin analógico A0 del Arduino donde conectaremos el pin de datos del sensor LM35
float maxC = 0, minC = 100, maxF = 0, minF = 500;  //Variables para ir comprobando maximos y minimos

void setup()
{
  Serial.begin(9600);  //Iniciamos comunicación serie con el Arduino para ver los resultados del sensor
                       //a través de la consola serie del IDE de Arduino
}

void loop()
{
  float gradosC, gradosF;  //Declaramos estas variables tipo float para guardar los valores de lectura

  gradosC = (5.0 * analogRead(temp) * 100.0) / 1024;  //Esta es la funcion con la que obtenemos la medida del sensor
                                                      // en ºC

  gradosF = (gradosC * 1.8) + 32;  //Multiplicando los ºC por 1.8 y luego sumando 32 obtenemos grados Fahrenheit

  //Mostramos mensaje con valores actuales de temperatura, asi como maximos y minimos de cada uno de ellos
  Serial.print("Medidas actuales\n");
  Serial.print("C: ");
  Serial.print(gradosC);
  Serial.print("\tF: ");
  Serial.print(gradosF);
  //Comprobacion de maximos y minimos de temperatura
  if (maxC < gradosC)
    maxC = gradosC;
  if (gradosC < minC)
    minC = gradosC;
  if (maxF < gradosF)
    maxF = gradosF;
  if (gradosF < minF)
    minF = gradosF;
  Serial.print("\nMedidas maximas\n");
  Serial.print("C: ");
  Serial.print(maxC);
  Serial.print("\tF: ");
  Serial.print(maxF);
  Serial.print("\nMedidas minimas\n");
  Serial.print("C: ");
  Serial.print(minC);
  Serial.print("\tF: ");
  Serial.print(minF);
  Serial.print("\n\n");
  delay(2000);  //Usamos un retardo de 2 segundos entre lectura y lectura
}

Aquí podéis ver una captura de las medidas actuales que toma el sensor, así como las medidas mínimas y máximas capturadas por el sistema:

Captura Sensor LM35

Espero que os sirva de ayuda la entrada!!

Si te ha servido de ayuda esta entrada, puedes realizar un donativo para agradecer el tiempo que dedico al blog y ayudar a hacer más entradas.

donativo_paypal

30 comentarios en “Sensor de temperatura LM35 y arduino”

  1. Buen tutorial, quisiera saber si tienes algun proyecto ethernet el cual pueda consultar, esto para poder controlar las luces de mi depto, que en ocasiones por concepto de trabajo, salgo por temporadas y los vecinos me han comentado que hay gente amante de lo ajeno cerca.

    saludos

  2. Hola Hugo! De momento yo no he probado la shield de ethernet con Arduino, es una tarea que tengo pendiente para probar. Puedes probar a hacer un proyecto con el reloj RTC DS1307, programando unas horas de encendido y apagado de luces. En breves haré una entrada en como usar este dispositivo con nuestros Arduinos. Un saludo!!

  3. Hola! Aprovechando que has explicado el uso de este sensor no se sí sabrías de qué manera podríamos hacer mediciones de temperaturas negativas sin necesidad de tener una fuente de tensión negativa y de una forma sencilla.
    Gracias

  4. Hola Óscar!

    Pues bueno según el datasheet del sensor LM35 es verdad que necesitas aplicarle una tensión negativa al sensor para poder leer temperaturas negativas, aunque también se puede hacer mediante un circuito acondicionador como viene en la página 11 del datasheet que he dejado en los archivos para descargar, que es crear un plano de masa virtual. Te dejo un enlace donde explican muy bien su uso para realizar estas mediciones negativas: http://www.pickey.es/uso-practico-del-pic12f675–v-.html.

    También puedes mirar esta entrada donde explico los sensores digitales de temperatura DS18B20 y que me han funcionado correctamente para realizar medidas de temperatura negativas sin necesidad de circuitos externos y sin alimentaciones negativas, lo puedes ver aquí: https://tallerarduino.com/2012/05/04/arduino-y-sensores-de-temperatura-ds18b20/

    Un saludo!!

  5. Gracias por la respuesta. Por lo que comentas no hay una manera directa de medir temperaturas negativas con el lm35 así que posiblemente opte por usar un sensor digital como el que mencionas.
    Gracias de nuevo y saludos.

  6. Hola, he probado con éxito el código y todo funciona sin problemas. Pero creo que el sensor no lee adecuadamente la temperatura, tengo un sensor dth11 el cual me da 23 grados y el lm35 me esta devolviendo valores oscilando entre 24 a 27 …

    Puede ser cosa del sensor? o las mediciones no son muy precisas?

    Muy buenos tutoriales estoy aprendiendo mucho de tu web.
    Gracias.

  7. Hola borri33!!

    Hombre no sé muy bien la precisión de este sensor, pero la verdad es que según las características puede tener algún error en la lectura, yo más que el DHT11 suelo usar el DHT22 que es algo más preciso. En cuanto al sensor LM35 también puede presentar algún error en la lectura y por eso se pueda acentuar algo más la diferencia de lecturas entre tus medidas.

    Gracias también por visitarnos, a ver si pronto vamos subiendo algún tutorial más (ando practicando con rfid, módulos ethernet y alguna otra cosilla).

    Un saludo!!

  8. Hola, excelente tutorial, pero porsiacaso no sabes como puede hacer para que en vez de mostrarme la temperatura en el monitor serial me la muestre en una pantalla LCD ???

  9. Gran tutorial, estaré atento a los siguientes, si me lo permite regata, Renato simplemente tras confugurar tu lcd en lugar de escribir Serial.print(…); escribes lcd.print(….); si no estás seguro de como es en el ide en ejemplos tienes varios de la librería liquidcrystal. Un saludo y gran blog a seguir.

  10. Gran tutorial estaré atento a los siguientes, renato si me lo permite regata, simplemente sustituye Serial.print(….); por lcd.print(…); tras haber configurado tu lcd, si no estas seguro de como hacerlo en el IDE si le das a ejemplos tienes varios con la librería liquidCrystal, un saludo. Gran blog a seguir sin duda.

  11. Hola Reanto!! Es muy sencillo, conectas el lcd a tú arduino (dependiendo de si es un LCD que funciona en modo 4 bits o mediante I2C (pines SDA y SCL del Arduino)) y sólo es añadir la librería correspondiente al lcd y sustituir los comandos Serial que aparecen por lcd.

    Si tienes dudas, indícame el lcd que tienes y te muestro algún esquema de conexión y como modificar el código para que te muestre esa información por pantalla. Un saludo!!

  12. Hola Practicando Arduino!! Muy bueno tu blog, le he estado echando un vistazo, si me permites puedo añadir un enlace a tú blog en las páginas del mío, así la gente tiene más a mano acceder a otros contenidos de interés sobre este tema. Me encanta que la gente se ayude a si misma, por eso hemos creado este blog, para que la gente interactue y pueda ayudarse a sí misma, por eso cualquier persona puede contestar a los comentarios del resto de gente que comenta.

    Un saludo!!

  13. como podrias mandar la informacion a display de 7 segmentos? hace mucho intente e investigue pero no tuve suerte, gracias!

  14. Hola Saul!!

    El tema de los 7 segmentos es una buena opción, intentaré realizar una entrada para que se pueda ver como trabajar con estos displays y como mostrar información a través de ellos, también puedes ir mirando por google algún ejemplo mientras. No creo que sea muy complicado mostrar la información de la temperatura a través de estos dígitos, creo que hay módulos de estos displays a la venta que funcionan a través de I2C. Te dejo también un ejemplo que aparece en el blog de Bricogeek en el que se muestra como leer las revoluciones de un ventilador y mostrarlas a través de displays 7 segmentos: http://blog.bricogeek.com/noticias/arduino/como-leer-las-revoluciones-de-un-ventilador-con-arduino/

    Si me comentas algo más de como tienes conectado todo, o bien pones una imagen del circuito que has realizado (te podría ayudar más exactamente). Un saludo!!

  15. Hola!!!
    La entrada es bastante útil y creo que bastante clara, sólo que yo no tengo muy clara la línea 25
    gradosC = (5.0 * analogRead(temp) * 100.0) / 1024;
    ¿Me podrías explicar por qué se multiplica por 5 la lectura del sensor y despues porque se multipllica por 100?, es lo que no entiendo.
    Me sería de mucha utilidad y de antemano te agradezco.

  16. hola excelente el aporte pero me podria ayudar con los sensores que se puede utilizar para medir la calidad del agua (PH, nitrato, conductividad, oxigeno disuelto, temperatura ) y obtener los datos a traves de arduino …gracias

  17. Lo he conectado igual que en el post y siempre me lee 50 grados mas altos ayer hacía 26ºC. y me marcaba 76ºC. Que puedo hacer?

  18. Hola Mary!! No he podido probar ninguno de los sensores que menciones, pero igual a través de foros de acuarios o semejantes puedes encontrar alguna explicación sobre los mismo. Lo siento, un saludo!!

  19. Hola diebseelen!!

    Esta fórmula sale de la relación del sensor con los grados. El sensor de temperatura LM35 responde a variaciones de 10 mV por cada grado centígrado, si el sensor detecta 1 grado centígrado a la salida del sensor obtendríamos 10 mV. Ejemplo: 26,4ºC = 264 mV = 0.264 V.
    Tenemos que el convertidor analógico a digital de nuestro Arduino es de 10 bits de resolución, los valores variarán entre 0 y 1023, entonces Vout= (5V*Dato)/1023 siendo 0 < Dato < 1023 y para ajustar la escala a grados centígrados: Vout = ((5V*Dato)*100)/1023

    Espero que te sirva para entender la fórmula. Un saludo!!

  20. Hola Pablo Ramirez!!

    ¿Lo tienes conectado en protoboard? ¿Está conectado a una entrada analógica del Arduino? Si la conexión está realizada correctamente como comentas, puede que el problema esté en la fórmula de obtención de la temperatura a través del programa. Si puedes pon el código que empleas a ver si podemos solucionar tu problema. Un saludo!!

  21. Hola Regata, ¿que sensor podría usar para controlar una temperatura de hasta 250ºC?

  22. Hola, me gustaria saber que tengo que modificar si quiero medir temperaturas inferiores a 2 grados. Segun el datasheet el montaje que has utilizado va de 2 a 150 grados. Para medir temperaturas negativas tengo q utilizar alimentacion negativa. Hasta ahi todo bien pero como leo esa tension negativa con el arduino ? Gracias

  23. Hola regata, te quiero preguntar algo, tengo mi carro que usa un sensor semejante, lo que no puedo es ver que numeracion lleva, pero es de tres pines, eso lo lleva en el evaporador del aire acondicionado, el sensor de temperatura lo tiene para encender y apagar el compresor de mi carro en un rango de apagado de 3 grados y enciende en. 5 grados, este sensor me puede servir para usar este tipo de trabajo, la alimentacion que tengo en de 12v, y el compresor tambien trabaja con 12v

  24. Hola Allan. Pues no creo que te valga, tendrías que encontrar un sensor idéntico ya que me supongo que no usara los mismos rangos de temperatura, tienes idea de si lleva algún microcontrolador para realizar medidas o es una placa analógica??

  25. buenas noches hermano una pregunta me podras ayudar con un codigo de arduino , el problema es el siguiente, yo quiero tener una temperatura de mayor a 30 grado y que el un led este apagado luego que este – de 30 grado el led se encienda y una vez pasado los-23 grado el se vuelva apagar pero yo lo estoy simulando en proteus pero no me agarra ? ayudame te dejo mi correo alejandrovillegas307@gmail.com

  26. Hola, excelente tutorial.
    Tengo un problema con las lecturas. Cuando empieza a leer va incrementando de 0 a 50 y luego decrese hasta llegar nuevamente a 0.
    Leí por ahí que quizá es por que debo tener otra lectura de una entrada analógica poniendo una resistencia de 10k (un extremo a 5vcd y el otro al pin A4 por ejemplo, , ya tengo una lectura un poco mas estable pero es erronea. Sabes como puedo resolver el problema?

    Gracias!!

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s