#include <DHTesp.h> //libreria sensor dht22
#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
const int DHT1_PIN = 15; //Declarar pin del primer sensor DHT22
const int DHT2_PIN = 5; //Declarar pin del segundo sensor DHT22
const int LED_PIN = 2; //Declarar pin del LED
const int inputPin = 23; // Pin del sensor PIR
Servo servo; // Objeto para controlar el servo
int servoPos = 90; // Posición inicial del servo
bool puertaAbierta = false;
DHTesp DHT1; //Objeto primer Sensor DHT22
DHTesp DHT2; //Objeto segundo Sensor DHT22
LiquidCrystal_I2C lcd(0x27, 20, 4); // Conf del LCD
int val = 0; // Variable para leer el estado del sensor
int StatusCode; // Variable para leer el estado de la escritura en ThingSpeak
void setup() {
Serial.begin(115200);// Asignacion del monitor serial
DHT1.setup(DHT1_PIN, DHTesp::DHT22); //inicializar primer sensor DHT22
pinMode(LED_PIN, OUTPUT);//Inicializar pin
lcd.init();
lcd.backlight();
pinMode(inputPin, INPUT); // Configurar el sensor como entrada
servo.attach(18); // Conecta el servo al pin 18
servo.write(servoPos); // Establece la posición inicial del servo
}
void loop() {
TempAndHumidity dht1 = DHT1.getTempAndHumidity(); //Obtiene valores del sensor DHT22
val = digitalRead(inputPin); // Leer el valor de entrada del sensor
float t = dht1.temperature; // Guarda valor de temperatura en Celsius
float h = dht1.humidity; // Guarda valor de humedad del aire
// Impresión de los resultados de temperatura en el monitor serial
Serial.print("Temperatura = ");
Serial.print(t);
Serial.print(" ");
Serial.print((char)176);//Muestra el carácter de los grados
Serial.println("C");
// Impresión de los resultados de humedad del aire en el monitor serial
Serial.print("Humedad del aire = ");
Serial.print(h); // Imprime el valor de humedad
Serial.println("%");
//Impresion de los resultados de los sensores en el LED 20X4
lcd.clear();
lcd.setCursor(0,0);
lcd.print("TEMP: ");
lcd.println(t);
lcd.setCursor(0,1);
lcd.print("H AIRE: ");
lcd.println(h);
delay(750);
/*-----------Condiciones para sensores según tabla de conservacion de cultivos ----------*/
//S1 = YL69 sensor de temperatura entre 0 a 40 °C
//S2 = DHT22 sensor de humedad del aire
// (S1 + S2 ) * (S1 + S2’ ) * (S1’ + S2 )
// s = 50;
// Condiciones validas para activar el servomotor
if((t>25 || h<40 ) && (t>25 || h>40 ) && (t<25 || h<40 ))
{
// Activar el servomotor y Sensor de movimiento al tener grandes lluvias o cuando
//se necesite regar platas o dejarlas solear la cosecha.
digitalWrite(LED_PIN, HIGH); //prender el boton solo si cumple las condiciones
Serial.println("SENSOR PIR ACTIVADO"); //Imprimir en el serial La activadcion del sensor
lcd.setCursor(0,2);// Definir como va a ir presentado en el Lcd
lcd.print("CALCULO ADECUADO ");//Imprimir en el LCD.
ON();// Cumple la funcion de al mover el servo tener en cuenta que estamos en una t y h adecuada
delay(1000);// El tiempo que demora en presentarce
}
else {
digitalWrite(LED_PIN, LOW);//apagar el boton solo si cumple las condiciones
Serial.println("SENSOR PIR DESACTIVADO");////Imprimir en el serial La desactivacion del sensor
lcd.setCursor(0,2);// Definir como va a ir presentado en el Lcd
lcd.print("SIN CALCULAR ");//Imprimir en el LCD.
delay(1000);// El tiempo que demora en presentarce
}
// CONFIGURACION COMO SE VA A MOVER EL SERVOMOTOR A 0 Y 90 GRADOS
// Ya que al ejecutarse este movimiento indicara que la temperatura y humedad estan en optimas condiciones para el cultivo
if (Serial.available() > 0) {
String command = Serial.readStringUntil('\n');
command.trim();
if (command == "open") {
ON();
} else if (command == "close") {
OFF();
}
}
}
void ON() {
servo.write(0);
delay(2000);
servo.write(servoPos);
}
void OFF() {
servo.write(90);
delay(2000);
servo.write(servoPos);
}