Sensores de temperatura para Arduino
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 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); 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
Este ultimo aun no lo he podido probar, en que lo haga editare esto comentando que tal funciona.
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); } |



[...] Sensor de temperatura DS18B20 [...]