//Codigo INVERNADERO AUTOMATIZADO.
//Estas librerias son necesarias para trabajar con el sensor DHT11 y el LCD con su modulo I2C.
#include <LiquidCrystal_I2C.h> //Libreria DISPLAY con modulo I2C.
#include <Wire.h>
#include <DHT.h> //Libreria DHT11.
//Estas librerias se usan para ocupar el sensor digital DS1820B.
#include <OneWire.h>
#include <DallasTemperature.h>
//Crear el objeto LCD dirección 0x3F y 16 columnas x 2 filas
LiquidCrystal_I2C lcd(0x3f,16,2); //Ya no es necesario determinar todos los pines.
//OBSERVACION: La dirección I2C del 8574 en proteus es 0x20
//Simulacion en software: LiquidCrystal_I2C lcd(0x20,16,2).
//Simulacion en hardware: LiquidCrystal_I2C lcd(0x3f,16,2).
//DEFINIMOS LOS PARAMETROS PARA DHT11
#define DHTPIN 12 // Pin donde se conecta el sensor.
#define DHTTYPE DHT11 // Dependiendo del tipo de sensor.
int temp,humedad; //Humedad y temperatura se definen como enteros.
int ventilador = 13; //Ventilador se define como entero y asignamos un pin (IN1 del relé)
int umbral = 24; //Umbral se designa como entero (umbral es una condicionante que activa el ventilador)
DHT dht(DHTPIN, DHTTYPE); // Inicializamos el sensor DHT11
//DEFINIMOS LOS PARAMETROS PARA SENSOR ANALOGICO DE LUMINOSIDAD LDR
int LEDPin = 11; // PIN digital donde se concecta el LED que se encendera o apagara dependiendo del sensor.
int LDRPin = A0; // PIN analogico donde se ubica el sensor LDR
//DEFINIMOS LOS PARAMETROS PARA DS18B20
#define Pin 7 //Se declara el pin donde se conectará el sensor
OneWire ourWire(Pin); //Se establece el pin declarado como bus para la comunicación OneWire
DallasTemperature sensors(&ourWire); //Se llama a la librería DallasTemperature
void setup() {
Serial.begin(9600); // Inicializamos comunicación serial con el puerto COM_6.
dht.begin(); // Comenzamos el sensor DHT.
lcd.init(); //Iniciamos el LCD.
lcd.backlight(); //Encender la luz de fondo
pinMode(LEDPin, OUTPUT); // Define LED como salida del sensor LDR.
pinMode(ventilador, OUTPUT); //Se define el ventilador como salida.
sensors.begin(); //Se inicia el sensor 1
delay(1000);
}
void loop() {
////////////////////////////DHT1: HUMEDAD Y TEMPERATURA. SE ACTIVA O APAGA EL VENTILADOR////////////////////////////
temp = dht.readTemperature();
humedad=dht.readHumidity();
Serial.print("Temperatura ambiente: "); //Escribe en el monitor serial.
Serial.print(temp);
Serial.println("ºC");
Serial.print("Humedad relativa: ");
Serial.print(humedad);
Serial.println("%");
lcd.setCursor(0,0);
lcd.print("T:"); //Escribe en el LCD.
lcd.print(temp);
lcd.print("C");
lcd.setCursor(6,0);
lcd.print("H:");
lcd.print(humedad);
lcd.print("%");
if(temp >= umbral){
digitalWrite(ventilador,HIGH); //En proteus ir HIGH aqui.
Serial.println("Ventilador encendido");
lcd.setCursor(0,1);
lcd.print("Ventilador ON");
}
if(temp < umbral){
digitalWrite(ventilador,LOW); //En proteus debe ir Low aqui.
Serial.println("Ventilador apagado");
lcd.setCursor(0,1);
lcd.print("Ventilador OF");
}
delay(4000);
///////////////////LDR: SE ENCIENDE O APAGA UN LED DEPENDIENDO LUMINOSIDAD: LUXIMETRO////////////////////
int ldr = analogRead(LDRPin); //Definimos el sensor LDR analogico en el pin A0.
if (ldr >= 350 && ldr < 990) { //El sensor LDR mide de 0 a 1000, donde 1K es la intensidad de luz maxima.
digitalWrite(LEDPin, LOW);
Serial.print("Intensidad luminica media-alta: ");
Serial.print(ldr);
Serial.println(" Lux");
Serial.println("LED OF");
}
else {
digitalWrite(LEDPin, HIGH);
Serial.print("Intensidad baja: ");
Serial.print(ldr);
Serial.println(" Lux");
Serial.println("LED ON");
}
/////////////////////DS18B20: SENSOR QUE MIDE LA TEMPERATURA DE UN LIQUIDO X//////////////////////////////
sensors.requestTemperatures(); //Se envía el comando para leer la temperatura
int temp1= sensors.getTempCByIndex(0); //Se obtiene la temperatura en ºC del sensor
Serial.print("Temperatura H20: ");
Serial.print(temp1);
Serial.println(" C");
delay(500);
}