Una de las primeras mediciones que realizaremos con el Arduino será la de temperatura. Para ello utilizaremos el sensor de temperatura LM35.
Materiales
- Arduino Uno, cable y software de programación
- Sensor de temperatura LM35
- Cables de protoboard
- Protoboard
Este sensor tiene una salida análoga proporcional a la temperatura que registra (pin del centro), de acuerdo a la fotografía de izquierda a derecha los pines son +Vcc, Vout o Analog Out y GND (como referencia en la fotografía y en el diagrama utilizaremos los colores rojo para +5V, verde para la salida y negro para GND (Ground o Tierra).
Circuito
Para conectar el sensor al Arduino el pin +Vcc (rojo) debe conectarse al pin 5V en la sección «POWER» de la placa. El pin Vout (verde) al pin A0 en la sección «ANALOG IN» y el pin GND (negro) en el PIN GND de la sección «POWER».
En el siguiente diagrama pueden ver como se realiza la conexión entre el Arduino y el sensor LM35
Nuestro proyecto debe verse así
Código
El código o sketch que utilizaremos en el Arduino es el siguiente:
// Internetdelascosas.cl // Script para leer temperatura utilizando un LM35 // Declaracion de variables float tempC; int tempPin = 0; // Definimos la entrada en pin A0 void setup() { // Abre puerto serial y lo configura a 9600 bps Serial.begin(9600); } void loop() { // Lee el valor desde el sensor tempC = analogRead(tempPin); // Convierte el valor a temperatura tempC = (5.0 * tempC * 100.0)/1024.0; // Envia el dato al puerto serial Serial.print(tempC); Serial.print(" grados Celsius\n"); // Espera cinco segundo para repetir el loop delay(5000); }
Este sketch se carga en el Arduino de la misma forma en que cargamos nuestro «Hola Mundo!» que pueden revisar aquí.
Pueden copiar y pegar el código que en la interfaz para desarrollo de Arduino para Windows se debería ver así
Una vez cargado en el Arduino, éste comenzará inmediatamente a sensar y enviará los datos por la puerta serial que podemos monitorear con el «Monitor Serial» que es una de las herramientas que tiene la Interfaz de Desarrollo de Arduino en el menú Herramientas
En mi computador la puerta serial (o de comunicaciones COM) donde tengo conectado el Arduino es la 28, por eso la ventana dice COM28. La salida que se obtiene es la siguiente
En el caso de Linux las puertas de comunicación serial se llaman /dev/ttyACMx y en este ejemplo se usa la ttyACM0 , y la salida es idéntica a la de Windows:
¿Fácil no?
Mejoras
El Arduino ya esta enviando los datos de temperatura al puerto serial, hay que leerlos de alguna forma en el computador para un procesamiento posterior, también se debe considerar la factibilidad de enviarlos a la red ya sea local o internet.
Puedes ver como conectar el Arduino a internet en otro de nuestros tutoriales: Capturando datos en MySQL usando Apache + PHP + Arduino y EthernetShield
Hola Joniuz,
Gracias por publicar este tipo de tutoriales ya que son muy útiles. Ten cuento mi duda para ver si podrías asesorarme. Tengo una duda a la hora de leer los valores de las entradas analógicas. Por lo que he podido leer arduino muestrea la señal analógica conviertiendola en digital con una resolución de 10 bits, es decir 1024 valores (o-5v). Imagino que para cada tipo de sensor variara la forma de calcular el valor físico medido pero te agradecería me aclararas la forma en que has obtenido la temperatura en este tutorial ya que no termino de ver clara la formula tempC = (5.0 * tempC * 100.0)/1024.0;.
Gracias de antemano y sigue con estos tutoriales ya que nos ayuda a mucha gente. Un saludo.
Estimado. Efectivamente el ADC (o Conversor Análogo Digital) de Arduino es de 10bits, por lo tanto para convertir el valor de lectura en Volts usamos la siguiente expresión. V = (5.0* lectura)/1024.
El factor adicional que aparece en la expresión es a causa de la especificación del sensor LM35, el que tiene una escala de 10mV/C por lo tanto para obtener la temperatura directamente en grados Celsius debemos multiplicar por 100.
Si quieres usar otro sensor, cuentanos y te podemos ayudar 🙂
Referencia:
Hoja de datos sensor LM35
hola que tal queria ver si podrias ayudarme para programar dos sensores con un lcd de 16 bits
Hola Efrain
Crea un proyecto en GitHub.com, dejalo publico y me avisas para ayudarte.
Saludos
JZ
no funciona, al mandar los datos por bluetooth, ando utilizando un rn42 bluesmirf, y no recibe ni manda datos no se que mas hacer auxilio
Estimado, no tenemos el rm42, asi que por ahora no podemos replicar tu configuración.
Cuando tengamos un sensor de esos en nuestras manos, escribiremos un artículo.
¿Has probado con NFC o XBee?
Saludos
JZ
Estimados les cuento me compre la placa arduino Uno y el sensor DS18B20 (link: http://dx.com/p/ds18b20-digital-temperature-sensor-module-for-arduino-55-125-c-135047 )
Bueno la cuestión es que con montar el código a la placa. Al instante empieza a enviar datos a la puerta serial sin haber ni siquiera conectado el sensor y cuando lo conecto la «medición» cambia aun mas
Ej que recibo solo al enviar el código a la placa
445.00 grados Celsius
370.00 grados Celsius
371.00 grados Celsius
383.00 grados Celsius
384.00 grados Celsius
380.00 grados Celsius
377.00 grados Celsius
Prueba desconectando el Arduino de la PC; luego realiza la respectiva conexión del sensor al Arduino. Ahora sí, conecta el Arduino a la PC, carga el código y abre el monitor serial de la interfaz Arduino.
Aprender y enseñar
Me paso lo mismo, estaba mal conectada la alimentacion del sensor.. en lugar en enviar GND al pin correspondiente, estaba enviando VIN
Estimado he solucionado el problema encontre el datasheets del sensor y pude poner los pines en su forma correcta ya que los chinos hacen el modulo desordenado con respecto a los pines reales del sensor en si.
aqui el datasheets por si alguien lo necesito
buen dia no veo el adjunto sobre los pines
Hola, yo también tengo el mismo problema con otro sensor
http://www.dx.com/es/p/arduino-diy-lm35d-analog-temperature-humidity-sensor-module-black-140022#.VJFzKSuG9WY
Después de realizar los calculos la información que me muestra es:
447
446
447
446
La formula que utilizo es «temp = (5.0 * analogRead(lm35) * 100) / 1024;»
Alguna idea de donde puede estar el fallo?
Fernando
Probablemente el fallo esta en el sensor el cual no es de la mejor calidad. Te recomiendo el sensor DS18B20 que es mas preciso.
Saludos
Estimado.
Necesito saber donde compraste el sensor LM35 aca en santiago?
Ya encontré donde comprar el Arduino uno, pero me falta este sensor, ya que por lo que he visto es mas fácil de instalar que otros sensores que requieren de librerias extras (en c++).
Agradeceria me pudieras ayudar, es para un Trabajo de la Universidad.
Gracias, espero pronta respuesta.
Estimado, el LM35 lo puede comprar en Santiago de Chile en Casa Royal, Victronics o Olimex (busque esos nombres en Google)
Gracias por la respuesta
Estimado, espero pueda ayudarme con mi problema. Compre este sensor de flujo respiratorio http://www.cooking-hacks.com/index.php/airflow-sensor-breathing-ehealth-medical.html
Va conectado a una plataforma que a su vez esta conectada a arduino, pero en vez de comprar la plataforma replique el circuito descrito en la pagina http://www.cooking-hacks.com/skin/frontend/default/cooking/images/catalog/documentation/e_health/e-Health_v3.pdf
sin embargo, en el serial monitor me arroja un valor constante, no sensa nada.
estoy ocupando este
int val = 0;
void setup() {
Serial.begin(9600);
}
void loop(){
val = analogRead(0);//leer el valor del sensor de A0
Serial.println(val);//Imprime en serial monitor el valor del sensor
}
Es un sensor con dos patas, una positiva y otra negativa.
ojala pueda sugerirme algo
saludos gracias
estoy en una practica parecida a esta pero con control difuso cuando lee el sensor el resultado lo tengo que mandar a un lcd pero me tiene que sensar frio, tibio, fresco, caluroso. Espero me puedas ayudar gracias
Carlos
Basicamente tienes que leer la temperatura de la misma forma desde el sensor LM35, y después decidir mediante la instrucción «if» si esta frío, tibio, fresco o caluroso.
Para enviar la información al display LCD puedes ver este ejemplo
http://www.internetdelascosas.cl/2013/03/09/sensor-de-distancia-con-display-usando-teensy-3-0/
Saludos
Estimado estoy ocupando este sensor cual seria la formula correcta?
http://neutrino.phys.ksu.edu/~gahs/doublechooz/DC_SlowMRS/DS/DS18B20.pdf
He realizado pruebas cambiando la formula y el valor de temperatura que me da no me convence mucho..
saludos
Hola buenas, tengo un problema de software al que no le encuentro solución, quizá alguien me pueda ayudar… Tengo conectado a un pin análogico un sensor de temperatura LM35, al realizar la lectura funciona bien hasta que llega hasta 31,7 grados, a partir de aquí empieza a bajar con un signo menos delante, por ejemplo lo que tendría que ser 33 grados sale -29 grados. Os copio lo que me da:
Tiempo transcurrido desde el inicio de la medicion 0:1:18
Posiciones sobre 1024 Bits: T1, 57 ;T2, 544 ;LUZ, 57
T1 28.32 Grados Celsius
Tiempo transcurrido desde el inicio de la medicion 0:1:25
Posiciones sobre 1024 Bits: T1, 61 ;T2, 544 ;LUZ, 56
T1 29.79 Grados Celsius
Tiempo transcurrido desde el inicio de la medicion 0:1:32
Posiciones sobre 1024 Bits: T1, 63 ;T2, 544 ;LUZ, 57
T1 31.25 Grados Celsius
Tiempo transcurrido desde el inicio de la medicion 0:1:39
Posiciones sobre 1024 Bits: T1, 65 ;T2, 544 ;LUZ, 57
T1 31.74 Grados Celsius
Tiempo transcurrido desde el inicio de la medicion 0:1:46
Posiciones sobre 1024 Bits: T1, 68 ;T2, 544 ;LUZ, 57
T1 -30.31 Grados Celsius
Tiempo transcurrido desde el inicio de la medicion 0:1:53
Posiciones sobre 1024 Bits: T1, 71 ;T2, 545 ;LUZ, 57
T1 -29.33 Grados Celsius
Tiempo transcurrido desde el inicio de la medicion 0:2:0
Posiciones sobre 1024 Bits: T1, 73 ;T2, 545 ;LUZ, 57
T1 -28.36 Grados Celsius
Como se puede ver la temperatura se hace negativa pero la posición sobre 1024 Bits que da el pin análogico sigue subiendo hacia arriba, a continuación muestro la formula que tengo en el código para transformar la posición en temperatura:
Serial.print («T1″);
Serial.print (» «);
Serial.print (float(analogRead(0)*5*100)/1024);
Serial.print (» «);
Serial.print («Grados Celsius»);
Siendo la posición (analogRead(0)) siempre positiva (0 para 0v y 1024 para 5v) y todos los valores de la formula tambíen positivos no entiendo como puede salir un float negativo. Si alguien puede saber alguna solución se lo agradeceria.
Hola, a primera vista, parece una falla del sensor. El LM35 no se caracteriza por ser muy seguro, yo ya queme dos (conectamos al revés los pines de voltaje) y antes dejar de funcionar, presento medidas irrisorias como 50°C o -20°C en mi casa.
Ahora estoy usando un sensor digital, es mas estable y el costo no es muy elevado, puedes revisar su especificación en este enlace http://www.internetdelascosas.cl/tienda/index.php?route=product/product&path=71&product_id=68
Saludos
Solucionado, solo habia que ponerle el «.0» a los float y no hacerlo todo tan a la vez, por partes al principio del programa e fragmentado la formula en partes para darle tiempo y funciona perfectamente. Gracias.
Perfecto, ¿entonces el problema solo era porque tenias los valores de constantes en 5 cuando debería ser 5.0? ¿se marea con eso el compilador? Saludos.
Espero me puedas ayudar: ¿Qu{e tendria que agregar al código para que pueda adicionar un ventilador que se active a una temperatura especifica, como simulando un sistema de refrigeración el cual monitorea la temperatura del sistema?…y tambien, cómo podria modificar los valores de las temperatura Tope de activacion de los ventiladores, la modificación de ese valor Tope deberia hacerla desde una aplicación desde la PC, ni simplemente obtenidno datos de las lecturas de temperatura sino que pueda enviar el valor desde la PC cuando asi el usuario d ela aplicación Pc lo desee?!
Impresionante simple y sencillamente rapido! funciona es exacto y la temperatur ade un hielo es de 4 grados jajaja alomejor lo acomode mal pero funciona y con un encendedor llegue a los 69 antes de prenderme la mano en fuego saludos ! pd. el sensor cuesta 1.5$ dolares!
Impresionante simple y sencillamente rapido! funciona es exacto y la temperatur ade un hielo es de 4 grados jajaja alomejor lo acomode mal pero funciona y con un encendedor llegue a los 69 antes de prenderme la mano en fuego saludos ! pd. el sensor cuesta 1.5$
Hola estas son las lecturas del sensor:
75.68 grados Celsius
75.68 grados Celsius
75.68 grados Celsius
75.68 grados Celsius
76.17 grados Celsius
75.68 grados Celsius
75.68 grados Celsius
75.68 grados Celsius
75.68 grados Celsius
75.68 grados Celsius
75.68 grados Celsius
75.68 grados Celsius
75.68 grados Celsius
75.68 grados Celsius
75.68 grados Celsius
75.68 grados Celsius
Y hacen 26 grados ºC. Ayuda porfavor. Es tan impreciso o se puede solucionar?
Pablo
El LM35 no se caracteriza por ser muy preciso, nosotros quemamos varios y cuando pasa eso obtienes lecturas completamente erradas.
Te recomiendo este otro sensor que es digital
http://www.internetdelascosas.cl/tienda/index.php?route=product/product&path=71&product_id=68
Saludos
Buenos Días.
Excelente explicación, me gustaria saber si me puedes ayudar para programar el sensor LM35, con unos leds, es decir algo así:
Se requiere que el led verde esté encendido para temperaturas inferiores a 20 ºC. El led amarillo debe encender cuando se exceda la temperatura de 20ºC pero no pase de 25ºC. El led rojo debe encender cuando la temperatura exceda de 25ºC
Gracias.
Gracias!
bueno asi alguien me puede ayudar como sacar los numeros negativos del lm 35 en el lcd en el codigo que me ayuden
lo demas ya tengo me faltaria solo eso
(Codigo borrado)
Darwin, falta la funcion fahren() en el codigo, usa mejor GitHub.com para compartir codigo, es mucho mas facil de ver errores ahi.
Saludos
Hola, oye me aparece un error que dice «PUERTO SERIAL COM1 NO ENCONTRADO» sabrias decirme como puedo solucionarlo, Gracias
Nathalia, ese error aparece cuando Arduino no esta siendo reconocido por el computador, prueba usando otro puerto USB, cambiando el cable, probando en otro computador, finalmente prueba con otro Arduino.
Saludos
En el dibujo que publicaste el sensor esta conectado al reves, Es decir con la polaridad invertida. Por lo tanto se me quemo. La proxima vez compara los dibujos con el datasheet de los componentes.
Estimado Pedro, el diagrama de conexión esta correcto, quizá no sabes interpretar bien el datasheet. De todas formas actualizé la imagen del sensor para que quede claro cuales son los pines, a veces el datasheet puede prestarse a confusión, sobre todo el diagrama «bottom view».
Esta es una parte del datasheet del sensor LM35 en su formato de plástico TO-92
Saludos
hola soy estudiante de ing.Electronica me gustaria si me pudieras ayudar para mantener estable a 37.7 la temperatura. es que estoy tratando de hacer una incubadora como proyecto. entonces me gustaria que expliques como pudiera mantener la temperatura a 37.7 y si se pasa apagar el foco que calienta y si disminuye encenderlo. ya se como usar el rele solo me gustaria saber como configurar la temperatura con un lm35 gracias.
Hola Jesus, veo que tienes bien claro como controlar la temperatura, pero solo estas viendo el limite inferior, es decir prender el foco cuando baja la temperatura, pero que pasa si la temperatura ambiente es superior a 37.7? debes agregar algun dispositivo de enfriamiento como un ventilador.
Con respecto a como mantener la temperatura, eso se logra con dos sentencias if: if (temperatura > 37.7) apagar_foco(); … etc.
Saludos
Buenas
Yo estoy usando el sensor de temperatura que trae el kit oficial de arduino starter y la verdad funciona bien pero aveces me saca valores de 3000 grados
la lectura aveces esta bien y marca 27 o 26 por lo que esta bien conectado y tal.
Hola Juan, el sensor LM35 no es muy estable y a veces retorna lecturas falsas, lo ideal es revisar y colocar condiciones «if» para que el programa deseche todas estas lecturas falsas.
Saludos
Gracias me lo temia que no fuera estable e depurado y el fallo se proboca justo al reiniciar el proceso. Miro la temperatura si esta en un rango abro una tapa con un servo y espero 60segundos tras estos bloqueo de nuevo para desbloquear pulso un boton x segundos y reinicio el proceso. Tras el reinicio ya es cuando siempre me da 300 grados.
Podrias ponerme un ejemplo de como desechar las medidas falsas ?
Gracias
buenas tardes soy nueva manejando arduino y necesito una condicional para que un led se prenda cuando el lm35 detecte una temperatura mayor a 30 grados celsius
Hola Laura, la sentencia condicionale en casi todos los lenguajes de programacion es «if» y el lenguaje de Arduino tambien lo usa, en este caso la sentencia es
if (tempC > 30) {
aqui_el_codigo_que_debe_ejecutar();
}
Mas referencias sobre la sentencia if en https://www.arduino.cc/en/Reference/If
Saludos
como agrego el simbolo de ° al serial print
Serial.print(«°»);
Serial.print((char)223);
ninguno de estas dos opciones me funciona
Angel, ¿por qué necesitas agregar este simbolo? La comunicacion serial esta pensada para maquina-maquina, el simbolo grados es para mostrarle al humano que tipo de escala se usa para medir, lo ideal es hacer esta representacion en el software que se encarga de la interfaz, no a nivel de comunicacion entre maquinas, solo estas consumiendo ancho de banda si envias el simbolo «grados» a ese nivel.
Saludos
JZ
que tal solo para comentar que utilice un programa llamado secureCRT el cual es un programa para monitoreo serial y diversos protocolos, el punto es que este programa lo podemos utiliza para exportar el monitoreo en texto
Amigo quiero hacer este proyecto para sensar cuartos frios en minisupers, que el sensor este en el cuarto frio fisicamente y conectado a la maquina de cobro y que pueda ver en tiempo real desde oficina los datos. Me podrias ayudar a esta ultima parte?
Saludos.
Muy buen tutorial amigo.
Amhed, nosotros ya tenemos este proyecto hecho y lo vendemos como un producto, si deseas puedes contactarnos para ver valores.
Saludos
JZ
hola, muchas gracias por esta información, me fue muy útil.
me gustaria saber como utilizar una fotocelda con pic y que formulas tiene gracias
Hola Jaider, todo depende de la fotocelda que tengas, las mas comunes son analogas y se pueden conectar a una entrada analoga del Arduino, 3V+ a un pin de la fotocelda, el otro pin a una entrada analoga de Arduino (ejemplo A0) y finalmente una resistencia de 10K entre el pin conectado a la entrada analoga y V- (o tierra).
Saludos
JZ
muchas gracias por la informacion, estoy trabajando en este proyecto con la condicion de que la interfaz del monitor serial la quiero establecer en dev c++ me podrias asesorar. gracias!
Hola Andres, basicamente tienes que implementar en C++ una interfaz serial y leer los datos que envia Arduino. Para que plataforma deseas desarrollar?
Saludos.
El sensor DS18B20 es un sensor digital y necesita programarse para utilizarlo
Hola Miguel, si el DS18B20 es un sensor digital, pero en verdad no se programa, se utiliza una librería para leer los datos que envía. En todo caso, aquí estamos viendo el sensor análogo LM35.
Saludos
JZ
Interesante artículo, gracias por compartir el código, lo probaré.