#include <Wire.h>
#include <Servo.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <LCD_I2C.h>
LCD_I2C lcd(0x27, 16, 2);
#define DHTTYPE DHT22
DHT dhtinterno(4, DHTTYPE);
DHT dhtexterno(5, DHTTYPE);
int tiempo = 0;
int humedadsuelo = 0;
int luz = 0;
int tempexterior = 0;
int tempinterior = 0;
int humedadanterior = 0;
int tempextanterior = 0;
int tempintanterior = 0;
int mostrandotemp = 0;
int cerrar = 0;
int LUZCIERRE = 20;
int TEMPMINIMA = 15;
int TEMPMAXIMA = 45;
int INICIORIEGO = 20;
int CORTERIEGO = 40;
#define VALORLDRMIN 965
#define VALORLDRMAX 35
#define VALORHUMEDADMIN 1023
#define VALORHUMEDADMAX 0
#define SERVO1CERRADO 45
#define SERVO1ABIERTO 90
#define SERVO2CERRADO 135
#define SERVO2ABIERTO 90
Servo servo_10;
Servo servo_11;
void setup() {
lcd.begin();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Invernadero");
lcd.setCursor(0, 1);
lcd.print("EPET N");
lcd.setCursor(6, 1);
lcd.print((char)223);
lcd.setCursor(7, 1);
lcd.print("1");
delay(2500);
lcd.clear();
pinMode(8, OUTPUT);
servo_10.attach(10);
servo_11.attach(11);
dhtinterno.begin();
dhtexterno.begin();
}
void loop() {
humedadsuelo = map(analogRead(A0), VALORHUMEDADMIN, VALORHUMEDADMAX, 0, 100);
luz = map(analogRead(A1), VALORLDRMIN, VALORLDRMAX, 0, 100);
tempexterior = dhtinterno.readTemperature();
tempinterior = dhtexterno.readTemperature();
if (humedadsuelo <= INICIORIEGO) {
digitalWrite(8, HIGH);
}
if (humedadsuelo >= CORTERIEGO) {
digitalWrite(8, LOW);
}
if (tempexterior <= TEMPMINIMA) {
cerrar = 1;
}
if (luz <= LUZCIERRE) {
cerrar = 1;
}
if (tempinterior >= tempexterior - 5) {
cerrar = 1;
}
if (tempinterior >= TEMPMAXIMA) {
cerrar = 0;
}
if (cerrar == 1) {
servo_10.write(SERVO1CERRADO);
servo_11.write(SERVO2CERRADO);
} else {
servo_10.write(SERVO1ABIERTO);
servo_11.write(SERVO2ABIERTO);
}
cerrar = 0;
if (tiempo <= 0) {
tiempo = 10000;
} else {
tiempo = tiempo - 100;
}
if (tiempo > 5000) {
if (mostrandotemp == 0 || tempinterior != tempintanterior || tempexterior != tempextanterior) {
mostrandotemp = 1;
lcd.setCursor(0, 0);
lcd.print("Temp Int: ");
lcd.setCursor(10, 0);
lcd.print(tempinterior);
if (tempinterior >= 0) {
lcd.setCursor(11, 0);
}
if (tempinterior >= 10 || tempinterior < 0) {
lcd.setCursor(12, 0);
}
if (tempinterior <= -10) {
lcd.setCursor(13, 0);
}
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Temp Ext: ");
lcd.setCursor(10, 1);
lcd.print(tempexterior);
if (tempexterior >= 0) {
lcd.setCursor(11, 1);
}
if (tempexterior >= 10 || tempexterior < 0) {
lcd.setCursor(12, 1);
}
if (tempexterior <= -10) {
lcd.setCursor(13, 1);
}
lcd.print((char)223);
lcd.print("C");
}
} else {
if (mostrandotemp == 1 || humedadsuelo != humedadanterior) {
mostrandotemp = 0;
lcd.setCursor(0, 0);
lcd.print("Hum. del Suelo:");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(humedadsuelo);
if (humedadsuelo >= 0) {
lcd.setCursor(1, 1);
}
if (humedadsuelo >= 10 || humedadsuelo < 0) {
lcd.setCursor(2, 1);
}
if (humedadsuelo >= 100 || humedadsuelo <= -10) {
lcd.setCursor(3, 1);
}
lcd.print("%");
}
}
delay(100);
humedadanterior = humedadsuelo;
tempintanterior = tempinterior;
tempextanterior = tempexterior;
}