El DHT11 es un sensor de temperatura y de humedad.
Definición de pines
El primer paso es definir la ubicación de los pines para que estos coincidan con las conexiones de tu tarjeta. Esto se puede hacer editando el archivo DHT11.h.
DATA_DHT11: Pin de datos del sensor
Funciones
Las funciones definidas en la librería son:
void DHT11_Start()
Esta función sirve para iniciar la comunicación entre el sensor y nuestro microcontroaldor.
Parámetros de entrada:
- No hay parámetros
Parámetros de salida:
- No hay parámetros
void DHT11_Response()
Esta función sirve para esperar la respuesta del sensor en caso de que haya recibido la condición de inicio de transferencia.
Parámetros de entrada:
- No hay parámetros
Parámetros de salida:
- No hay parámetros
int DHT11_ReadByte()
Esta función recibe y almacena un byte recibido de información.
Parámetros de entrada:
- No hay parámetros
Parámetros de salida:
- int: Almacena el byte recibido del sensor.
int DHT11_ReadData(int *info)
Esta función realiza todo lo necesario para recibir y almacenar los 5 bytes de información que nos envía el sensor.
Parámetros de entrada:
- int *info: En esta variable se guardará la información de todos los bytes recibidos por el sensor.
- info[0]: humedad entero
- info[1]: humedad decimal
- info[2]: temperatura entero
- info[3]: temperatura decimal
- info[4]: paridad
Parámetros de salida:
- int: Nos indica si la recepción de datos fue o no exitosa.
- 1: Si la información se recibió correctamente
- 0: Si la información NO se recibió correctamente
Código de ejemplo
#include <18f4550.h> #Fuses HSPLL, NOWDT, NOPROTECT, NOLVP, NODEBUG, USBDIV, PLL2, CPUDIV1, VREGEN #use delay (clock=48M) //Seleccionamos la frecuencia de reloj de 48MHz #include <MLCD.c> #use standard_io(c) #include "DHT11.c" int valores[5]={0,0,0,0,0}; // Almacena los 40 bits recibidos int dataOK = 0; void main(void){ lcd_init(); while(true){ dataOK = DHT11_ReadData(valores); if (dataOK){ printf(lcd_putc, "\fSens"); lcd_gotoxy(1,2); printf(lcd_putc, "DHT11"); lcd_gotoxy(7,1); printf(lcd_putc, "Hum=%2d.%1d%%", valores[0],valores[1]); lcd_gotoxy(7,2); printf(lcd_putc, "Tem=%2d.%1dC", valores[2],valores[3]); } else{ printf(lcd_putc, "\f NO CONNECTED"); } delay_ms(1500); } }