/*
* Este es un programa para la Actividad 1 del curso
* Sensores, dispositivos, redes y
* protocolos de comunicaciones.
* Master Profesional IoT - UNIR
* Creado el 3/12/2023 por Victor Arriagada Martinez
* CICLO_DHT es determinado por el datasheet del sensor
*/
#include "DHT.h" // Importamos la libreria DHT.h
#define DHT_PIN 22 // Definicion pin DHT
#define LED_TEMP_PIN 15 // Definicion pin del led de temperatura
#define LED_HUM_PIN 14 // Definicion pin del led de humedad
#define BOTON_1_PIN 26 // Definicion pin del boton 1
#define BOTON_2_PIN 27 // Definicion pin del boton 2
#define DHT_TYPE DHT22 // Definicion del tipo de sensor DHT
#define CICLO_DHT 2000 // Definicion ciclo de lectura del sensor
float UMBRAL_TEMPERATURA_MAX = 45; // Declaracion variable umbral maximo temperatura
float UMBRAL_HUMEDAD_MAX = 60; // Declaracion variable umbral maximo humedad
float UMBRAL_HUMEDAD_MIN = 25; // Declaracion variable umbral minimo humedad
float valor_temp = 0; // Declaracion variable temperatura
float valor_hum = 0; // Declaracion variable humedad
unsigned long bandera_lectura = 0; // Declaracion variable bandera temporal de lectura DHT
bool alarmaTemperatura = false; // Declaracion variable estado alarma temperatura
bool alarmaHumedad = false; // Declaracion variable estado alarma humedad
DHT dht(DHT_PIN, DHT_TYPE); // Construccion del objeto dht con el pin y el tipo de sensor
// Funcion de configuracion
void setup() {
Serial.begin(115200); // Inicializacion puerto serial
Serial.println("Iniciando Actividad 1 - DHT22 + 2LEDs + 2 Botones"); // mensaje serial
pinMode(BOTON_1_PIN, INPUT_PULLUP); // Configuracion Boton 1
pinMode(BOTON_2_PIN, INPUT_PULLUP); // Configuracion Boton 2
pinMode(LED_TEMP_PIN, OUTPUT); // Configuracion LED temperatura (verde)
pinMode(LED_HUM_PIN, OUTPUT); // Configuracion LED humedad (azul)
dht.begin(); // Iniciacion del sensor DHT22
}
// Funcion de ejecucion
void loop() {
if(millis() - bandera_lectura > CICLO_DHT){ // Cada 2 segundo
bandera_lectura = millis(); // Reinicia bandera
valor_temp = dht.readTemperature(); // Lee temperatura
valor_hum = dht.readHumidity(); // Lee humedad
if(valor_temp > UMBRAL_TEMPERATURA_MAX){ // Si temperatura es mayor a 45°
alarmaTemperatura = true; // Activa estado alarma temperatura
}
//si humedad esta entre 25 y 60
if(valor_hum < UMBRAL_HUMEDAD_MIN || valor_hum > UMBRAL_HUMEDAD_MAX ){
alarmaHumedad = true; // Activa estado alarma humedad
}
Serial.print("["); // -----------------------------------------------------
Serial.print(millis()); // Mensajes via terminal serial
Serial.print(" mS] Temperatura: ");
Serial.print(valor_temp);
Serial.print(" °C - Humedad: ");
Serial.print(valor_hum);
Serial.print(" %H");
if(alarmaTemperatura && alarmaHumedad){
Serial.println(" ALARMA!! por Temperatura y Humedad");
}else if(alarmaTemperatura || alarmaHumedad){
if(alarmaTemperatura) Serial.println(" ALARMA!! por Temperatura");
if(alarmaHumedad) Serial.println(" ALARMA!! por Humedad");
}else{
Serial.println();
} // -----------------------------------------------------------------------
}
if(alarmaTemperatura){ // Si estado alarma temperatura esta activado
digitalWrite(LED_TEMP_PIN, HIGH); // Enciende el led temperatura
} else{
digitalWrite(LED_TEMP_PIN, LOW); // Apaga el led temperatura
}
if(alarmaHumedad){ // Si estado alarma humedad esta activado
digitalWrite(LED_HUM_PIN, HIGH); // Enciende el led humedad
}else{
digitalWrite(LED_HUM_PIN, LOW); // Apaga el led humedad
}
if(!digitalRead(BOTON_1_PIN) || !digitalRead(BOTON_2_PIN)){ // si se presiona algun boton
alarmaTemperatura = false; // Desactiva estado alarma temperatura
alarmaHumedad = false; // Desactiva estado alarma humedad
}
}