/*
RETO #37 CIRCUITOS EN ESP32
NOMBRES INTEGRANTES:Juan Pablo Tirado /Carlos Andres Rondon
CURSO:10-2
PUNTO #5: SISTEMA AUTOMATICO DE GRANJA
DOCENTE: IVAN MORENO
*/
#include <Keypad.h>
#include <LiquidCrystal.h>
#include <DHT.h>
#include <Servo.h>
LiquidCrystal lcd(21, 22, 18, 19, 23, 5);const byte FILAS = 4;
const byte COLUMNAS = 4;
char teclas[FILAS][COLUMNAS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte pinesFilas[FILAS] = {32, 33, 25, 26};
byte pinesColumnas[COLUMNAS] = {27, 14, 13, 34};
Keypad teclado = Keypad(makeKeymap(teclas), pinesFilas, pinesColumnas, FILAS, COLUMNAS);
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define LED_VERDE 2
#define LED_ROJO 15
#define RELAY_RIEGO 16
#define RELAY_VENTILADOR 17
Servo servo;
#define SERVO_PIN 12
String password = "1234";
String entrada = "";
bool acceso = false;
void setup() {
lcd.begin(16, 2);lcd.print("Granja IoT");delay(2000);lcd.clear();
pinMode(LED_VERDE, OUTPUT);pinMode(LED_ROJO, OUTPUT);
pinMode(RELAY_RIEGO, OUTPUT);pinMode(RELAY_VENTILADOR, OUTPUT);
digitalWrite(RELAY_RIEGO, LOW);digitalWrite(RELAY_VENTILADOR, LOW);
servo.attach(SERVO_PIN);servo.write(0);dht.begin();
}
void loop() {
if (!acceso) {
solicitarClave();
} else {
monitorearGranja();
}
}
void solicitarClave() {
lcd.setCursor(0,0);lcd.print("Ingrese clave:");
lcd.setCursor(0,1);lcd.print(entrada);
char tecla = teclado.getKey();
if (tecla) {
if (tecla == '#') {
verificarClave();
} else if (tecla == '*') {
entrada = "";
lcd.clear();
} else {
entrada += tecla;
}
}
}
void verificarClave() {
lcd.clear();
if (entrada == password) {
lcd.print("Access Correcto");digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_ROJO, LOW);servo.write(90);
acceso = true;delay(2000);lcd.clear();
} else {
lcd.print("Clave Incorrecta");digitalWrite(LED_ROJO, HIGH);
delay(2000);digitalWrite(LED_ROJO, LOW);
entrada = "";lcd.clear();
}
}
void monitorearGranja() {
float temp = dht.readTemperature();
float hum = dht.readHumidity();
lcd.setCursor(0,0);lcd.print("T:");lcd.print(temp);
lcd.print("C H:");lcd.print(hum);lcd.print("%");
if (hum < 40) {
digitalWrite(RELAY_RIEGO, HIGH); // encender riego
} else {
digitalWrite(RELAY_RIEGO, LOW);
}
if (temp > 28) {
digitalWrite(RELAY_VENTILADOR, HIGH); // encender ventilador
} else {
digitalWrite(RELAY_VENTILADOR, LOW);
}
char tecla = teclado.getKey();
if (tecla) {
if (tecla == 'A') digitalWrite(RELAY_RIEGO, !digitalRead(RELAY_RIEGO));
if (tecla == 'B') digitalWrite(RELAY_VENTILADOR, !digitalRead(RELAY_VENTILADOR));
if (tecla == 'D') {
acceso = false; // cerrar sesión
servo.write(0);
lcd.clear();
}
}
delay(1000);
}