Cultivo indoor autonomo

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.


}
2 Likes

Hola SOlartemontoya.
Desde ya que toda la comunidad va a ayudarte.
Ve esbozando la idea, porque solo pusiste que vas a usar.
No has publicado lo que has hecho ni como esta todo conectado.

Lee las normas del foro y usa tags para códigos, enlaces e imágenes.

Leíste esto?
Cultivo autónomo

Claro que si, he leído todo el post, pero sigo sin poder hacer funcionar que muestre los días de la semana en la pantalla LCD por el momento tengo comentado esa parte del codigo para que pueda cargarse ya que sale error, en fin ese es un problema mínimo, hacer funcionar el Wifi y el Contador de días es el principal objetivo en este momento.

Ya puse a funcionar la ilimunacion y ventiliazion con temporizadores, a determinadas horas del día, el sensor de humedad de tierra y el sensor de temperatura y humedad hambiente se muestran en la pantalla LCD, me falta conectar la bomba de riego, para cuando este activado el LED de Aviso de Riego, yo manualmente pueda activar el rele de la bomba de agua mediante un Boton, ya con el agua preparada en un tanque con el fertilizante o los nutrientes que necesite la planta en el momento. se activa la bomba de agua y empieza el riego de todas las plantas ya uno determina que cantidad de agua necesitan aproximadamente.

Buenas, yo estoy haciendo algo parecido, estaria bien si subieras alguna foto de tu cableado para comparar soluciones.

Para el seguimiento de mi proyecto, y ir actualizando los planos he creado el proyecto

Aun no tiene mucho ya que hace poco que empece y aun el codigo no lo he tocado.

Estaria genial si entre tus ideas, las mias y las de la gente que este creando algo parecido, intentaramos juntarlos y crear algo lo mejor, mas estandar y facil/barato de montar posible.

La principal diferencia con vuestros proyectos es que yo pienso pasar a informacion a una arduino conectada por usb y desde ahi dibujar graficas y darle ordenes para que haga cosas via web(cualquier ordenador valdria no solo una rPi), pero si lo estandarizaramos, podriamos hacer algo que pudiera subir cosas a un servidor externo y a la vez a la pantalla lcd

Si nos juntaramos unos cuantos podriamos incluso diseniar alguna placa pcb especifica y encargando 5 o 10 seguro nos saldrian baratas.

Muchas gracias por vuestro tiempo, un saludo.

A mi me gustaría que todos lo que queremos hacer un cultivo trabajemos juntos en hacerlo pero si quieren ir por su cuenta no me parece mal.

Que problema tienes con el LCD? Que tipo de LCD es?

Para poner en hora el rtc te aconsejo que no uses:

//RTC.adjust(DateTime(2017,01,05, 23,33,40)); // Establece la fecha y hora (Comentar una vez establecida la hora)

Es Mejor esta otra que establece la hora en el momento de compilar y subir el código:

// RTC.adjust(DateTime(__DATE__, __TIME__));

Y no tienes que andar poniendo tu la fecha, te dejo como tenia yo conectado el LCD lo mismo te ayuda.

Al final el LCD se quedo pequeño ahora estoy con la pantalla TFT que queda mas chulo:

El problema hiddennotebook es que nadie mira que otras cosas se han hecho o no saben hacerlo.

Es mas fácil publicar su problema y buscar su solución que hacer algo conjunto y extractar lo necesario de ello.

No hablo por este hilo ni por el tuyo, lo digo en general porque al leer todos los hilos veo repetición constante de temas que hace horas otro inicia.
Una lectura rápida de las 2 paginas de cada subforo te daria un pantallazo de lo que se esta haciendo.

Buenas noches, yo estoy de acuerdo con hiddenotebook, y empeze este proyecto siguiendo el tuyo, me gustaria que pudieramos trabajar todos en un mismo proyecto, y podernos ayudar con los problemas que vayan surgiendo, solo que decidi hacer este nuevo hilo, debido a que vi que tu post se encontraba detenido.

Quedo atento, para subir los avances que he hecho en el cultivo, en este hilo. o en el de hiddenotebook.

hiddenotebook Muchas gracias por el aporte, ya pedi la pantalla TFT para hacer el cambio. El problema que tenia con la de LCD es que no me funcionaba el codigo para mostrar el dia de la semana. pero ya que cambiare de pantalla el codigo cambiara.

Hola, soy muy nuevo en esto, pero tome un codigo de esta pagina y le agregue algunas opciones, quedo andando. Se los dejos por si alguien puede y quiere agregarle mas cosas o corregirlo seria de gran ayuda. Un abrazo (no se como incluir el codigo, asique lo pongo en como adjunto, perdon!!)

dual_en_mismo_sketch.ino (8.26 KB)

Buenas compañeros , acabo de apuntarme a este foro y estoy flipando de la cantidad de información. Yo estoy pensando en hacer un cuarto automático indoor , os parece si hacemos un grupo de trabajo para llevar a cabo la idea entre los interesados . Estaba pensando en cultivo noria hidropónico .

1 Like