proyectos:monitorclima_temperatura
Tabla de Contenidos
Comparaciones
LM35 | DHT11 | DHT22 | DS18B20 | BME280 | BMP180/BMP185 | DPS310 | MCP9808 | |
---|---|---|---|---|---|---|---|---|
Mide | Temperatura | Temperatura y Humedad | Temperatura y Humedad | Temperatura | Temperatura, Humedad y Presión Atmosférica | Temperatura, Humedad y Presión Atmosférica | Temperatura y Presión Atmosférica | Temperatura |
Protocolo | Analógo | One-wire | One-wire | One-wire | I2C, SPI | I2C | I2C, SPI | I2C |
Voltaje | 4 to 30 V DC | 3 to 5.5V DC | 3 to 6V DC | 3 to 5.5V DC | 1.7 to 3.6V (para el chip) 3.3 a 5V para la tarjeta | 1.7 to 3.6V (para el chip) 3.3 a 5V para la tarjeta | 1.7V a 3.6V | 2.7V to 5.5V |
Rango Temp | -55 to 150ºC | 0 to 50ºC | -40 to 80ºC | -55 to 125ºC | -40 to 85ºC | 0 to 65ºC | -40.0 °C 85.0 °C | -40°C to +125°C |
Precisión | +/-0.5°C (a 25°C) | +/- 2°C (de 0 a 50°C) | +/- 0.5ºC (de -40 a 80°C) | +/-0.5°C (de -10 a 85°C) | +/-0.5°C (a 25°C) | +/-0.5°C (a 25°C) | ±0.5C° | 0.25°C de -40°C a 125°C (0.5°C de -20°C a 100°C) |
Muestras | Cada 1/segundo | Cada 2/segundo | ||||||
Precio | $2.60/cu | $2.10/cu | $5.50/cu | $2.2/cu | $4.25/cu | $5.99/cu | $6.95 /cu | $4.95 c/u |
Probados
Los sensores de temperatura que se han utilizado son:
- DS18B20 Solo temperatura impermeable
- DHT11 Para temperatura humedad*
- Para ver la comparación entre un DHT11 y un DHT22 ver https://learn.adafruit.com/dht/overview
Sensor DHT11
#include <Adafruit_Sensor.h> #include <DHT_U.h> #include <DHT.h> // Definimos el pin digital donde se conecta el sensor #define DHTPIN 4 // Dependiendo del tipo de sensor #define DHTTYPE DHT11 // Inicializamos el sensor DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { // Inicializamos comunicación serie Serial.begin(9600); // Comenzamos el sensor DHT dht.begin(); } void loop() { // Esperamos 5 segundos entre medidas delay(5000); // Leemos la humedad relativa float h = dht.readHumidity(); // Leemos la temperatura en grados centígrados (por defecto) float t = dht.readTemperature(); // Leemos la temperatura en grados Fahrenheit float f = dht.readTemperature(true); // Comprobamos si ha habido algún error en la lectura if (isnan(h) || isnan(t) || isnan(f)) { Serial.println("Error obteniendo los datos del sensor DHT11"); return; } // Calcular el índice de calor en Fahrenheit float hif = dht.computeHeatIndex(f, h); // Calcular el índice de calor en grados centígrados float hic = dht.computeHeatIndex(t, h, false); Serial.print("Humedad: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperatura: "); Serial.print(t); Serial.print(" *C "); Serial.print(f); Serial.print(" *F\t"); Serial.print("Índice de calor: "); Serial.print(hic); Serial.print(" *C "); Serial.print(hif); Serial.println(" *F"); }
Sensor DS18B20
Esquema del sensor:
Diagrama de conexión, aca son dos sensores conectados
#include <DallasTemperature.h> #include <OneWire.h> // Pin donde se conecta el bus 1-Wire const int pinDatosDQ = 9; // Instancia a las clases OneWire y DallasTemperature OneWire oneWireObjeto(pinDatosDQ); DallasTemperature sensorDS18B20(&oneWireObjeto); void setup() { // Iniciamos la comunicación serie Serial.begin(9600); // Iniciamos el bus 1-Wire sensorDS18B20.begin(); } void loop() { // Mandamos comandos para toma de temperatura a los sensores Serial.println("Mandando comandos a los sensores"); sensorDS18B20.requestTemperatures(); // Leemos y mostramos los datos de los sensores DS18B20 Serial.print("Temperatura sensor 0: "); Serial.print(sensorDS18B20.getTempCByIndex(0)); Serial.println(" C"); delay(1000); }
Prueba de sensores
Se realizó una prueba de sensores DHT11 (error de +-2C y RH ± 5%) y de los DS18B20 (error de +-0.5C) para elegir los sensores que mostraran mas uniormidad. De entre estos sensores se usaron dos compradores de los DHT11:
#include <DallasTemperature.h> #include <OneWire.h> #include <Adafruit_Sensor.h> #include <DHT_U.h> #include <DHT.h> // Pin donde se conecta el bus 1-Wire const int pinDatosDQ = 2; // Definimos el pin digital donde se conecta el sensor #define DHTPIN1 13 #define DHTPIN2 12 #define DHTPIN3 11 #define DHTPIN4 10 #define DHTPIN5 9 #define DHTPIN6 8 #define DHTPIN7 7 #define DHTPIN8 6 #define DHTPIN9 5 // Dependiendo del tipo de sensor #define DHTTYPE DHT11 DHT dht1(DHTPIN1, DHTTYPE); DHT dht2(DHTPIN2, DHTTYPE); DHT dht3(DHTPIN3, DHTTYPE); DHT dht4(DHTPIN4, DHTTYPE); DHT dht5(DHTPIN5, DHTTYPE); DHT dht6(DHTPIN6, DHTTYPE); DHT dht7(DHTPIN7, DHTTYPE); DHT dht8(DHTPIN8, DHTTYPE); DHT dht9(DHTPIN9, DHTTYPE); // Instancia a las clases OneWire y DallasTemperature OneWire oneWireObjeto(pinDatosDQ); DallasTemperature sensorDS18B20(&oneWireObjeto); void setup() { // Iniciamos la comunicación serie Serial.begin(9600); // Iniciamos el bus 1-Wire sensorDS18B20.begin(); dht1.begin(); dht2.begin(); dht3.begin(); dht4.begin(); dht5.begin(); dht6.begin(); dht7.begin(); dht8.begin(); dht9.begin(); } void loop() { delay(5000); // Mandamos comandos para toma de temperatura a los sensores Serial.println("Mandando comandos a los sensores"); sensorDS18B20.requestTemperatures(); // Leemos y mostramos los datos de los sensores DS18B20 Serial.print("Temperatura DS18B20: "); Serial.print(sensorDS18B20.getTempCByIndex(0)); Serial.print(" - "); Serial.print(sensorDS18B20.getTempCByIndex(1)); Serial.print(" - "); Serial.print(sensorDS18B20.getTempCByIndex(2)); Serial.print(" - "); Serial.print(sensorDS18B20.getTempCByIndex(3)); Serial.println(" C"); Serial.print("Temperaturas DH : "); Serial.print(dht1.readTemperature()); Serial.print(" - "); Serial.print(dht2.readTemperature()); Serial.print(" - "); Serial.print(dht3.readTemperature()); Serial.print(" - "); Serial.print(dht4.readTemperature()); Serial.print(" - "); Serial.print(dht5.readTemperature()); Serial.print(" - "); Serial.print(dht6.readTemperature()); Serial.print(" - "); Serial.print(dht7.readTemperature()); Serial.print(" - "); Serial.print(dht8.readTemperature()); Serial.print(" - "); Serial.print(dht9.readTemperature()); Serial.println(" "); Serial.print("Humedad DH : "); Serial.print(dht1.readHumidity()); Serial.print(" - "); Serial.print(dht2.readHumidity()); Serial.print(" - "); Serial.print(dht3.readHumidity()); Serial.print(" - "); Serial.print(dht4.readHumidity()); Serial.print(" - "); Serial.print(dht5.readHumidity()); Serial.print(" - "); Serial.print(dht6.readHumidity()); Serial.print(" - "); Serial.print(dht7.readHumidity()); Serial.print(" - "); Serial.print(dht8.readHumidity()); Serial.print(" - "); Serial.print(dht9.readHumidity()); Serial.println(" "); delay(3000); }
Lecturas:
Mandando comandos a los sensores Temperatura DS18B20: 32.00 - 31.87 - 31.94 - 31.94 C Temperaturas DH : 33.50 - 33.60 - 33.10 - 32.50 - 32.30 - 32.00 - 32.10 - 32.40 - 34.10 Humedad DH : 41.00 - 40.00 - 52.00 - 41.00 - 44.00 - 48.00 - 40.00 - 43.00 - 65.00 Mandando comandos a los sensores Temperatura DS18B20: 31.94 - 31.94 - 31.87 - 31.94 C Temperaturas DH : 33.40 - 33.50 - 33.00 - 32.60 - 32.30 - 31.90 - 32.10 - 32.40 - 34.20 Humedad DH : 41.00 - 40.00 - 52.00 - 41.00 - 44.00 - 48.00 - 40.00 - 43.00 - 49.00 Mandando comandos a los sensores Temperatura DS18B20: 31.94 - 31.94 - 31.94 - 31.94 C Temperaturas DH : 33.40 - 33.60 - 33.10 - 32.60 - 32.20 - 32.00 - 32.10 - 32.40 - 34.20 Humedad DH : 42.00 - 41.00 - 54.00 - 42.00 - 44.00 - 48.00 - 40.00 - 44.00 - 49.00 Mandando comandos a los sensores Temperatura DS18B20: 32.00 - 31.94 - 31.94 - 32.00 C Temperaturas DH : 33.40 - 33.60 - 33.10 - 32.50 - 32.30 - 32.00 - 32.10 - 32.40 - 34.20 Humedad DH : 42.00 - 41.00 - 53.00 - 41.00 - 44.00 - 48.00 - 40.00 - 44.00 - 49.00 Mandando comandos a los sensores Temperatura DS18B20: 32.00 - 31.94 - 31.87 - 32.00 C Temperaturas DH : 33.50 - 33.60 - 33.10 - 32.50 - 32.30 - 32.00 - 32.10 - 32.40 - 34.20 Humedad DH : 41.00 - 40.00 - 52.00 - 41.00 - 44.00 - 48.00 - 40.00 - 43.00 - 49.00 Mandando comandos a los sensores Temperatura DS18B20: 32.00 - 31.94 - 31.94 - 32.00 C Temperaturas DH : 33.40 - 33.60 - 33.10 - 32.50 - 32.30 - 32.00 - 32.10 - 32.40 - 34.20 Humedad DH : 41.00 - 40.00 - 52.00 - 41.00 - 44.00 - 48.00 - 40.00 - 43.00 - 48.00 Mandando comandos a los sensores Temperatura DS18B20: 32.00 - 31.94 - 31.94 - 32.00 C Temperaturas DH : 33.50 - 33.60 - 33.10 - 32.50 - 32.30 - 32.00 - 32.20 - 32.40 - 34.20 Humedad DH : 41.00 - 40.00 - 52.00 - 41.00 - 43.00 - 48.00 - 39.00 - 43.00 - 48.00 Mandando comandos a los sensores Temperatura DS18B20: 32.00 - 31.94 - 31.94 - 32.00 C Temperaturas DH : 33.50 - 33.60 - 33.10 - 32.50 - 32.30 - 32.00 - 32.20 - 32.40 - 34.20 Humedad DH : 40.00 - 39.00 - 52.00 - 41.00 - 43.00 - 48.00 - 39.00 - 43.00 - 48.00 Mandando comandos a los sensores Temperatura DS18B20: 32.06 - 31.94 - 31.94 - 32.00 C Temperaturas DH : 33.50 - 33.70 - 33.10 - 32.60 - 32.30 - 32.00 - 32.20 - 32.40 - 34.30 Humedad DH : 40.00 - 39.00 - 52.00 - 41.00 - 43.00 - 48.00 - 39.00 - 43.00 - 48.00 Mandando comandos a los sensores Temperatura DS18B20: 32.00 - 32.00 - 31.94 - 32.00 C Temperaturas DH : 33.60 - 33.70 - 33.20 - 32.60 - 32.30 - 32.10 - 32.20 - 32.50 - 34.30 Humedad DH : 42.00 - 40.00 - 53.00 - 42.00 - 43.00 - 48.00 - 40.00 - 43.00 - 49.00 Mandando comandos a los sensores Temperatura DS18B20: 32.06 - 32.00 - 32.00 - 32.06 C Temperaturas DH : 33.60 - 33.70 - 33.20 - 32.60 - 32.30 - 32.10 - 32.20 - 32.50 - 34.30 Humedad DH : 42.00 - 40.00 - 52.00 - 41.00 - 44.00 - 48.00 - 40.00 - 44.00 - 49.00
Interpretacion:
- Sensores NOYITO: 4,5,6,7
- Sensores Gowoops: 1,2,3,8,9
Resultados: Tomando como referencia los sensores DS18B20, los sensores que mas se acercan a esos valores son los sensores NOYITO 5,6,7 que nos dan valores mas cercanos. Por lo que esos sensores se usaran para las lecturas.
Referencias:
proyectos/monitorclima_temperatura.txt · Última modificación: por manuel.floresv