Logo Studenta

Práctica 3 Sensor DHT11_Eduardo_Rodríguez_19131252 (1)

¡Este material tiene más páginas!

Vista previa del material en texto

INSTRUMENTACIÓN 
INFORME DE 
PRÁCTICA #3 EL SENSOR 
DHT11 
Catedrático: MSC JESUS ANTONIO BOTELLO T. 
Alumno: Eduardo Antonio Rodríguez Guerra 
Número de control: 19131252 
22 de Abril de 2022 
 
 
 
Práctica #3 
El sensor DHT11 para medir la temperatura y humedad con Arduino 
Una de las ventajas que nos ofrece el DHT11, además de medir la temperatura y la 
humedad, es que es digital. A diferencia de sensores como el LM35, este sensor utiliza un 
pin digital para enviarnos la información y por lo tanto, estaremos más protegidos frente al 
ruido. Puede ser útil en proyectos donde otros sensores y componentes dependan de la 
temperatura o la humedad para tomar las medidas. 
DHT11 un único sensor para la temperatura y humedad 
El DHT11 presume de ser un sensor con una alta fiabilidad y estabilidad debido a su señal 
digital calibrada. Lo podemos comprar de dos maneras, de forma individual donde solo 
tenemos el sensor DHT11, o insertado en una PCB. 
La diferencia en precio no es excesiva y la versión con PCB aporta una resistencia pull-
up de 5 kΩ y un LED que nos avisa de su funcionamiento. Otra diferencia entre estas dos 
versiones del DHT11 son los pines. 
En la versión sin PCB tenemos 4 pines y en la versión con PCB tenemos 3 pines. 
Los pines de la versión sin PCB del DHT11 son: 
 VCC: alimentación 
 I/O: transmisión de datos 
 NC: no conecta, pin al aire 
 GND: conexión a tierra 
Los pines de la versión con PCB del DHT11 son: 
 GND: conexión con tierra 
 DATA: transmisión de datos 
 VCC: alimentación 
 
 
 
 
 
 
 
 
Características técnicas del DHT11 
Como siempre recomiendo, es aconsejable dirigirse a la hoja de características técnicas 
para ver cómo funciona el sensor DHT11. Puedes ver toda la información en esta hoja 
características técnicas https://akizukidenshi.com/download/ds/aosong/DHT11.pdf. 
 
¿Cómo transmite los datos el DHT11? 
No tenemos que confundirnos entre analógico y digital. Aunque lo conectemos a un pin 
digital, se trata de un dispositivo analógico. Dentro del propio dispositivo se hace la 
conversión entre analógico y digital. 
Por lo tanto, partimos de una señal analógica que luego es convertida en formato digital y 
se enviará al microcontrolador. La trama de datos es de 40 bits correspondiente a la 
información de humedad y temperatura del DHT11. 
 
 
 
 
 
El primer grupo de 8-bit es la parte entera de la humedad y el segundo grupo la parte 
decimal. Lo mismo ocurre con el tercer y cuarto grupo, la parte entera de la temperatura y 
la parte decimal. Por último los bits de paridad para confirmar que no hay datos corruptos. 
Estos bits de paridad lo único que hacen es asegurarnos de que la información es correcta, 
sumando los 4 primero grupos de 8-bit. Esta suma debe ser igual a los bit de paridad. Si 
nos centramos en la imagen anterior y sumamos los bits, comprobamos que todo está 
correcto. 
0011 0101 + 0000 0000 + 0001 1000 + 0000 0000 = 0100 1101 
Conectando el DHT11 a Arduino 
Como tenemos dos versiones del sensor de temperatura y humedad DHT11, vamos a ver 
cómo tendríamos que conectarlo a Arduino en los dos casos. Te recuerdo que vamos a 
trabajar con un pin digital. 
En los dos casos , la alimentación puede ser de 3,5 V a 5 V. Si vas a utilizar un Arduino 
MKR1000 o un ESP8266, tendrás que tenerlo en cuenta ya que estos dos dispositivos 
pueden dar problemas si se alimentan con una batería o con una pila ya que no 
suministran más de 3,3 V. 
Antes de conectar el sensor es conveniente ver estas consideraciones: 
 
• La resistencia pull-up de 5 kΩ es la recomendada para un cable de longitud de 
hasta 20 metros. Si conectas un cable mayor al DHT11, la resistencia pull-up deberá ser 
proporcional. 
• Ojo si alimentas el DHT11 con 3,5 V. En este caso, el cable de alimentación no 
debe ser mayor de 20 cm debido a que las caídas de tensión pueden provocar mal 
funcionamiento. 
• Se recomienda tomar medidas cada 5 segundos. Si se utiliza un periodo menor 
puede ocasionar que los datos no sean precisos. 
Una vez hayas leído y entendido las consideraciones, vamos a ver los circuitos eléctricos 
para los dos modelos. 
 
 
 
 
 
Conexionado DHT11 sin PCB 
Para conectar el circuito de una aplicación típica con un DHT11, necesitaremos tener una 
resistencia pull-up conectada a la salida digital. La recomendación es utilizar una 
resistencia de 5 kΩ. Disponemos de 4 pines el VCC (de 3,5V a 5V), la salida digital I/O, el 
pin no conectado NC y la toma de tierra GND. 
 
El esquema eléctrico del DHT11 sería el siguiente: 
 
 
 
 
 
 
 
 
 
 
Conexionado DHT11 con PCB 
Al contrario que el otro modelo, el DHT11 integrado dentro de un PCB ya viene con la 
resistencia pull-up integrada. Puede resultar muy útil en ocasiones, pero si añadimos un 
cable de más de 20 metros, deberemos tener en cuenta este factor. 
 
Este modelo de DHT11 dispone de 3 pines, la toma de tierra GND, para los datos DATA 
y para la alimentación VCC (de 3,5V a 5V). En la siguiente imagen puedes ver el esquema 
de conexión con Arduino. 
 
 
 
 
 
 
 
 
 
Programando el DHT11 desde el IDE de Arduino 
Si tuvieras que programar desde cero el sensor de temperatura y humedad DHT11, sería 
francamente complicado. Sin embargo, las librerías que hay entorno a Arduino nos 
facilitan mucho la vida. Este es un claro ejemplo. 
Hay varias librerías que podemos utilizar para obtener la información de temperatura y 
humedad. En este caso vamos a utilizar la que nos proporciona Adafruit 
https://github.com/adafruit/DHT-sensor-library. Esta librería es muy sencilla de utilizar y 
funciona para los dos modelos, DHT11 con PCB y sin PCB. 
 
Recuerda, si no sabes instalar una librería te recomiendo que leas este tutorial donde te 
explico cómo instalar una librería de Arduino https://programarfacil.com/blog/arduino- 
blog/instalar-una-libreria-de-arduino/ . 
 
Si cuando has instalado la librería DHT en tu IDE sale el siguiente error: 
 
fatal error: Adafruit_Sensor.h: No such file or directory 
Debes añadir la librería Adafruit_Sensor.h. Sólo tienes que abrir el gestor de librerías y 
buscar 
adafruit unified sensor. 
 
 
 
 
Instala la librería que pone Adafruit Unified Sensor. 
Código nativo de Arduino para el DHT11 
Ahora ya si que tenemos todo preparado para obtener la temperatura y la humedad. 
Hemos montado el circuito (con el módulo con PCB o sin PCB) e instalado la librería de 
Adafruit. Solo nos falta crear un nuevo programa o sketch y a programar. 
En este ejemplo, vamos a obtener 3 valores del DHT11: 
• Humedad relativa: describe la cantidad de agua que se transporta por el aire, es 
importante para determinar el desarrollo de las nubes y el factor precipitación. 
• Temperatura ambiente: temperatura en un determinado lugar. 
• Índice de calor: indica cuánto calor hace teniendo en cuenta la humedad relativa y 
la temperatura. Nos da una idea de la sensación de calor. 
Ya verás como es muy sencillo, vamos a ver el código que nos hará falta. 
Librería DHT11 y variables 
#include <DHT.h> 
// Definimos el pin digital donde se conecta el sensor #define DHTPIN 2 
// Dependiendo del tipo de sensor #define DHTTYPE DHT11 
// Inicializamos el sensor DHT11 DHT dht(DHTPIN, DHTTYPE); 
Lo primero es importar la librería DHT.h. Luego definimos dos constantes una para indicar 
el pin donde hemos conectado el DHT11 (pin digital) y otra para indicar el tipo de sensor, 
DHT11. Esta librería también se utiliza para controlar el DHT22, el hermano mayor del 
DHT11. 
Por último, declaramos el objeto DHT con los parámetros pin y tipo de DHT. 
Función setup 
void setup() { 
 // Inicializamos comunicación serie 
 Serial.begin(9600); 
 // Comenzamos el sensor DHT 
 dht.begin(); 
 
 
 
 
} 
Función loop 
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"); 
} 
Lo primero que hacemos es utilizar un delay para esperar los 5 segundos recomendados. 
La librería de Adafruit para el DHT11 nos proporciona datos en grados centígrados y 
grados Fahrenheit. Para obtener los dos datos utilizamos la misma función, 
readTemperature(). 
Si no pasamos ningún parámetro nos devuelve la temperatura en grados centígrados. Si 
pasamos el valor true nos devuelve la temperatura en grados Fahrenheit. La humedad se 
obtiene llamando a la función readHumidity(). 
Es conveniente comprobar que la información no está corrupta y que realmente nos está 
devolviendo un número. Eso lo hacemos con la sentencia isnan(…). Esto nos dará 
verdadero si no es un número (isnan, Is Not a Number) y falso en caso contrario. 
Por último, obtenemos el índice de calor con la función computeHeatIndex. Nos puede 
devolver grados centígrados o grados Fahrenheit. Al final del todo mostramos la 
información en el monitor serie. 
Código completo del sensor de temperatura y humedad DHT11 
 
Este sería el código completo que tienes que utilizar para medir la temperatura y la 
humedad con el sensor DHT11. 
// Incluimos librería #include <DHT.h> 
// Definimos el pin digital donde se conecta el sensor #define DHTPIN 2 
// 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 Fahreheit 
 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 Fahreheit 
 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"); 
} 
Conclusiones sobre el sensor DHT11 
Después de culminar esta tercera practica en la que analizamos este sensor de humedad 
y tuvimos la oportunidad de ver el funcionamiento de su descendiente el DHT22, puedo 
decir con seguridad de que al momento de desear implementar cualquiera de los sensores 
antes vistos (lm35, termistor, dht11), debemos de mirar antes las características 
especificas de lo que deseemos medir, pues si bien los tres nos pueden otorgar la 
temperatura de su medio en unidades de grados centígrados, tienen costos diferentes, se 
pueden someter a condiciones diferentes y cada uno es viable en determinadas 
condiciones específicas. 
En lo particular hablando de Eduardo, se con certeza de que al momento de elaborar 
diseños buscaría implementar termistores, ya que requieren de una inversión menor y bajo 
condiciones estándares como las temperaturas de los equipos eléctricos, temperatura 
ambiente, estos sensores suelen ser más exactos, y si deseara tener un registro de los 
niveles de humedad pues aplicaría al dht11. 
 
 
 
 
 
 
 
Anexos

Continuar navegando