#include <DHT.h> //carga las librerias DTH (Humedad y Temperatura)
#include <Wire.h> //se carga la librería de la comunicación I2C, la cual usa el reloj, la pantalla LCD, el sensor de presión y el sensor de luz
#include <LCD.h> //incluimos también dos librerias para poder trabajar con la pantalla LCD
#include <LiquidCrystal_I2C.h> // Incluimos la libreria del LCD
#define DHTPIN 44 //Seleccionamos el pin en el que se conectará el sensor, en nuestro caso el pin Digital 44
#define DHT2PIN 45 //Seleccionamos el pin en el que se conectará el sensor, en nuestro caso el pin Digital 45
#define DHTTYPE DHT11 //Se selecciona el DHT11(hay otros DHT)
DHT dht(DHTPIN, DHTTYPE); //se inician los sensores
DHT dht2(DHT2PIN, DHTTYPE); //se inician los sensores
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Seteamos la direccion I2C
byte customChar[8] = {B01100, B10010, B10010, B01100, B00000, B00000, B00000, B00000 }; //creamos un array para poder escribir ºC en la pantalla LCD
bool Extractor_activado = false;
bool Calefactor_activado = false;
bool Aspersor_activado = false;
bool Ventilador_activado = false;
bool Alarma_activado = false;
float t = 0; //definimos la variable temperatura 1
float h = 0; //definimos la variable humedad 1
float t2 = 0; //definimos la variable temperatura 2
float h2 = 0; //definimos la variable humedad 2
float hmin = 20; //definimos la variable humedad minima
float hmax = 60; //definimos la variable humedad maxima
float tmin = 20; //definimos la variable temperatura minima
float tmax = 30; //definimos la variable temperatura máxima
float tmax2 = 32; //definimos la variable temperatura máxima
float promediot = 0;
float promedioh = 0;
int hact;
int hant;
int tact;
int tant;
int hact2;
int hant2;
int tact2;
int tant2;
int ptact;
int ptant;
int phact;
int phant;
int relePin1 = 32; //pin de activacion del rele
int relePin2 = 33; //pin de activacion del rele
int relePin3 = 34; //pin de activacion del rele
int relePin4 = 35; //pin de activacion del rele
int relePin5 = 40;
void setup() {
Serial.begin(9600); //Se inicia la comunicación serial
Serial.println("Sistema Iniciado..."); //se imprime en el minitor serial sistema iniciado
lcd.begin(20, 4); //iniciamos la pantalla LCD, el 20,4 indica que tenemos 20 columnas y 4 filas en nuestra pantalla
lcd.backlight(); //activamos la retroiluminación del LCD
lcd.createChar(0, customChar); //registramos el caracter especial
dht.begin(); //Se inicia el sensor de humedad y temperatura
dht2.begin(); //Se inicia el sensor de humedad y temperatura
pinMode(relePin1, OUTPUT); //rele de Ventilador
pinMode(relePin2, OUTPUT); //rele de Extractor
pinMode(relePin3, OUTPUT); //rele de Aspersor
pinMode(relePin4, OUTPUT); //rele de Alarma
pinMode(relePin5, OUTPUT); //rele Estado Solido 100A Calefactor
///// primera Pantalla /////
lcd.clear(); //se elimina lo que hubiese escrito en la LCD
lcd.setCursor(0, 0); //primera linea de nuestra pantalla
lcd.print("CONTROL MICROCLIMA"); // Aqi va el mensaje
lcd.setCursor(0, 1); //segunda linea de nuestra pantalla
lcd.print("CRIADERO DE CONEJOS"); // Aqi va el mensaje
lcd.setCursor(0, 2); //tercera linea de nuestra pantalla
lcd.print("SIS. AUTOMATIZADO"); // Aqi va el mensaje
lcd.setCursor(0, 3); //cuarta linea de nuestra pantalla
lcd.print("Lindberg Figueroa"); // Aqi va el mensaje
delay(1000);
lcd.clear();
}
void loop() {
h = dht.readHumidity(); //se guarda el valor de la humedad en la variable h
t = dht.readTemperature(); //se guarda la temperatura en la variable t
h2 = dht2.readHumidity(); //se guarda el valor de la humedad en la variable h2
t2 = dht2.readTemperature(); //se guarda la temperatura en la variable t2
hact = h; //lecturas actuales del sensor
tact = t;
hact2 = h2; //lecturas actuales del sensor
tact2 = t2;
ptact = promediot;
phact = promedioh;
promediot = (tact + tact2) / 2;
promedioh = (hact + hact2) / 2;
if (tact != tant || hact != hant) { //manda la lectura actual si no coincide con la anterior,
Serial.print("Temp1: "); //indica un cambio de temperatura o un cambio en la humedad
Serial.print(String ((int)t)); //imprimimos la temperatura1 en numeros enteros
Serial.print(" C");
Serial.print(" Hum1: "); //indica un cambio de la humedad1
Serial.print(String ((int)h)); //imprimimos la humedad en numeros enteros
Serial.println(" %"); //
tant = tact;
hant = hact;
}
if (tact2 != tant2 || hact2 != hant2) { //manda la lectura actual si no coincide con la anterior,
Serial.print("Temp2: "); //indica un cambio de temperatura2 o un cambio en la humedad
Serial.print(String ((int)t2)); //imprimimos la temperatura en numeros enteros
Serial.print(" C");
Serial.print(" Hum2: "); //indica un cambio de la humedad2
Serial.print(String ((int)h2)); //imprimimos la humedad en numeros enteros
Serial.println(" %"); //
tant2 = tact2;
hant2 = hact2;
}
if (ptact != ptant) { //manda la lectura actual si no coincide con la anterior,
Serial.print("promt: ");
Serial.print(String ((int)promediot));
Serial.write(byte(0));
Serial.print(" C");
Serial.print("promh: ");
Serial.print(String ((int)promedioh));
Serial.print(" %");
ptant = ptact;
phant = phact;
}
if (ptact != ptant) { //manda la lectura actual si no coincide con la anterior
lcd.clear();
lcd.setCursor(0, 0); //situamos el cursor en la columna 0 y linea 0
lcd.print("MONOTORIZAR CRIADERO");
lcd.setCursor(0, 1); //situamos el cursor en la columna 0 y linea 3
lcd.print("promedio Temp ");
lcd.print((int)promediot);
lcd.write(byte(0)); //escribimos el caracter especial ºC en la pantalla y el después el resto de variables, situandonos convenientemente por la pantalla
lcd.print("C");
lcd.setCursor(0, 2); //situamos el cursor en la columna 0 y linea 3
lcd.print("promedio Hum ");
lcd.print((int)promedioh);
lcd.print("%"); //escribimos el caracter especial % en la pantalla y el después el resto de variables, situandonos convenientemente por la pantalla
ptant = ptact;
phant = phact;
}
delay(500);
///// control de temperatura alta////////
if (promediot >= tmax) { // si la temperatura es mayor a 30 grados Cº se activará el ventilador
digitalWrite(relePin1, HIGH); //se enciende el Ventilador
Ventilador_activado = true;
delay(500);
} else if (promediot < tmax && promediot >= tmax2) { //OJO OJO OJO no funciona no se como hacer esta secuencia
digitalWrite(relePin2, HIGH); //se enciende el Extractor
Extractor_activado = true;
} else {
digitalWrite(relePin1, LOW); //se apaga el Ventilador
Ventilador_activado = false;
}
///// control de temperatura baja////////
if (t <= tmin || t2 <= tmin) { // si la temperatura es mayor a 28 grados Cº se activará el Extractor
digitalWrite(relePin5, HIGH); //se enciende el Calefactor
Calefactor_activado = true;
digitalWrite(relePin1, LOW); //se apaga el Ventilador
Ventilador_activado = false;
digitalWrite(relePin2, LOW); //se apaga el Extractor
Extractor_activado = false;
delay(500);
}
else {
digitalWrite(relePin1, LOW); //se enciende el Ventilador
Calefactor_activado = false;
}
}