Buenas Amigos.
Tengo un cultivo indoor de cannabis y lo estoy automatizando con una Arduino Mega 2560 con los siguientes componentes: Sensor FC-28 humedad de tierra, Sensor DHT11 temperatura y humedad, un RTC DS1307, y una pantalla LCD de 16x2, 3 Módulos Rele para controlar la iluminación, la bomba de riego y la ventilación.
"próximamente subiré fotos del montaje del armario, la instalación, y como realizare el sistema de riego".
/*
Cultivo Indoor Autonomo 1.0
Versión del sketch: 0.2
05/01/2017
#include "RTClib.h" // Cargar Librería RTC.
#include <LiquidCrystal.h> // Cargar Librería LiquidCrystal.
#include "DHT.h" // Cargar Librería DHT.
#include <Wire.h> // Libreria comunicacion I2C.
// DHT11
#define DHTPIN 52 // Seleccionamos el pin en el que se conectará el sensor.
#define DHTTYPE DHT11 // define el tipo de sensor DHT.
DHT dht(DHTPIN, DHTTYPE); // Variable usada para comunicarse con el sensor DHT11.
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Seleccionamos el pin en el que se conectara la pantalla.
RTC_DS1307 RTC;
bool PowerON = false; // Variable booleana para el encendido con el Boton.
int sensorHumedad; // Variable para SoilSensor.
int botonAnt;
int botonvenAnt;
// Array para mostrar los dias de la semana
const char* diaDeSemana[7]= {"Domingo", "Lunes", "Martes", "Miercoles","Jueves", "Viernes", "Sabado"};
// Creamos un nuevo caracter una gota de agua para el LCD
byte Drop[8] =
{
B00000,
B00100,
B01110,
B11111,
B11111,
B11111,
B01110,
B00000
};
// Creamos un nuevo caracter un reloj para el LCD
byte Clock[8] =
{
B01110,
B11011,
B11011,
B11001,
B11111,
B11111,
B01110,
B00000
};
void setup()
{
lcd.begin(16,2); // Se inicia LCD
lcd.clear(); // Limpiamos la pantalla.
pinMode(13, OUTPUT); // Indicador Led de Humedad
pinMode(50, OUTPUT); // Luz
pinMode(48, OUTPUT); // Ventilazion
pinMode(8, INPUT_PULLUP); // Boton
pinMode(9, INPUT_PULLUP); // Boton Ventilazion
Wire.begin(); // Inicia el puerto I2C
RTC.begin(); // Inicia la comunicación con el RTC
dht.begin(); //Se inicia el sensor DHT11.
lcd.createChar(0, Drop);
lcd.createChar(1, Clock);
//RTC.adjust(DateTime(2017,01,05, 23,33,40)); // Establece la fecha y hora (Comentar una vez establecida la hora)
}
void loop() { // Esta función se mantiene en bucle...
//----------Funcion BOTON Encendido de Luz Manual----------
bool boton = digitalRead(8); // Variale booleana para leer el boton.
if (boton == LOW && botonAnt == HIGH) { // Si pulsamos el boton
digitalWrite(50, PowerON); // Como el pin va invertido, lo establecemos antes de cambiar el estado.
PowerON = ! PowerON ; // Invertimos el estatus de la fuente.
digitalWrite(50, PowerON); // Encender o apagar el LED.
}
botonAnt = boton; // almacena estado anterior
//----------Funcion BOTON Encendido de Ventilazion Manual----------
bool botonven = digitalRead(9); // Variale booleana para leer el boton.
if (botonven == LOW && botonAnt == HIGH) { // Si pulsamos el boton
digitalWrite(48, PowerON); // Como el pin va invertido, lo establecemos antes de cambiar el estado.
PowerON = ! PowerON ; // Invertimos el estatus de la fuente.
digitalWrite(48, PowerON); // Encender o apagar el LED.
}
botonAnt = boton; // almacena estado anterior
//---------Lectura Sensores--------
sensorHumedad = analogRead(A0); // Leemos la entrada analógica pin 0:
sensorHumedad = map (sensorHumedad, 0, 1023, 100, 0); // Mapeamos el valor del sensor de 0 a 100
int h = dht.readHumidity(); //Se lee la humedad DHT11.
int t = dht.readTemperature(); //Se lee la temperatura DHT11.
//----------Monitor LCD----------
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC.
lcd.setCursor(0, 0); // Cursor en posicion 0 fila 0.
lcd.write((byte)1); // Muestra el caracter creado reloj.
lcd.setCursor(2, 0); // Cursor en posicion 0 fila 0.
char myBuffer[16]; // Creamos myBuffer para mostrar bien los dijitos del 1 al 9.
sprintf(myBuffer, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
lcd.print(myBuffer); // Muestra la hora, minutos y segundos.
//lcd.setCursor(9, 0); // Cursor en posicion 9 fila 0.
//lcd.print(diaDeSemana[now.dayOfWeek()]);
//Sensor humedad tierra LCD
lcd.setCursor(0, 1); // Cursor en posicion 0 fila 1.
lcd.write((byte)0); // Muestra la gota de agua.
lcd.print(" "); // Espacio entre la gota y el valor.
lcd.print(sensorHumedad); // Muestra valor leido de humedad.
lcd.print("% "); // Muestra Signo de %
//END Sensor humedad tierra LCD
// DHT11 LCD
lcd.setCursor(6, 1); // Cursor en fila 2 posicion 1.
lcd.print(t); // Muestra la temperatura.
lcd.print((char)223); // Simbolo de los grados.
lcd.print("C "); // La C de centigrados.
lcd.print(h); // Muestta la Humedad.
lcd.print("%"); // Muestra simbolo de %
lcd.println("H"); // Muestra caracter H
// END DHT11 LCD
//----------Sensor Humedad de Tierra ENCENDIDO Led Verde de Aviso de RIEGO----------
if (sensorHumedad < 35) // si el sensor de humedad en tierra lee menos de 35%...
{
Serial.print("Regar ");
digitalWrite(13, HIGH); // ...Enciende un led y la bomba de agua...
}
if (sensorHumedad > 80) // Si el sensor de humedad en tierra lee mayor de 85%
{
Serial.print("Detener Regado ");
digitalWrite(13, LOW); // ... Apagamos el led y la bomba de agua...
} //Cerramos la llave del if.
//----------Temporizador ENCENDIDO Y APAGADO Iluminacion y Led Amarillo de Aviso----------
if (now.hour()== 06 && now.minute() ==00) // cuando sea la hora indicada enciende la luz...
{
Serial.print("Luz Encendida ");
digitalWrite(50, HIGH);
} //Cerramos la llave del if.
if (now.hour()== 18 && now.minute() ==00) //cuando sea la hora indicada apaga la luz...
{
Serial.print("Luz Apagada ");
digitalWrite(50, LOW);
} //Cerramos la llave del if.
//----------Temporizador ENCENDIDO Y APAGADO Ventilazion y Led Blanco de Aviso (Horarios:9:00am-12:00pm//4:00pm-7:00pm//12:00am-1:00am)----------
if (now.hour()== 9 && now.minute() ==00) // cuando sea la hora indicada enciende la luz...
{
Serial.print("Ventilador Encendido ");
digitalWrite(48, HIGH);
} //Cerramos la llave del if.
if (now.hour()== 12 && now.minute() ==00) //cuando sea la hora indicada apaga la luz...
{
Serial.print("Ventilador Apagado ");
digitalWrite(48, LOW);
} //Cerramos la llave del if.
if (now.hour()== 16 && now.minute() ==00) // cuando sea la hora indicada enciende la luz...
{
Serial.print("Ventilador Encendido ");
digitalWrite(48, HIGH);
} //Cerramos la llave del if.
if (now.hour()== 19 && now.minute() ==00) //cuando sea la hora indicada apaga la luz...
{
Serial.print("Ventilador Apagado ");
digitalWrite(48, LOW);
} //Cerramos la llave del if.
if (now.hour()== 00 && now.minute() ==00) // cuando sea la hora indicada enciende la luz...
{
Serial.print("Ventilador Encendido ");
digitalWrite(48, HIGH);
} //Cerramos la llave del if.
if (now.hour()== 01 && now.minute() ==00) //cuando sea la hora indicada apaga la luz...
{
Serial.print("Ventilador Apagado ");
digitalWrite(48, LOW);
} //Cerramos la llave del if.
}