//Incluimos las librerias
#include "DHTesp.h"
//Librarias para el display
#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
//Declaramos nuestro objeto lcd, direccion I2C, columnas, filas
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo ServoA, ServoB, ServoC, ServoD, ServoE;
//Decaramos el variable que almacena el pin a conectar el DHT11
int LDR_PIN = 34;
int pinDHT = 15;
int pinbDHT = 25;
int pincDHT = 26;
int pindDHT = 22;
int pineDHT = 19;
int pirPin = 2; // Pin digital conectado al sensor PIR
int pirBPin = 16; // Pin digital conectado al sensor PIR
int pirCPin = 17;
int pirDPin = 35;
int pirEPin = 23;
int compresor = 12; // Pin Compresor
int cuartoA = 0;
int cuartoB = 0;
int cuartoC = 0;
int cuartoD = 0;
int cuartoE = 0;
int tmp = 19; // Temperatura del A/C.
const int buttonDown = 33;
const int buttonUP = 32;
int ServoAPin = 13;
int ServoAPos = 0;
int ServoBPin = 5;
int ServoBPos = 0;
int ServoCPin = 4;
int ServoCPos = 0;
int ServoDPin = 21;
int ServoDPos = 0;
int ServoEPin = 18;
int ServoEPos = 0;
//Instanciamos el DHT
DHTesp dht;
DHTesp dht2;
DHTesp dht3;
DHTesp dht4;
DHTesp dht5;
void setup() {
Serial.begin(115200);
//Iniciamos nuestra pantalla
lcd.init();
//Colocamos luz de fondo
lcd.backlight();
pinMode(pirPin, INPUT); // Configura el pin del PIR como entrada
pinMode(pirBPin, INPUT);
pinMode(pirCPin, INPUT);
pinMode(pirDPin, INPUT);
pinMode(pirEPin, INPUT);
pinMode(compresor, OUTPUT);
pinMode(buttonDown, INPUT);
pinMode(buttonUP, INPUT);
pinMode(LDR_PIN, INPUT);
ServoA.attach(ServoAPin);
ServoA.write(ServoAPos);
ServoB.attach(ServoBPin);
ServoB.write(ServoBPos);
ServoC.attach(ServoCPin);
ServoC.write(ServoCPos);
ServoD.attach(ServoDPin);
ServoD.write(ServoDPos);
ServoE.attach(ServoEPin);
ServoE.write(ServoEPos);
//Inicializamos el dht
dht.setup(pinDHT, DHTesp::DHT22);
dht2.setup(pinbDHT, DHTesp::DHT22);
dht3.setup(pincDHT, DHTesp::DHT22);
dht4.setup(pindDHT, DHTesp::DHT22);
dht5.setup(pineDHT, DHTesp::DHT22);
}
void loop() {
//Obtenemos el arreglo de datos (humedad y temperatura)
TempAndHumidity data = dht.getTempAndHumidity();
TempAndHumidity dataB = dht2.getTempAndHumidity();
TempAndHumidity dataC = dht3.getTempAndHumidity();
TempAndHumidity dataD = dht4.getTempAndHumidity();
TempAndHumidity dataE = dht5.getTempAndHumidity();
pinMode(buttonDown, INPUT);
int TempDown = digitalRead(buttonDown);
int TempUP = digitalRead(buttonUP);
Serial.println();
int analogValue = analogRead(A0);
//Mostramos los datos de la temperatura y humedad
if (TempDown && !(tmp == 16)){
tmp = tmp -1;
}
if (TempUP && !(tmp == 32)){
tmp = tmp +1;
}
lcd.setCursor(0, 0);
lcd.print("Tmp deseada: ");
lcd.setCursor(13, 0);
lcd.print(tmp);
Serial.println("Temperatura Cuarto A: " + String(data.temperature, 2) + "°C");
Serial.println("Temperatura Cuarto B: " + String(dataB.temperature, 2) + "°C");
Serial.println("Temperatura Cuarto C: " + String(dataC.temperature, 2) + "°C");
Serial.println("Temperatura Cuarto D: " + String(dataD.temperature, 2) + "°C");
Serial.println("Temperatura Cuarto E: " + String(dataE.temperature, 2) + "°C");
if (digitalRead(LDR_PIN) == LOW) {
Serial.println("Hay luz");
} else {
Serial.println("No hay luz ");
ServoDPos = 180;
ServoD.write(ServoDPos);
ServoEPos = 180;
ServoE.write(ServoEPos);
}
Serial.println("-----------------");
delay(3000);
int pirValue = digitalRead(pirPin); // Lee el valor del sensor PIR
int pirBValue = digitalRead(pirBPin); // Lee el valor del sensor PIR
int pirCValue = digitalRead(pirCPin); // Lee el valor del sensor PIR
int pirDValue = digitalRead(pirDPin); // Lee el valor del sensor PIR
int pirEValue = digitalRead(pirEPin); // Lee el valor del sensor PIR
if (pirValue == HIGH && data.temperature > tmp) { // Si se detecta movimiento
ServoAPos = 90;
ServoA.write(ServoAPos);
Serial.println("¡Movimiento detectado a!");
cuartoA = 1;
delay(100); // Espera un segundo para evitar múltiples detecciones cercanas
} else {
cuartoA = 0;
ServoAPos = 0;
ServoA.write(ServoAPos);
}
//Cuarto B:
if (pirBValue == HIGH && dataB.temperature > tmp) { // Si se detecta movimiento
ServoBPos = 90;
ServoB.write(ServoBPos);
Serial.println("¡Movimiento detectado b!");
cuartoB = 1;
delay(100); // Espera un segundo para evitar múltiples detecciones cercanas
} else {
cuartoB = 0;
ServoBPos = 0;
ServoB.write(ServoBPos);
}
//Cuarto C:
if (pirCValue == HIGH && dataC.temperature > tmp) { // Si se detecta movimiento
ServoCPos = 90;
ServoC.write(ServoCPos);
Serial.println("¡Movimiento detectado c!");
cuartoC = 1;
delay(100); // Espera un segundo para evitar múltiples detecciones cercanas
} else {
cuartoC = 0;
ServoCPos = 0;
ServoC.write(ServoCPos);
}
//Cuarto D:
if (pirDValue == HIGH && dataD.temperature > tmp) { // Si se detecta movimiento
ServoDPos = 90;
ServoD.write(ServoDPos);
Serial.println("¡Movimiento detectado D!");
cuartoD = 1;
delay(100); // Espera un segundo para evitar múltiples detecciones cercanas
} else {
cuartoD = 0;
ServoDPos = 0;
ServoD.write(ServoDPos);
}
//Cuarto D:
if (pirEValue == HIGH && dataE.temperature > tmp) { // Si se detecta movimiento
ServoEPos = 90;
ServoE.write(ServoEPos);
Serial.println("¡Movimiento detectado E!");
cuartoE = 1;
delay(100); // Espera un segundo para evitar múltiples detecciones cercanas
} else {
cuartoE = 0;
ServoEPos = 0;
ServoE.write(ServoEPos);
}
if (cuartoA == 1 || cuartoB == 1 || cuartoC == 1 || cuartoD == 1 || cuartoE == 1) {
if (data.temperature > tmp || dataB.temperature > tmp || dataC.temperature > tmp || dataD.temperature > tmp || dataE.temperature > tmp) {
digitalWrite(compresor, HIGH); // Encendemos el compresor
} else {
digitalWrite(compresor, LOW);
}
} else {
digitalWrite(compresor, LOW);
}
lcd.clear();
}