Este invernadero solo necesita mantenimiento trimestral, recargas de agua y mantenimiento de calor para cultivar plantas de alta calidad en las condiciones óptimas.

COMPONENTES Y SUMINISTROS

  • Arduino UNO
  • Arduino MKR WiFi 1010
  • Arduino MKR ENV Shield
  • Tablero de pan (genérico)
  • Tira de LED, NeoPixel Digital RGB
  • Condensador electrolítico, 4700 µF
  • TaydaElectronics DC POWER JACK 2.1MM TIPO BARRIL MONTAJE EN PCB
  • Fuente de alimentación de pared de conmutación 9V 1A
  • Adafruit 5V 1A
  • Sensor de suelo Adafruit STEMMA
  • Adafruit JST PH de 4 pines al cable de enchufe hembra
  • Sensor de nivel de líquido digital Adafruit
  • Cables de puente macho / macho
  • Cables de puente macho / hembra
  • Bomba de líquido peristáltico Adafruit
  • Resistencia de 330 ohmios
  • Canal MOSFET de potencia
  • Invernadero

SOBRE ESTE PROYECTO

A veces, cuidar las plantas es una gran molestia. Es necesario darles simplemente la cantidad correcta de luz solar, el agua constantemente, y los guarda en el calor de la derecha. Bueno, no trabajes más! Con este invernadero, solo tienes que realizar tres cosas fáciles. (1), llene el tanque de agua de vez en cuando, (2), cambie el nivel de calor del invernadero. Y (3), proporcionar mantenimiento a la electrónica cada 1-3 meses. ¡Es tan fácil como el pastel!

Lo que hace el invernadero

  • Luz: proporciona suficiente iluminación a la planta. Se mide la cantidad de luz que ingresa al invernadero y, dependiendo de cuánto, ajusta el brillo de las luces de crecimiento. El color de la luz de crecimiento es de 3 partes de rojo, una parte de azul para cada Neopixel individual.
  • Agua: a través de una bomba peristáltica, la planta se riega. El agua proviene de un tanque externo que puede imprimir en 3D o actualizar usted mismo. La bomba proporciona aproximadamente 100 ml por minuto. Se proporcionan dos programas diferentes y riegan la planta de diferentes maneras. Uno riega la planta dependiendo de la lectura de humedad del suelo proporcionada por el sensor de suelo Adafruit STEMMA. Sin embargo, la unidad que obtuve era extremadamente inexacta, y si alguien tiene el mismo problema o quiere hacer el proyecto sin él, hay una segunda forma. La segunda forma riega la planta a las 7:00 PM todos los días durante 2 minutos. Esto proporciona aproximadamente 200 ml de agua, y la hora del día y la cantidad de agua se pueden cambiar fácilmente.
  • Detección de vacío del tanque de agua: el usuario recibe una alerta cuando el tanque de agua está por debajo del nivel establecido mediante un sensor de nivel de agua. Si el agua está por encima del sensor, la luz en la aplicación Blynk es verde. Si el agua está debajo del sensor, la luz en la aplicación Blynk es roja.
  • Carga en Blynk: El Arduino MKR WiFi 1010 con un escudo ENV cargará la humedad del suelo, la temperatura y la humedad a la aplicación Blynk. Vaya a la sección Conexión y uso de Blynk para obtener instrucciones sobre cómo configurar Blynk y cómo se verá la aplicación.

Paso 1: el lado WiFi MKR 1010

El MKR es el cerebro de las operaciones. Todas las conexiones realizadas al MKR servirán como sensores o entradas. Enviará datos a Uno WiFi, el administrador de salida.

  • Primero, coloque el escudo MKR ENV. Todas las conexiones se realizarán desde arriba.
  • Luego, conecte el sensor de nivel de líquido. Le indicará si el nivel de agua en su tanque está por debajo de lo que desea que sea, y necesita una recarga. Conecte el cable de alimentación (rojo) al riel de 5 V, tierra (azul o negro) al riel de tierra y datos (verde) a A1. Puede usar cualquier pin analógico que desee, pero no use A2, porque ese es un pin que usa el escudo ENV.
  • Finalmente, conecte el sensor de suelo STEMMA a Tierra, 5V, Pin 11 y Pin 12. Estos son los mismos pines que el ENV Shield usa para algunos de sus sensores, ¡pero no se preocupe! El código está diseñado para apagar el escudo antes de que el sensor STEMMA verifique la humedad del suelo.

Paso 2: El lado WiFi de Uno

Uno WiFi maneja la electrónica grande y poderosa que produce una salida, que son los NeoPixels y la bomba

Primero, manejemos los NeoPixels. Tendrá que colocar el barril jack en el tablero ahora. Conecte el pin de tierra en el conector del barril a tierra en el Arduino Uno WiFi (cualquiera funcionará) Y tierra en la tira NeoPixel. Coloque un pin del condensador entre el pin jack del barril y los cables de tierra al NeoPixel y Arduino. Luego, conecte el pin de alimentación en el conector de barril al pin de alimentación en la tira NeoPixel. Coloque el segundo lado del condensador entre el cable de alimentación y el pin de alimentación en el conector de barril. Finalmente, conecte el pin 9 en el Arduino a la línea de datos en el NeoPixel. Coloque una resistencia de 330 ohmios en el medio, para no freír la tira.

  • Luego viene la bomba. Bombeará agua del tanque a la planta. Coloque su MOSFET en el tablero y siga el esquema en la sección esquemática para este paso, ya que es bastante difícil de explicar. Haga una pregunta en la sección de comentarios si tiene alguna pregunta sobre el esquema.

Paso 3: Conexión y uso de Blynk

Al principio, Blynk puede parecer intimidante. Te guiaré por todo lo que necesitarás para poner en la aplicación y cómo usarla.

  • Descargue la aplicación Blynk y cree una cuenta Blynk. Esto le permitirá crear una aplicación personalizada con el software fácil de usar de Blynk.
  • Ahora tenemos que ingresar algunas variables iniciales. Nombra tu proyecto como quieras. Para el dispositivo, elija Arduino MKR1000. ¡Está lo suficientemente cerca de lo que estamos usando, y aún funcionará! Para el tipo de conexión, elija WiFi. Por último, elija un tema: oscuro o claro. Luego presiona «crear proyecto», ¡y ahí lo tienes! La base de tu propia aplicación.
  • Ahora que tenemos una aplicación, tenemos que personalizarla para satisfacer nuestras necesidades. Presione cualquier área en blanco para crear un objeto. En las pantallas, seleccione Indicador y colóquelo en la plantilla de la aplicación. Haga clic en el indicador para abrir su configuración. Asigne un nombre a la temperatura del medidor, configure la fuente como MKR1010, configure la entrada como V0, configure la etiqueta como /pin/°Fy configure el mínimo / máximo en 0/100, respectivamente. Ahora, haga dos indicadores más para la luz y la humedad del suelo. Sus detalles se muestran a continuación.
  • Ponga un led en la aplicación e ingrese los detalles a continuación.
  • Tenga en cuenta que no tiene que poner los widgets del puente, ya que solo están allí para notificar a las personas que existe tal característica. Sin embargo, puede hacerlo si lo desea, pero tenga en cuenta que esto costará 200 de energía.
  • Ahora es el momento de agregar Uno WiFi a la mezcla. Presione el ícono de tuerca en la esquina superior derecha de la aplicación. Presione «dispositivo» y luego presione «nuevo dispositivo». Asigne un nombre al dispositivo, conviértalo en un Arduino UNO y configure el tipo de conexión como WiFi. Presione Crear, y listo! Has creado el siguiente dispositivo.
  • Para ver los tokens de autenticación de sus dispositivos, presione mis dispositivos y presione el dispositivo que desea ver su token de autenticación. Debe completarlo en el código, junto con su SSID y contraseña de WiFi.

Paso 4: ponlo en el invernadero

Primero, los NeoPixels. Póngalos de tal manera que se curven alrededor de la sección del invernadero donde se colocarán las plantas. Esto asegurará que la cantidad máxima de luz llegue a las hojas de la planta.

A continuación, la bomba. Colóquelo cerca de una esquina, ya que la tubería de la bomba podrá caber debajo del invernadero cuando esté cerca de las esquinas. También puede hacer un agujero de 5 mm / 0.2 «en el vidrio y colocar el tubo dentro. El agua podrá fluir si hace tanto lo primero como lo último.

Ahora, el sensor de agua. Taladre un agujero en su tanque y hágalo de modo que el sensor esté relativamente firme.

Finalmente, tenemos que lidiar con los cables. Todos los cables pueden pasar por la parte inferior y encajarán. Pero asegúrese de que no haya demasiada presión en los cables. En mi caso, no lo había, ¡pero es mejor prevenir que curar!

CÓDIGO

rduino MKR WiFi 1010 con código de protección ENV (con sensor de suelo)
#include <SPI.h> 
#include <WiFiNINA.h> 
#include <BlynkSimpleWiFiNINA.h>
 // para Blynk
 
#include <Arduino_MKRENV.h>
 // Para el ENV Shield
 
char auth [] = "Your Blynk Auth" ; char ssid [] = "Su SSID de WiFi" ; char pass [] = "Su contraseña de WiFi" ; // Credenciales de Blynk
 int temperature ; iluminancia int ; int agua ; // las variables del escudo ENV y el sensor de agua 
 BlynkTimer timer ; WidgetBridge bridge1 ( V1



) ;  
WidgetLED led ( V2 ) ;  
// Declara las funciones que el MKR utilizará con Blynk. 
vacío ( * resetFunc ) ( vacío ) = 0 ; / * Descubrí que después de correr durante unos siete minutos, el MKR y el UNO se bloquean. Hacer un reinicio cada cinco minutos resuelve el problema y no afecta a nada más. * / Void Sensor () {   // Esta es la función que hace que todo el sensor lea   agua = analogRead (A1);   if (agua == 0) {     Blynk.setProperty (V2, "color", "# 23C48E");     llevado en();   }

    
  si no (agua! = 0) { 
    Blynk.setProperty (V2, "color", "# D3435C"); 
  } 
  temperatura = ENV.readTemperature (FAHRENHEIT); 
  Blynk.virtualWrite (V0, temperatura - 5); 
  iluminancia = ENV.readIlluminance (LUX); 
  Serial.println (iluminancia); 
  Blynk.virtualWrite (V4, iluminancia); 
  if (iluminancia <1400 e iluminancia> 1300) { 
    bridge1.virtualWrite (V1, 1); 
  } 
  else if (iluminancia <1300 e iluminancia> 1200) {     bridge1.virtualWrite (V1, 2);   }   else if (iluminancia <1200 e iluminancia> 1100) {     bridge1.virtualWrite (V1, 3);   }   else if (iluminancia <1100 e iluminancia> 1000) {
  

    bridge1.virtualWrite (V1, 4); 
  } 
  else if (iluminancia <1000 e iluminancia> 900) {     bridge1.virtualWrite (V1, 5);   }   else if (iluminancia> 1400) {     bridge1.virtualWrite (V1, 6);   }   else if (iluminancia <900) {     bridge1.virtualWrite (V1, 5);    } } void setup () {   Serial.begin (9600);   Blynk.begin (auth, ssid, pass);   bridge1.setAuthToken ("El token de autenticación de UNO WiFi ");    if (! ENV.begin ()) {     Serial.println ("¡ Error al inicializar el escudo MKR ENV! ");     mientras que (1);   }   timer.setInterval (333L, Sensor);
  

  // Ejecuta Sensor () cada 333 milisegundos 
  timer.setInterval (300000, resetFunc); 
  // restablece el tablero cada cinco minutos 
  } void loop () {   Blynk.run ();   // Ejecuta Blynk   timer.run ();   // Ejecuta el temporizador Blynk }
  
Arduino MKR WiFi 1010 con código de protección ENV (sin sensor de suelo) 
#include <SPI.h> 
#include <WiFiNINA.h> 
#include <BlynkSimpleWiFiNINA.h> 
#include <WidgetRTC.h> 
#include <TimeLib.h>
 // para Blynk y el widget RTC
 
#include <Arduino_MKRENV.h>
 // Para el Escudo ENV
 
#include "Adafruit_seesaw.h"
 // Token de autenticación Blynk y credenciales WiFi, reemplace con la suya
 char auth [] = "Blynk_Auth_Token" ; char ssid [] = "WiFi_SSID" ; char pass [] = "WiFi_Password" ; // Valores que se usan más tarde en 
 int temperature ;



int agua ;   
bool pumpState  = false ;  
unsigned long whenWater  =  0 ;  
sin firmar mucho ahora ;  
int currentHour ;  
int currentMinute ;  
// Instancias y declaraciones de PIN virtual 
 BlynkTimer timer ; WidgetBridge bridge1 ( V1 ) ; WidgetBridge bridge2 ( V6 ) ; WidgetLED led ( V2 ) ; WidgetRTC rtc ; Adafruit_seesaw ss ; / * I ' he encontrado que después de una



mientras que el Arduino simplemente se apaga debido a la carga que soporta. Si lo reinicia de vez en cuando , parece estar bien * /
 
void ( * resetFunc )  ( void )  =  0 ; 
/ * Comprueba los valores del sensor, ejecuta funciones que dependen de los valores y envía los valores a la aplicación Blynk * /
 void Sensor () { water = analogRead ( A1 ) ; if ( agua == 0 y pumpState == false ) { Ahora = millis

 
         
     () ; 
if ( ahora - 60000 > = whenWater and pumpState == true ) {       Blynk.setProperty ( V2, "color" , "# 23C48E" ) ;       led.on () ; } } más if ( agua! = 0 ) {     Blynk.setProperty ( V2, "color" , "# D3435C" ) ; whenWater = millis () ; }
        
 
  
  temperatura  = ENV.readTemperature ( FAHRENHEIT ) ; 
  Blynk.virtualWrite ( V0, temperatura - 5 ) ;  
iluminancia = ENV.readIlluminance ( LUX ) ;   Serial.println ( iluminancia ) ;   Blynk.virtualWrite ( V4, iluminancia ) ; if ( iluminancia < 1400 e iluminancia> 1300 ) {     bridge1.virtualWrite ( V1, 1 ) ; } más
  
   
  
   if  ( iluminancia < 1300 e iluminancia> 1200 )  {
     bridge1.virtualWrite ( V1, 2 ) ; 
} else if ( iluminancia < 1200 e iluminancia> 1100 ) {     bridge1.virtualWrite ( V1, 3 ) ; } else if ( iluminancia < 1100 e iluminancia> 1000 ) {     bridge1.virtualWrite ( V1, 4 ) ; }
  
  
     
  
  más  si  ( iluminancia < 1,000 y iluminancia> 900 )  {
     bridge1.virtualWrite ( V1, 5 ) ; 
} else if ( iluminancia> 1400 ) {     bridge1.virtualWrite ( V1, 6 ) ; } else if ( iluminancia < 900 ) {     bridge1.virtualWrite ( V1, 5 ) ; } } // Vierte agua a la planta si
  
    

el tiempo es 7 : 00 PM ( 19 : 00 ) y lo detiene dos minutos más tarde 
 
anular Pour ()  { 
currentHour = hour () ; currentMinute = minuto () ;   / * cambie el 19 y el 0 si desea cambiar cuando se riega la planta * /
 if ( currentHour == 19 ) { if ( currentMinute == 0 ) {         bridge2.virtualWrite (
    
      
          
V6, 1 ) ;  
pumpState = true ; }       / * Cambie el número 3 si desea cambiar el período de tiempo que la planta está regada. Tenga en ming que las salidas de la bomba de aproximadamente 100 ml por minuto * /.
 Otra si ( currentMinute == 3 ) {         bridge2.virtualWrite ( V6, 0 ) ; pumpState = false ; } } } // inicializa el rtc cuando se conecta al servidor
 Blynk BLYNK_CONNECTED
          
      
()  {
   rtc.begin () ;  
}
 void setup () {   // Begin serial, útil para depurar
   Serial.begin ( 9600 ) ;   // Inicializa Blynk
   Blynk.begin ( auth, ssid, pass ) ;   bridge1.setAuthToken ( "3M7_KAqE_eksQxq4uSuATTpknVCsjrdy" ) ;   bridge2.setAuthToken ( "3M7_KAqE_eksQxq4uSuATTpknVCsjrdy" ) ;   // Envía un mensaje de error si el escudo no está conectado o roto
 si ( ! ENV.begin

 
 
   ())  {
     Serial.println ( "¡Error al inicializar el escudo MKR ENV!" ) ; 
mientras que ( 1 ) ; } else {     Serial.println ( "¡El escudo MKR ENV está conectado!" ) ; }   / * Establece los intervalos del temporizador, ejecuta el sensor cada 2 minutos, vierte cada minuto y se reinicia cada cinco minutos. * /
   timer.setInterval ( 2000L, Sensor ) ;   timer.setInterval ( 1000L, Verter ) ;   timer.setInterval ( 5000L, resetFunc ) ;
     
  
  setSyncInterval ( 1 * 60 ) ;    
  bridge2.virtualWrite ( V6, 0 ) ;  
} void loop () {   // Ejecuta Blynk cada iteración del bucle. 
  Blynk.run () ;   timer.run () ; }
  
  
Arduino Uno WiFi Rev.2 Código 
#include <SPI.h> 
#include <WiFiNINA.h> 
#include <BlynkSimpleWiFiNINA.h>
 // necesario para Blynk
 
#include <Adafruit_NeoPixel.h> 
#define LED_PIN 9 
#define LED_COUNT 30
 // necesario para la tira Neopixel
 
auth Char [] = "Tu autenticación" ; char ssid [] = "Su WiFi ssid" ; char pass [] = "Su contraseña de WiFi" ; Tira Adafruit_NeoPixel ( LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800 ) ;

  

 = tira.Color ( 51 , 0 , 17 ) ; 
uint32_t gLight2  = strip.Color ( 102 , 0 , 34 ) ; 
uint32_t gLight3  = strip.Color ( 153 , 0 , 51 ) ; 
uint32_t gLight4  = strip.Color ( 204 , 0 , 68 ) ; 
uint32_t gLight5  = strip.Color ( 255, 0 , 85 ) ; 
// los cinco brillos de la tira de
 
Neopixel int pinData ;  
Temporizador BlynkTimer ;  
// la definición del temporizador blynk
 
void ( * resetFunc )  ( void )  =  0 ;  
/ * He descubierto que alrededor de siete minutos de tiempo de ejecución, el Uno se encuentra con 
errores. Resetear cada cinco minutos resuelve este problema, y 
no afecta nada. * /
 
BLYNK_WRITE ( V1 ) {
   / * lee la pindata sobre el puente, por lo que puede cambiar el brillo de los neopíxeles * /
 
pinData =
    param.asInt(); // pinData variable will store value that came via Bridge
  Serial.println(pinData);
  if (pinData == 1) {
     strip.fill(gLight1, 0, 30); 
     strip.show();
  }

  else if (pinData == 2) {
     strip.fill(gLight2, 0, 30); 
     strip.show();
       
  }

  else if (pinData == 3) {
     strip.fill(gLight3, 0, 30); 
     strip.show();
       
  }
  else if (pinData == 4) {
     strip.fill(gLight4, 0, 30);
     strip.show();
       
  }
  else if (pinData == 5) {
     strip.fill(gLight5, 0, 30);
     strip.show();
       
  }
  else if (pinData == 6) {
    strip.clear();
    strip.show();  
  }
}
BLYNK_WRITE(V6){
  // Checks if the soil is dry, sensor data coming over bridge2
  pinData2 = param.asInt(); 
  if (pinData2 == 1) {
    // If the soil is dry, turn on the pump
    digitalWrite(motorPin, HIGH); 
  }
  else if (pinData2 == 0) {
    //If the soil is moist enough, turn off the pump
    digitalWrite(motorPin, LOW); 
  }
}


void setup() {
  Serial.begin(9600); 
  Blynk.begin(auth, ssid, pass);
  strip.begin(); 
  strip.show();  
  // starts and resets neopixels
  timer.setInterval(300000, resetFunc); 
  //resets every 5 minutes

}

void loop() {
  // put your main code here, to run repeatedly:
  Blynk.run();  
  //runs Blynk
  timer.run(); 
  // runs Blynk timer
  Blynk.syncVirtual(V1, V6); 
  //syncs the bridge and bridge2 info
}
https://create.arduino.cc/

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *