PIC18F25K22 & XC8: Uso del sensor de temperatura y humedad relativa DHT22/AM2302 - Mostrar datos en una LCD16x2


Saludos! Siguiendo con los ejemplos del PIC18F25K22 en XC8 toda el turno de usar un sensor de temperatura y humedad relativa, específicamente el DHT22/AM2302. Para ello se ha creado una pequeña librería con la cual podemos obtener los datos de forma sencilla, para este ejemplo en particular se mostraran los datos en un display LCD16x2. 

Circuito:
Como ya hemos venido haciendo en otros ejemplos estaré usando la PIC18BT MCE Development Board v1.0 para testear el codigo, pero el circuito es muy sencillo aca tienes como quedaría conectado:

Código:
Con respecto al codigo vamos a mencionar que tenemos una estructura con la cual podemos tener acceso a los datos de temperatura y humedad entregado por el sensor, tambien tenemos un enum de errores/fallos que pudiera tener el sensor.

typedef enum{
        DHT22_ERROR_TIMEOUT = 0,    // El sensor no responde o se desconectó
        DHT22_OK = 1,               // Lectura exitosa
        DHT22_ERROR_CHECKSUM = 2,   // Datos corruptos por ruido
        DHT22_ERROR_RANGE = 3       // Valores fuera de límites (-40 a 80 C)
    }DHT22_Status_t;

typedef struct{
        DHT22_Status_t status;
        float temperature;
        float relativeHumidity;
        uint8_t  str_temperature[7];
        uint8_t  str_relativeHumidity[6];
    }DHT22_Sensor_t;

Tenemos dos formas de acceder a los datos, la primera es directo en tipo float y la segunda es en formatro string (para usarse directamente y mostrar en la LCD por ejemplo).

Con respecto a la funciones solo tenemos dos:
  • void DHT22_Initialize(void); Inicializa el pin usado para el sensor.
  • bool DHT22_Read(DHT22_Sensor_t *sensor); Lee y almacena la temperatura y humedad relativa en una estructura del tipo "DHT22_Sensor_t" y retorna un dato tipo bool = 1 si la lectura fue exitosa. Toda la rutina de esta funcion esta pensada para atender la comunicacion descrita en la hoja de datos.
Conociendo esto tenemos el siguiente ejemplo. Leemos los datos del sensor cada dos segundos, en caso de ser exitoso/correcto mostramos los datos en la pantalla, caso contrario mostramos el tipo de error queposiblemente se tenga en el sensor (posiblemente se ocupen mejorar en la libreria, pero eso sera para un futuro de momento esta estable y funcional). Sin mas el codigo es el siguiente:

Vídeo:
Aquí un pequeño vídeo del circuito y codigo en funcionamiento:


Descargas:
Aquí el enlace directo para DESCARGAR los archivos disponibles, también puedes revisar o descargar la información desde mi repositorio en GitHub, si no sabes como descargarlo puedes checar aquí, bueno por el momento es todo si tienes dudas, comentarios, sugerencias, inquietudes, traumas, etc. dejarlas y tratare de responder lo mas pronto posible.



Donaciones:
Si te gusta el contenido o si los recursos te son de utilidad, comparte el enlace en tus redes sociales o sitios donde creas que puede ser de interés y la otra puedes ayudarme con una donación para seguir realizando publicaciones y mejorar el contenido del sitio. También puedes hacer donaciones en especie, ya sea con componentes, tarjetas de desarrollo o herramientas. Ponte en contacto para platicar, o puedes volverte uno de nuestros sponsors.


Pido una retroalimentación avisando cada que un enlace no sirva o tenga errores al momento de abrirlo, así también si una imagen no se ve o no carga, para corregirlo en el menor tiempo posible.

Links:

Publicar un comentario

0 Comentarios