Disponemos de gran cantidad de sensores para medir la temperatura. Algunos de ellos son analógicos y otros digitales, cada uno con sus pros y sus contras. También los hay de diversos precios, a continuación veremos 4 de ellos.
LM35
Este sensor suele encontrarse con encapsulado TO-92, es analógico y también el más económico de todos pudiendo encontrarlo por menos de 1€. También es el más sencillo de usar, solo es necesario realizar una lectura desde el pin analógico y convertir, mediante unas cuentas, el valor leído a la temperatura.
Tiene un rango de medición de -55 a 150ºC, con una precisión de 0,25ºC a temperatura ambiente o de 0,75C entre 55 y 150ºC. El sensor es bastante sensible y nos permite obtener la medición rápidamente. Al ser un sensor analógico el cable que une el sensor y el Arduino puede influenciar en las lecturas.
Hoja de especificaciones completa LM35
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#define lm35 0 void setup() { Serial.begin(9600); }; void loop() { float temp = (5.0 * analogRead(lm35)*100.0)/1023.0; Serial.println(temp); delay(500); }; |
DHT11 y DHT22
Estos dos sensores nos proporcionan la temperatura y la humedad relativa. Usan un encapsulado de 4 pines, aunque solo usan 3, y emplean para su funcionamiento un pin digital. El precio del DHT11 ronda el euro, en el caso del DHT22, mucho más sensible, sale por unos 4€. Su uso se complica un poco mas respecto el anterior, sin embargo haciendo uso de la librería adjunta se facilita todo mucho.
El DHT11 tiene un rango de medición de 0 a 50ºC y 20 a 90%RH con una tolerancia del 5% y una precisión de 1.
En el caso del DHT22 su rango de medición es de -40 a 125ºC y de 0 a 100%RH con una tolerancia de 0,2ºC con al temperatura y de 2%RH (con un máximo de 5%) con la humedad, la precisión es de 0,1 para ambos valores.
Ambos sensores son bastantes lentos, refrescando cada 2 segundos aproximadamente.
Hoja de especificaciones completa del DHT11 y del DHT22
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
// Fuente: http://learn.adafruit.com/dht #include <DHT.h> DHT dht(2, DHT11); // O DHT22 según el sensor que usemos. void setup() { Serial.begin(9600); Serial.println("Prueba DHT11:"); dht.begin(); } void loop() { // Se lee la humedad y la temperatura del sensor: float h = dht.readHumidity(); float t = dht.readTemperature(); // Si los valores leídos no son números se advierte de ello, de lo contrario se imprimen los resultados: if(isnan(t) || isnan(h)) { Serial.println("Fallo de lectura del DHT"); } else { Serial.print("Humedad: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperatura: "); Serial.print(t); Serial.print(" *C\n"); } delay(500); } |
DS18B20
Este otro sensor, también con encapsulado TO-92, usa un pin digital y su precio ronda el euro. A diferencia del resto este nos permite conectar varios de ellos usando el mismo pin ya que se identifican del resto con un identificador único de 64 bits. Para su funcionamiento se hace uso de un bus 1-wire y es necesario varias librerías, la primera de ellas la OneWire y la segunda la DallasTemperature.
Tiene un rango de medición de -55 a 125ºC con una precisión de 0,5ºC cuando se encuentra entre un rango de -10 a 85ºC
El sensor en sí funciona muy bien, personalmente pudiendo elegir me quedo con este en vez del LM35 ya que este es digital, permite conectar mas sensores usando el mismo pin, y es mas preciso. En contra tiene que es necesario usar unas librerías para su funcionamiento, aunque eso también facilita su uso pues no necesita operaciones matemáticas.
Hoja de especificaciones completa DS18B20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#include <OneWire.h> #include <DallasTemperature.h> // El DS18B20 usa el protocolo 1-wire para comunicarse, por ello debemos instanciar un objeto con el pin del sensor... OneWire oneWire(2); // y despues instanciar los sensores pasando el objeto anterior: DallasTemperature sensores(&oneWire); void setup() { Serial.begin(9600); sensores.begin(); // Se inicializan los sensores: } void loop() { // Se lee la temperatura de todos los sensores conectados al pin sensores.requestTemperatures(); // El método getTempCByIndex nos devuelve un float de la temperatura del sensor que le indiquemos como parámetro: Serial.print("Temperatura sensor 1: "); Serial.print( sensores.getTempCByIndex(0) ); Serial.println(" Grados C"); Serial.print("Temperatura sensor 2: "); Serial.print( sensores.getTempCByIndex(1) ); Serial.println(" Grados C"); delay(500); } |
Hola! Has podido probar el DS18B20? Yo tengo uno de cable y encasulado waterproof y he probado todo tipo de codigos y conexiones y no he sido capaz de hacerlo funcionar, asi que o es alguna tonteria muy obvia que no consigo ver o no funciona correctamente.
Hola,
Lo tienes en esta misma entrada…
https://giltesa.com/2012/08/31/sensores-de-temperatura-para-arduino/#DS18B20
Si, si por eso te preguntaba en esta misma entrada a ver si ya lo habias probado, por el siguiente comentario:
«Este ultimo aun no lo he podido probar, en que lo haga editare esto comentando que tal funciona.»
entiendo que aun no lo has probado porque no has comentado a posteriori que tal funciona pero tenia la esperanza de que si lo hubieses hecho para hablar de ello.
Gracias!
Ah!
En el momento de redactar la entrada no lo había probado, después si y funciona correctamente, incluso con 2 sensores en el mismo cable (permite mas aun)
Ahora lo cambio.
Saludos!
Ok, y has hecho exactamente la conexion que muestras en el croquis, ¿no? Me estoy volviendo loco con algo tan sumamente simple y no puede ser, igual no me funciona la sonda…
Si si, tal cual esta en el esquema y con ese código. Ademas ya lo ha probado otra gente de la que ha comentado en esta entrada, también lo usa un amigo en su estación.
Puede ser que tu sensor haya llegado roto?
Gracias!!!
Pude hacer funcionar el sensor de temperatura DS18….
Probé otras librerías y me habían salido malas pero la que aquí incluyes si funciona
Una pregunta: estos sensores se pueden sumergir en agua? Me gustaría controlar la temperatura de un hervidor de agua, y no sé muy bien como hacerlo.
Hola, del sensor DS18B20 venden una versión que permite ser sumergida en agua sin embargo dudo mucho que aguante en agua hirviendo tendrás que buscar uno específico para altas temperaturas.
Investigaré un poco más. Muchas gracias.
A este sensor me refería:
http://www.ebay.es/itm/301198435186
Mira este también:
http://www.ebay.es/itm/261526088798
Sí, algo como lo del primer link estaba viendo. No sé dónde leí que recomendaban mantanerlo por debajo de 100 ªC. De hecho, sería para medidas puntuales (2-3 al día durante unos segundos) y siempre en el rango de 70-90 ºC. Crees que me servirá?
Gracias de nuevo.
Hola Alberto, estoy teniendo errores con la librería de DHT ya que me dice algo de adafruit. Siempre he usado el sensor DS18B20 y me ha ido bien, pero ahora con este….
Hola les consulto. Necesito poner sondas para medir temperatura y humedad en depositos de granos. Y necesito poner varios entre 8 y 10 sondas. Y conectarlo a arduino. Me pueden dar una mano de como hacer. Ya que veo que cada dht22 necesita un pin y no dispongo de tantos. Gracias
Hola Jorge,
Puedes usar un Arduino Mega que tiene mas pines, aunque los sensores no están hechos para separarlos con muchos metros de cable, no creo que te funcionen si piensas cubrir una nave de grano.
Saludos.
Hola!! Me encantan tus tutoriales, son de lo más entretenido! El caso es que me he montado en casa un sistema con equipos NodeMCU y sensores DHT22 para poder saber las temperaturas de todas las habitaciones. El caso es que cuando enciendo la luz del baño, por ejemplo, el sensor de ese baño de que «bloqueado» y el NodeMCU no vuelve a leer datos hasta que lo reinicio… Me estoy volviendo loco con esto… Las lámparas son de este estilo: https://www.efectoled.com/es/comprar-paneles-led/5547-panel-led-slimline-60x60cm-40w-2800lm.html?gclid=CjwKCAiAodTfBRBEEiwAa1hauop0rBf0SwX_G4k7xZQPgxb4E0OrdI9-fbAcaA0Wc9DTtCXf_MN9LRoC0roQAvD_BwE . Tienen una fuente de alimentación y me imagino que generará algún tipo de interferencia… Cómo puedo evitarlo??
Hola Ruben,
Me alegro que te sea útil la información que publico!
Eso que te pasa es raro porque esas lamparas son de tipo LED… a mi me genera interferencias los fluorescentes de la cocina haciendo que cuando se encienden reinicien un Arduino que uso para dimmear la luz de una estantería de mi cuarto, ese Arduino lo tengo alimentado con un transformador USB de 5 conectores USB.
Así en frio solo se me ocurre acoplarle una powerbank a cada NodeMCU para que se alimenten a través de la batería y al mismo tiempo este cargando, como un SAI. Aunque no sé si eso filtrara el ruido eléctrico o lo dejara pasar… no sé mucho de electrónica y en mi caso no solucione el problema ya que todos los componentes están dentro de una estantería y es complicado desmontarla.
Puedes probar eso con un NodeMCU, aunque imagino que se podrá fabricar o comprar algún circuito que filtre eso… pero ni idea.
Saludos.
¿has realizado codigos para incubadoras?
no