Para tener un invernadero automatizado no tenemos que trabajar demasiado ya que te doy todo hecho, bueno, más o menos.

Antes de continuar y sin querer venderte la moto, este diseño está enfocado a un invernadero que hice previamente, puedes echarle un ojo si aún no lo has hecho.

Para ello vamos a usar una placa de la familia de arduino, si eres afín al campo de la tecnología sabrás de que hablo y si no lo eres, no te preocupes. Arduino, al ser de código abierto permite reproducir sus placas por otras marcas. Traducido, se pueden copiar y vender muy baratas. Una placa arduino UNO (de una marca que la ha copiado) puede valer 8 o 9 euros en Amazon (Amazon no me paga por decir esto) y una Arduino Mega 13 euros (Esta es más potente y tiene más cositas). Yo usé la segunda, pero ambas deberían de valernos para este proyecto.

Objetivo:

                Tener un sistema de riego automático, un sistema de medición de variables fundamentales para el cuidado de plantas como temperatura, humedad del aire, humedad de la tierra y calidad del aire.

Materiales:

Todo ello puedes encontrarlo por un precio de en torno 40 euros, tal vez menos, también puedes poner extras a mayores, como ventiladores o un sistema de apertura del invernadero con unos motores. A parte de esto necesitarás alimentar a tu placa, yo uso una batería portátil de las que se usan cuando vas de viaje.

Debido a que las aplicaciones gratuitas que permiten hacer esquemas de arduino no disponen de varios de los sensores que vamos a usar, voy a coger fotos de internet que expliquen parte a parte las conexiones:

Lcd con driver IC2
Sensor de calidad del aire
Sensor BME280 para temperatura, humedad, presión y altitud
Relé y motor (sustituir bombilla por motor)

 Estas fotos son orientativas y aunque hay cosas que debemos hacer igual, debemos adaptarlo a nuestro diseño.

                En primer lugar, hay que conectar todos los cables de 5V juntos, hay que alimentar a todos nuestros elementos, puedes usar una PCBoard para ello:

Los cables azules indican como se conectan los puntos entre sí, es una, manera de ahorrar cables.

Para esto te he hecho un ejemplo:

Aquí puedes ver como conectar los terminales de 5V y gnd juntos.

Una vez hemos conectado las alimentaciones tenemos que conectar los cables que realmente mandan información, como el amarillo del sensor de temperatura que te he puesto, te vas a hacer un lío con los cables, se paciente y empieza en un lado de la placa y de manera organizada, suerte.

Las conexiones son:

Ahora viene la conexión “difícil”, el IC2 y el sensor BME se conectan a los mismos puertos, A4 y A5, por ello tenemos que hacer como las conexiones de 5V y gnd, llevarlos a una conexión común en la placa. TIENE QUE SER EN ESOS PUERTOS, si no funciona, es porque habrás hecho lo que te ha dado la gana, hay que conectarlos ahí debido a que son unos puertos especiales. Para que me entiendas, con como un cartero, el cartero tiene que llevar la carta a cada casa correspondiente. Pues aquí lo mismo, un cable se encarga de llevar la carta (A4 SDA) y el otro de acertar la dirección (A5 SCL) es una manera muy simplificada de decirlo no me juzguen los expertos en la materia gracias.

Si tienes alguna duda en alguna de las conexiones, puedes buscar en internet, esta placa tiene una gran comunidad y todos los pasos se encuentran fácilmente.

Una vez hecho esto cargamos el programa en nuestro arduino:

#include <SPI.h>

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

#include <Adafruit_BME280.h>

LiquidCrystal_I2C lcd(0x27,16,2);

const int bomba=13;

const int humidificador=12;

const int humedad_tierra=11;

const int calidad=10;

const int led_aire=9;

const int led_calidad=8;

const int bot=7;

const int pot=A0;

const int hum=A2;

int cont;

Adafruit_BME280 bme; // use I2C interface

Adafruit_Sensor *bme_temp = bme.getTemperatureSensor();

Adafruit_Sensor *bme_pressure = bme.getPressureSensor();

Adafruit_Sensor *bme_humidity = bme.getHumiditySensor();

void setup() {

  pinMode(bomba, OUTPUT);

  pinMode(humidificador, OUTPUT);

  pinMode(led_aire, OUTPUT);

  pinMode(led_calidad, OUTPUT);

  pinMode(humedad_tierra, INPUT);

  pinMode(calidad, INPUT);

  pinMode(bot, INPUT);

  pinMode(pot, INPUT);

  pinMode(hum, INPUT);

  Serial.begin(9600);

  Serial.println(F(«BME280 Sensor event test»));

  if (!bme.begin()) {

    Serial.println(F(«No se ha encontrado el sensor BME280»));

    while (1) delay(10);

  }

  bme_temp->printSensorDetails();

  bme_pressure->printSensorDetails();

  bme_humidity->printSensorDetails();

   lcd.init();                     // initialza el lcd

  lcd.backlight();                // enciende la luz de fondo del display

  lcd.setCursor(0,0);             // apuntamos el cursor a la primera fila y primer caracter e

  lcd.print(«hola Dueño»);

}

void loop() {

  sensors_event_t temp_event, pressure_event, humidity_event;

  bme_temp->getEvent(&temp_event);

  bme_pressure->getEvent(&pressure_event);

  bme_humidity->getEvent(&humidity_event);

  Serial.print(F(«Temperatura = «));

  Serial.print(temp_event.temperature);

  Serial.println(» *C»);

  Serial.print(F(«Humedad = «));

  Serial.print(humidity_event.relative_humidity);

  Serial.println(» %»);

  Serial.print(F(«Presion = «));

  Serial.print(pressure_event.pressure);

  Serial.println(» hPa»);

  Serial.println();

  delay(1000);

  digitalRead(bot);

    if(bot==HIGH){

      cont=cont+1;

        if (cont>4){

            cont=0;

            }

        }

  //Vamos con las selecciones:

   switch(cont)

   {

    case 0:

    lcd.noBacklight();

    break;

    case 1:

    lcd.setCursor(0,0);

   lcd.print(«humedad de la tierra»);

    lcd.print(hum);

    delay (5000);

    cont=0;

    case 2:

    lcd.setCursor(0,0);

   lcd.print(«humedad del aire»);

    lcd.print(humidity_event.relative_humidity);

    delay (5000);

    cont=0;

    case 3:

    lcd.setCursor(0,0);

   lcd.print(«Temperatura del aire»);

    lcd.print(temp_event.temperature);

    delay (5000);

    cont=0;

  case 4:

    lcd.setCursor(0,0);

   lcd.print(«Calidad del aire»);

    lcd.print(«buena»);

    delay (5000);

    cont=0;

   }

  if (humedad_tierra<600){

      while(hum<800){

        digitalWrite(bomba, HIGH);

      }

      }

      if (humidity_event.relative_humidity<85)

      {digitalWrite(led_aire, HIGH);}

    bool state= digitalRead(calidad);

     if (!state)

  {

    digitalWrite(led_calidad, HIGH);

    delay(1000);

  }

  else

  {

    digitalWrite(led_calidad, LOW);

    delay(1000);

  }

    }

Simplemente cópialo y ponlo en tu programa, compílalo y súbelo a la placa. Antes de cargarlo, tienes que tener las librerías necesarias instaladas, son esas 4 líneas que pone #inlcude …

Si no las tienes, son bastante sencillas de incluirlas, busca en google y en un par de minutos lo tienes hecho, como te digo la comunidad de esta placa ha resuelto todos tus problemas.

Una vez se ha compilado, he incluido un botón para que puedas ver las distintas informaciones, aguanta pulsado hasta que cambie de pantalla, podrás ver la humedad actual, la temperatura, etc… si quieres apagar la pantalla ve pasando de opciones, una de ellas apagará la pantalla, pero no el programa. Si vuelves a pulsar, volverás a la primera información.

Y ya estaría, modifica el código a tu gusto, yo estoy intentando añadir un humidificador y un sistema de ventilación, también puedes añadir algún elemento para calentar el invernadero y otras muchas cosas. Mucha suerte con ello.

Ir al contenido