Go Down

Topic: Cultivo Autónomo. (Read 67859 times) previous topic - next topic

_jose_

Que les parece si en vez de controlar todo con un mismo arduino, desglosamos los mecanismos.

Se me ocurre que con un arduino nano y un dht22, un caloventor, un humificador y un cooler, se puede controlar temperatura y humedad independientemente del sensor que hayamos puesto en el arduino "principal" que muestra el valor en el LCD.

Es un gasto extra, pero creo que la comodidad de despejar y olvidarnos del control de esas funciones tiene su justificativo.

Si la idea es hacer dos compartimentos (vegetativo y floración) las temperaturas y humedades son iguales en ambos, esto seria productivo a largo plazo.

Abrazo a todos y muchas gracias por el aporte de todos!
Pienso que eso complica la instalacion y incrementa el coste y solo seria necesario
 cuando se agoten las posibilidades de la placa, y se tiene la ventaja de que ninguno de los parametros a controlar requiere de gran potencia de proceso ,es decir ,no es necesario que cada segundo controles temperatura ,humedad,horario y demas parametros.Estructurando bien la programacion ,un mega da para todo eso.

hiddenotebook

Gracias jose la verdad es que tienes razón no hay que estar midiendo constantemente la temperatura si por ejemplo en un indoor sin ventilación la temperatura se dispara en 2 minutos sobre todo en verano.

Siento mucho llevar un tiempo sin actualizar. pero en mi casa es imposible cultivar nada en verano, incluso con aire acondicionado.

cololata

#212
Jun 07, 2016, 12:27 am Last Edit: Jun 07, 2016, 01:01 pm by cololata
hola a todos, quiero compartir algo parecido pero distinto.

Les dejo el scketch para que los expertos lo analicen. Muchas gracias a todos por la info compartida.

Code: [Select]
#include <TimeAlarms.h>

#include "Time.h"

#include "DHT.h" //cargamos la librería DHT
#define DHTPIN A2 //Seleccionamos el pin en el que se //conectará el sensor
#define DHTTYPE DHT11 //Se selecciona el DHT11 (hay //otros DHT)
DHT dht(DHTPIN, DHTTYPE); //Se inicia una variable que será usada por Arduino para comunicarse con el sensor

#define address 69
int vaporizador = 4;   // Para activar el evaporizador con el pin digital 4
int intraccion  =  3;   // Para activar la extraccion del aire con el pin digital 3
int luz  =  2;          // Para activar la luz con el pin digital 2
int dias;               // Para contar los dias transcurridos
int conta;              //¨Para verificar el siguinte dia

void setup()
{
    setTime(15,27,00,6,6,2016);
    Serial.begin(9600);   
    dht.begin();             //Se inicia el sensor
   
   
    pinMode(intraccion, OUTPUT);           // pone el pin como salida
    pinMode(vaporizador, OUTPUT);          // pone el pin como salida
    pinMode(luz, OUTPUT);                   // pone el pin como sali
   
}
 
void loop()

 
    control_mensual_crecimiento();
    control_mensual_floracion();     
 
}



void control_mensual_crecimiento()
{
    while (dias < 30)
    {
     
     
      Serial.println("**Estado de Crecimiento**");
     
     
      periodo_luz_crecimiento();
     
      if (hour() >= 6 && hour() <= 23)
        {
          tem_hum_dia(); 
        }
        else if (hour() >= 00 && hour() <= 5)
        {
          tem_hum_noche();
        }
      Serial.print("Valor Conta: ");
      Serial.println(conta);
      Serial.print("Dias transcurridos: ");
      Serial.println(dias);
     
     
     
     
      if (day() - conta == 1)
      {
        dias++;
       
        conta = day();       
      }   
    }

 Serial.println("**Cambiando de estado**");
}

void control_mensual_floracion()
{
    while (dias < 45)
    {

      Serial.println("**Estado de Floracion**");
 
     
      periodo_luz_floracion();
     
      if (hour() >= 12 && hour() <= 23)
        {
          tem_hum_dia(); 
        }
        else if (hour() >= 00 && hour() <= 11)
        {
          tem_hum_noche();
        }
      Serial.print("Valor Conta: ");
      Serial.println(conta);
      Serial.print("Dias transcurridos: ");
      Serial.println(dias);
     
   
     
      if (day() - conta == 1)
      {
        dias++;
     
        conta = day();       
      }   
    }
 dias = 0;

 Serial.println("**Cambiando de estado**");
}

void tem_hum_dia()
{
  float h = dht.readHumidity(); //Se lee la humedad
  float t = dht.readTemperature(); //Se lee la temperatura
 
  Serial.print("Temperatura Humedad Dia: ");
  Serial.print(t, DEC);
  Serial.print("  -  ");
  Serial.println(h, DEC);
 
if (t >= 25)
    {
      digitalWrite(intraccion, HIGH);
      Serial.println("Ventilacion ON 25s por alta Temperatura ");
      unsigned long previousMillis1 = 0; //Sera el que almacene en que ms fue la ultima vez que se encendio o apago
      long OnTime1 = 25000;
      digitalWrite(intraccion, LOW); 
    }
    else if (t  <= 20)
    {
      digitalWrite(vaporizador, HIGH);
      Serial.println("vaporizador ON 25s por baja humedad ");
      unsigned long previousMillis1 = 0; //Sera el que almacene en que ms fue la ultima vez que se encendio o apago
      long OnTime1 = 25000;
      digitalWrite(vaporizador, LOW); 
    } 
   
if (h >= 65)
    {
      digitalWrite(intraccion, HIGH);
      Serial.println("Ventilacion ON 25s por alta Humedad ");
      unsigned long previousMillis1 = 0; //Sera el que almacene en que ms fue la ultima vez que se encendio o apago
      long OnTime1 = 25000;
      digitalWrite(intraccion, LOW); 
    }
    else if (h  <= 45)
    {
      digitalWrite(vaporizador, HIGH);
      Serial.println("Vaporizacion ON 25s por baja Humedad ");
      unsigned long previousMillis1 = 0; //Sera el que almacene en que ms fue la ultima vez que se encendio o apago
      long OnTime1 = 25000;
      digitalWrite(vaporizador, LOW); 
    }
}

void tem_hum_noche()
{
 
  float h = dht.readHumidity(); //Se lee la humedad
  float t = dht.readTemperature(); //Se lee la temperatura

  Serial.print("Temperatura Humedad Noche: ");
  Serial.print(t, DEC);
  Serial.print("  -  ");
  Serial.println(h, DEC);
 
if (t >= 20)
    {
      digitalWrite(intraccion, HIGH);
      Serial.println("Ventilacion ON 60s por alta Temperatura ");
      unsigned long previousMillis1 = 0; //Sera el que almacene en que ms fue la ultima vez que se encendio o apago
      long OnTime1 = 60000;
      digitalWrite(intraccion, LOW); 
    }
    else if (t  <= 15)
    {
      digitalWrite(intraccion, HIGH);
      Serial.println("Ventilación ON 60s por baja Temperatura ");
      unsigned long previousMillis1 = 0; //Sera el que almacene en que ms fue la ultima vez que se encendio o apago
      long OnTime1 = 60000;
      digitalWrite(intraccion, LOW); 
    } 
if (h >= 65)
    {
      digitalWrite(vaporizador, HIGH);
      Serial.println("Ventilacion ON 30s por alta Humedad ");
      unsigned long previousMillis1 = 0; //Sera el que almacene en que ms fue la ultima vez que se encendio o apago
      long OnTime1 = 30000;
      digitalWrite(vaporizador, LOW); 
    }
    else if (h  <= 45)
    {
      digitalWrite(vaporizador, HIGH);
      Serial.println("Vaporizacion ON 30s por baja Humedad ");
      unsigned long previousMillis1 = 0; //Sera el que almacene en que ms fue la ultima vez que se encendio o apago
      long OnTime1 = 30000;
      digitalWrite(vaporizador, LOW); 
    }
}

void periodo_luz_crecimiento()
{
 
 
  if (hour() >= 6 && hour() <= 23)
  {
    Serial.println("Periodo de Luz Crecimiento, Luz ON. Dia");
    digitalWrite(luz, HIGH); 
  }
  else if (hour() >= 00 && hour() <= 5)
  {
    Serial.println("Periodo de Luz Crecimiento, Luz OFF. Noche");
    digitalWrite(luz, LOW);
  }
}
void periodo_luz_floracion()
{
 
 
  if (hour() >= 12 && hour() <= 23)
  {
    Serial.println("Periodo de Luz Floracion, Luz ON. Dia");
    digitalWrite(luz, HIGH); 
  }
  else {
    if ((hour() >= 00 && hour() <= 11))
 
 
    Serial.println("Periodo de Luz Floracion, Luz OFF. Noche");
    digitalWrite(luz, LOW);
  }
}






hiddenotebook

#213
Aug 30, 2016, 06:22 pm Last Edit: Nov 01, 2016, 11:17 am by hiddenotebook
Gracias compañero no soy experto pero echaremos un ojo.

He venido a traer noticias he encontrado el sensor de humedad de suelo que puede ser el definitivo porque la cobertura es plástica y no de cobre:

Sensor suelo 

les he mandado un email si hacen envíos a España estos serán los que use.


surbyte

#214
Sep 26, 2016, 08:25 pm Last Edit: Jan 23, 2017, 07:58 pm by surbyte
Para aportar algo que cayó a mis manos y ayuda en esta tarea.
Tuve que adaptar un sensor MPS6 Dielectric Water Potential Sensor para ser leído por un arduino NANO y con cada lectura enviar una salida 0-5V para que sea a su ves registrada por una estación meteorológica integrada que tiene entrada analógica de ese tipo.
El sensor tiene un protocolo de 1 Wire llamado SDI-12 muy usado en sistemas agricultores de modo que investigando un poco di con una simple interfaz,


Que funcionó perfectamente bien usando un pin digital del arduino y esta librería Arduino SDI-12 Library
El sensor registra la cantidad de agua y la temperatura del suelo entre un par de capas cerámicas y lo hace perfectamente.
Es caro US 237 (link)  pero solo era para aportar un dato posible.

hiddenotebook

#215
Nov 01, 2016, 11:30 am Last Edit: Nov 01, 2016, 11:32 am by hiddenotebook
Esta muy bien surbyte merece la pena echar un vistazo! muchas gracias por compartir.

Los de www.vegetronix.com me han contestado y si mandan los sensores a cualquier parte, así que ese sensor es que quiero usar a no ser que alguien tenga inconvenientes con el, o me hagáis cambiar de idea.

Ahora este proyecto le tengo un poco aparcado por varias razones. la primera es que ya no fumo nada, la segunda es que mi mujer esta embarazada otra vez jajaja y me he quedado sin cuarto para cultivar, lo estoy reformando para la niña que viene de camino.  :)

Pero esto no significa que lo voy a dejar de lado, pienso terminarlo por orgullo y me haré un pequeño mueble que pueda cultivar por lo menos 4 plantitas, Pero en estos momentos estoy mas centrado en lo que viene. Pero ya que tengo todo el material las bombas, el foco led y todo lo demás tengo que terminarlo como sea.


PD: Esto de que no funcione la suscripción a los temas no me gusta nada ¿ningún administrador sabe arreglar el problema? un foro como este debería estar perfecto...

tomasMiddleton

Existe la posibilidad de arreglar las fotos de los primeros posts?

Saludos

hiddenotebook

#217
Jan 24, 2017, 08:42 pm Last Edit: Jan 24, 2017, 09:04 pm by hiddenotebook
Claro Hombre las del primer post arregladas si hay algo mas que pueda hacer no dudéis en preguntar.

Si no me avisa surbyte por whatsapp no me entero, espero que algún día arreglen la suscripción a los temas. 

tomasMiddleton

#218
Jan 27, 2017, 03:45 pm Last Edit: Jan 30, 2017, 01:44 am by tomasMiddleton
Entre la información que acumulaste y de varios sectores que he visto ya, estuve acumulando las variables a sensar y utilizar, quería ver opiniones de acá mientras también busco de otros lados para perfeccionarlo.
Aunque después de tanto ver, creo que quizás la opción óptima sería un cultivo hidropónico, lo estoy pensando todavía.



Saludos

tomasMiddleton

#219
Jan 28, 2017, 07:28 pm Last Edit: Jan 30, 2017, 04:10 pm by tomasMiddleton
Bueno, me puse a jugar con el Arduino ya, y he ajustado algunas variables y ya estoy sensando varios datos útiles.



- Temperatura Ambiental (De momento estoy ocupando uno normal, ya pediré el DHT22)
- Humedad de la Tierra
- CO2 Ambiental
- Luz Ambiental

Código que hice:

Code: [Select]


const int sensorHumidity = A0;                      // Sensor humedad tierra
const int sensorTemp = A1;                       // Sensor Temperatura
const int ledVerde = 5;                       // LED Verde
const int ledRojo = 4;                        // LED Rojo
const int buzzer = 8;                         // Piezo
const int co2Sensor = A2;
const int lightSensor = A3;

//Puente H
const int controlPin1 = 2; 
const int controlPin2 = 3;
const int enablePin = 9;

void setup() {
 pinMode(ledVerde, OUTPUT);                         // LED Verde como Output
 pinMode(ledRojo, OUTPUT);                         // LED Rojo como Output
 pinMode(buzzer, OUTPUT);                       // Buzzer o Piezo como Output
 pinMode(controlPin1, OUTPUT);
 pinMode(controlPin2, OUTPUT);
 pinMode(enablePin, OUTPUT);

 Serial.begin(9600);                           // Abre puerto en serie comunicación USB

 digitalWrite(enablePin, LOW);                 // Deja apagado el Ventilador desde un inicio
}

void loop() {

 int temperature = analogRead(sensorTemp);     // Lee el sensor de Temperatura
 float voltage = (temperature / 1024.0) * 5.0; // Calcula el voltage para luego poder hacer la conversión a Celsius
 float humedad = analogRead(sensorHumidity);   // Lee el sensor de Humedad de la Tierra

 float temperatureCelsius = (voltage - .5) * 100;  // Convierte la temperatura a Cª
 int co2 = analogRead(co2Sensor);                // Define como co2 lo que lee el Sensor de Gas
 int light = analogRead(lightSensor);            // Define como light el sensor Analog Ambient Light Sensor



if(temperatureCelsius >= 31) {  // Si la temperatura aumenta a más de 31 grados, prende el Ventilador conectado al Puente H
 digitalWrite(enablePin, HIGH);
 digitalWrite(controlPin1, HIGH);
 digitalWrite(controlPin2, LOW);
 tone(buzzer, 1000);
 delay(100);
 noTone(buzzer);
 delay(100);
 delay(5000);
 digitalWrite(enablePin, LOW);
}

 if ((humedad >= 300) && (humedad <= 900))        // Si la humedad está dentro del rango, prender LED verde
 {
   digitalWrite(ledRojo, LOW);                 // LED rojo Off
   delay(100);
   digitalWrite(ledVerde, HIGH);             // LED verde On

 }
 else if (humedad < 300)                      // Si la humedad es baja, prender LED rojo y apagar verde
 {
   digitalWrite(ledVerde, LOW);                // LED verde Off
   delay(100);
   digitalWrite(ledRojo, HIGH);                // LED Rojo On
   tone(buzzer, 1000);
   delay(1000);
   noTone(buzzer);
   delay(1000);
 }
 else if (humedad > 900)                      // Si la humedad es alta, prender ambos LEDs
 {
   digitalWrite(ledVerde, HIGH);                        //LED Verde On
   delay(100);
   digitalWrite(ledRojo, HIGH);                        //LED Rojo On
 }
 delay(3000);

 Serial.print("Humidity: ");
 Serial.print(round((humedad / 10)));
 Serial.print("%");
 Serial.print(" Temperature: ");
 Serial.print(temperatureCelsius);
 Serial.print(" CO2: ");
 Serial.print(co2);
 Serial.print(" Light: ");
 Serial.println(light);

}


Un video mostrando funcionamiento:
https://youtu.be/Ne2Q3yUPb3A



rubendario1979

El modulo wifi estaría bueno que sea AP, que vos te conectes en tu casa y que con una APP de android por ejemplo controles el proceso. Me regalaron un modulo del antes hablado pero no logre comunicación, eso si el modulo calentó mucho.


Solartemontoya

Buenas amigos, les dejo el nombre de una APP que les podria ayudar en sus cultivos, (Groots) esta para android, no se si para IOS, yo tambien estoy trabajando en un proyecto en mi cultivo autonomo, y seria excelente poder controlar el cultivo con una aplicación similir a la mencionada, como poder tener los datos medidos de los sensores, tener alarmas si hay cambios drásticos en temperatura o humedad, y poder controlar iluminacion, ventilazion y riego entre otros, desumificador, humificadores, extractores...

Solartemontoya

#222
Mar 02, 2017, 05:51 am Last Edit: Mar 02, 2017, 06:37 am by Solartemontoya
Buenas amigos, les traigo el codigo con el cual estoy trabajando en mi cultivo autonomo, aun no cambio la pantalla LCD por la TFT, esa sera mi próxima mejora (en el codigo esta programada la iluminación a 18 horas de luz y 6 de oscuridad debido a que mi cultivo esta en crecimiento), próximamente subiré el sketch de conexiones y también subire fotos del indoor, y del sistema, a ver ustedes que opinan y que mejoras me pueden sugerir. 

Code: [Select]


/*
  Cultivo Indoor Autonomo 1.0
  Versión del sketch: 0.5
  01/03/2017

  Esquema de conexiones en la tarjeta Arduino Mega 2560
 
  ENTRADAS ANALOGICAS
  en el pin 0 (A0) FC-28 el medidor de humedad en la tierra
     Conexiones:
     VCC a +
     GND a -
     A0 a A0
     Do de momento no se usa.

  ENTRADAS DIGITALES

  en el pin 2, 3, 4, 5, 11, 12 (D2,D3,D4,D5,D11,D12) Pantalla LCD 16x2
    VSS a -
    VDD a +
    VO a - (resistencia de 220)
    RS a D12
    RW a -
    E a D11
    D4 a D5
    D5 a D4
    D6 a D3
    D7 a D2
    A a + (resistencia de 220)
    K a -
   
  en el pin 8 (D8) Boton de Encendido Iluminacion
    Pata Izq a -
    Pata Der a + & D8 (resistencia 220)

  en el pin 9 (D9) Boton de Encendido Ventilazion
    Pata Izq a -
    Pata Der a + & D9 (resistencia 220)
 
  en el pin 13 (D13) Relay Bomba de Agua
     Conexiones:
     S a D13
     + a +
     - a -

  en el pin 20 y 21 (D20,D21) RTC
     Conexiones:
     GND a -
     VCC a +
     SDA a D20/SDA
     SCL a D21/SCL

  en el pin 48 (D48) Relay Ventilazion
     Conexiones:
     S a D48
     + a +
     - a -

  en el pin 50 (D50) Relay Iluminacion
     Conexiones:
     S a D50
     + a +
     - a -

  en el pin 52 (D52) DHT11 sensor de humedad y temperatura
     Conexiones:
     OUT a D52
     + a +
     - a -
     
*/

#include <LiquidCrystal.h>  // Cargar Librería LiquidCrystal.
#include "DHT.h"             // Cargar Librería DHT.
#include "RTClib.h"         // Cargar Librería RTC.
#include <Wire.h>           // Libreria comunicacion I2C.
RTC_DS1307 RTC;

// 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.

int histeresis = 5;              // Margen de riego.
int sensorHumedad;        // Variable para SoilSensor.
bool PowerON = false;     // Variable booleana para el encendido con el Boton.
int botonAnt;
int botonvenAnt;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);  // Seleccionamos el pin en el que se conectara la pantalla.


  // 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
  };
    // Creamos un nuevo caracter luz para el LCD
  byte Luz[8] =
  {
    B00000,
    B00000,
    B10101,
    B01110,
    B11111,
    B01110,
    B10101,
    B00000
  };
      // Creamos un nuevo caracter Ventilazion para el LCD
  byte Ven[8] =
  {
    B00000,
    B00100,
    B01110,
    B10101,
    B11111,
    B10101,
    B01110,
    B00100
  };

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);
  lcd.createChar(2, Luz);
  lcd.createChar(3, Ven);

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

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(11, 0);     // Cursor en fila 11 posicion 0.
 

    // SOIL_SENSOR LCD
  lcd.setCursor(0, 1);        // Cursor en fila 2 posicion 1.
  lcd.write((byte)0);        // Muestra la gota de agua.
  lcd.print(sensorHumedad); // Muestra valor leido de humedad.
  lcd.print("% ");         // Muestra Signo de %
  // END SOIL_SENSOR 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


//----------Temporizador ENCENDIDO Y APAGADO Iluminacion y Led Amarillo de Aviso (CICLO 18/6)----------

  if (now.hour()== 06 && now.minute() ==00)  // cuando sea la hora indicada enciende la luz...
  {
  lcd.setCursor(12, 0);
  lcd.write((byte)2);
  lcd.print("ON");
  lcd.write((byte)2);
  digitalWrite(50, HIGH);
  }                                           //Cerramos la llave del if.
   if (now.hour()== 00 && now.minute() ==00)  //cuando sea la hora indicada apaga la luz...
  {
  lcd.setCursor(13, 0);
  lcd.print("OFF");
  lcd.write((byte)2);
  digitalWrite(50, LOW);
  }     
 //Cerramos la llave del if.

//----------Sensor Humedad de Tierra (-80%H) ENCENDIDO Led Verde y Bomba de Riego---------
 
  if (sensorHumedad < 85) // Si el sensor detecta menos de 80%H
  {
      digitalWrite(13, HIGH);  // Activamos rele y bomba
  }
  if (sensorHumedad > (85 + histeresis))// Si detecta mas de 90%H
  {
      digitalWrite(13, LOW); // Apaga el rele y la bomba
  }
  //Cerramos la llave del if.

 
} // Cerramos la llave del bucle y vuelve arriba.



Bueno y ya que este proyecto se presta para grandes cosas, cada vez se va agrandando mas... Si pudiéramos crear una APP para Dispositivos Móviles con la ayuda de toda la comunidad, en la cual podamos ver los datos de los sensores, observar el cultivo por medio de un Modulo Camara Ov7670 Vga Para Arduino que tome fotografías (si es posible transmisión de vídeo), y desde la APP poder controlar iluminación, ventilación, riego, extractores, etc, como también poder tener la opción para programar el cultivo inicialmente, con tipo de planta a sembrar, ciclos de crecimiento, ciclos de floración.

ya compre el modulo wifi, pero no me queda tiempo para ponerme en la tarea de investigar para poder hacerlo andar.

Solartemontoya

Buenas amigos, he tenido algunos problemas con el codigo, cuando implemento el if para el encendido de la ventilazion cada cierta hora, cuando el rele del ventilador se apaga a la hora que yo le indique, la pantalla LCD se enloquece y salen caracteres y simbolos en toda la pantalla, alguien me podria ayudar a resolver el problema, Gracias. aqui dejo el codigo con el que me falla.

Code: [Select]


#include <LiquidCrystal.h>  // Cargar Librería LiquidCrystal.
#include <Wire.h>           // Libreria comunicacion I2C.
#include "RTClib.h"         // Cargar Librería RTC.
#include "DHT.h"             // Cargar Librería DHT.
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);  // Seleccionamos el pin en el que se conectara la pantalla.
RTC_DS1307 RTC;

// 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.
// DHT11

int histeresis = 5;              // Margen de riego.
int sensorHumedad;        // Variable para SoilSensor.
int botonAnt;
int botonvenAnt;
bool PowerON = false;     // Variable booleana para el encendido con el Boton.

  // 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
  };
    // Creamos un nuevo caracter luz para el LCD
  byte Luz[8] =
  {
    B00000,
    B00000,
    B10101,
    B01110,
    B11111,
    B01110,
    B10101,
    B00000
  };

void setup()
{
  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);
  lcd.createChar(2, Luz);
  lcd.begin(16,2);          // Se inicia LCD
  lcd.clear();              // Limpiamos la pantalla.

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

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)
  {
     digitalWrite(50, PowerON);   // Como el pin va invertido, lo establecemos antes de cambiar el estado.
     PowerON = ! PowerON ;        // Ivertimos el estatus de la fuente.
     digitalWrite(50, PowerON);   // Encender o apagar el LED.
     delay(250);                  // Retardo para evitar rebotes del boton.
  }
      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.
 

    // SOIL_SENSOR LCD
  lcd.setCursor(0, 1);        // Cursor en fila 2 posicion 1.
  lcd.write((byte)0);        // Muestra la gota de agua.
  lcd.print(sensorHumedad); // Muestra valor leido de humedad.
  lcd.print("% ");         // Muestra Signo de %
  // END SOIL_SENSOR 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

   delay(250); // Retardo entre lecturas para dar estabilidad.


//----------Temporizador ENCENDIDO Y APAGADO Iluminacion y Led Amarillo de Aviso (CICLO 18/6)----------

  if (now.hour()== 06 && now.minute() ==00)  // cuando sea la hora indicada enciende la luz...
  {
  lcd.setCursor(12, 0);
  lcd.write((byte)2);
  lcd.print("ON");
  lcd.write((byte)2);
  digitalWrite(50, HIGH);
  }                                           //Cerramos la llave del if.
   if (now.hour()== 00 && now.minute() ==00)  //cuando sea la hora indicada apaga la luz...
  {
  lcd.setCursor(13, 0);
  lcd.print("OFF");
  lcd.write((byte)2);
  digitalWrite(50, LOW);
  }      //Cerramos la llave del if.


//----------Sensor Humedad de Tierra (-80%H) ENCENDIDO Led Verde y Bomba de Riego---------
 
  if (sensorHumedad < 0) // Si el sensor detecta menos de 80%H
  {
      digitalWrite(13, HIGH);  // Activamos rele y bomba
  }
  if (sensorHumedad > (1 + histeresis))// Si detecta mas de 90%H
  {
      digitalWrite(13, LOW); // Apaga el rele y la bomba
  }       //Cerramos la llave del if.


//----------Temporizador ENCENDIDO Y APAGADO Iluminacion y Led Amarillo de Aviso (CICLO 18/6)----------

  if (now.hour()== 14 && now.minute() ==33)  // cuando sea la hora indicada enciende la luz...
  {
  digitalWrite(48, HIGH);
  }                                           //Cerramos la llave del if.
   if (now.hour()== 14 && now.minute() ==35)  //cuando sea la hora indicada apaga la luz...
  {
  digitalWrite(48, LOW);
  }      //Cerramos la llave del if.

    if (now.hour()== 22 && now.minute() ==00)  // cuando sea la hora indicada enciende la luz...
  {
  digitalWrite(48, HIGH);
  }                                           //Cerramos la llave del if.
   if (now.hour()== 00 && now.minute() ==00)  //cuando sea la hora indicada apaga la luz...
  {
  digitalWrite(48, LOW);
  }      //Cerramos la llave del if.

      if (now.hour()== 9 && now.minute() ==00)  // cuando sea la hora indicada enciende la luz...
  {
  digitalWrite(48, HIGH);
  }                                           //Cerramos la llave del if.
   if (now.hour()== 11 && now.minute() ==00)  //cuando sea la hora indicada apaga la luz...
  {
  digitalWrite(48, LOW);
  }      //Cerramos la llave del if.


} // Cerramos la llave del bucle y vuelve arriba.


hiddenotebook

#224
Feb 14, 2018, 10:49 pm Last Edit: Feb 14, 2018, 11:05 pm by hiddenotebook
Hola hermano la aplicacion que buscas es BLINK my plant. Pincha que te llevo

O puedes usar simplemente BLINK que sirve pare todos tus proyectos de Arduino, ESP8266 etc

Has revisado las conexiones de la pantalla? veo que nos es la misma que la mia si pudes poner un plano de conexiones lo mismo te pueden ayudar mas.



Tuve problemas parecidos y los solucione desmontando todo recolocando las cosas y volviendo a conectar.

Siento no poder ayudarte mas porque yo tambien soy principiante y no veo nada raro en tu codigo.

Buenos Humos

Go Up