La finalidad del este proyecto era lograr hacer una estructura para poder cultivar pantas sin suelo y, en este caso, sustituirlo por agua. El beneficio de esta forma de cultivo es el gran ahorro de la misma, ya que esta dura bastante tiempo, y la idea es que esta misma fluya así está oxigenada y tarda en estancarse. La forma de nutrir a nuestros cultivo será poner en la misma agua nutrientes o suplementos. El resultado de esto no es mas que un prototipo de algo que podría ser mejor e incluso más grande.
El proceso comienza cuando alimentamos nuestro circuito de control, al apretar el botón de "ON" esto activara unos relés que a su vez, tiene una bombas de agua conectadas a este, las mismas se activaran y empezaran a bombear el agua que yace en un recipiente de plástico. El agua subirá por las mangueras hasta llegar a unos de los extremos de las estructura, la cual tiene dos tuberías con cuatro espacios disponibles cada una para poner las plantas que se deseen cultivar. Por el otro extremo se realiza el desagote del agua, que cae al mismo recipiente para que vuelva a comenzar el ciclo.
Los componentes utilizados fueron variados, tanto en la estructura y el circuito, así también estos mismos pasaron por muchos cambios.
Por un lado tenemos los componentes del sistemas:
Reles
Resistencias de 2kΩ
Pulsadores de ON/OFF
Diodo
Pantalla LCD con I2C
Sensor de Temperatura y Humedad
2 Leds
Arduino Uno
Protoboard
Bombas de agua de 5V
Jumpers
Por otro los materiales de la estructura:
Caños PVC
Conectores
Adaptadores PVC
Madera
Mangueras
Contenedor de Platico
Clavos
Macetas
Silicona Caliente
Cortando y agujereando los materiales de la estructura
Ensamblando para luego pintar
Ya ensamblado y pintado
Circuito de Control y Monitoreo
Circuito dentro de una caja impresa en 3D
Estructura más Circuito controlador
#include <dht.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
// Instancias de las clases
dht DHT;
LiquidCrystal_I2C LCD(0x27,16,2);
// Definición de pines
#define DHT11_PIN 2
#define LED_ON_PIN 3
#define LED_OFF_PIN 4
#define BUTTON_ON_PIN 5
#define BUTTON_OFF_PIN 6
#define RELAY_PIN 8
// Variables para el estado de los LEDs y el relé
bool ledOnState = false;
bool ledOffState = false;
// Variables para el estado anterior de los botones
bool buttonOnPreviouslyPressed = false;
bool buttonOffPreviouslyPressed = false;
void setup() {
// Inicialización de LCD
LCD.init();
LCD.backlight();
// Inicialización de comunicación serial
Serial.begin(9600);
// Configuración de pines
pinMode(LED_ON_PIN, OUTPUT);
pinMode(LED_OFF_PIN, OUTPUT);
pinMode(BUTTON_ON_PIN, INPUT_PULLUP);
pinMode(BUTTON_OFF_PIN, INPUT_PULLUP);
pinMode(RELAY_PIN, OUTPUT);
// Asegúrate de que los LEDs y el relé estén apagados al principio
digitalWrite(LED_ON_PIN, LOW);
digitalWrite(LED_OFF_PIN, LOW);
digitalWrite(RELAY_PIN, LOW);
}
void loop() {
// Leer datos del sensor DHT11
DHT.read11(DHT11_PIN);
// Leer el estado actual de los botones
bool currentButtonOnPressed = digitalRead(BUTTON_ON_PIN) == LOW; // Botón ON presionado
bool currentButtonOffPressed = digitalRead(BUTTON_OFF_PIN) == LOW; // Botón OFF presionado
// Manejo de LED y relé basado en el estado de los botones
if (currentButtonOnPressed && !buttonOnPreviouslyPressed) {
// Botón ON fue presionado
ledOnState = true;
digitalWrite(LED_ON_PIN, HIGH); // Enciende el LED ON
digitalWrite(RELAY_PIN, HIGH); // Activa el relé
}
if (currentButtonOffPressed && !buttonOffPreviouslyPressed) {
// Botón OFF fue presionado
ledOffState = true;
digitalWrite(LED_OFF_PIN, HIGH); // Enciende el LED OFF
if (!currentButtonOnPressed) {
digitalWrite(RELAY_PIN, LOW); // Desactiva el relé solo si el botón ON no está presionado
}
}
// Si el botón ON es presionado, apaga el LED OFF
if (currentButtonOnPressed) {
ledOffState = false;
digitalWrite(LED_OFF_PIN, LOW);
}
// Si el botón OFF es presionado, apaga el LED ON
if (currentButtonOffPressed) {
ledOnState = false;
digitalWrite(LED_ON_PIN, LOW);
}
// Actualiza el estado anterior de los botones
buttonOnPreviouslyPressed = currentButtonOnPressed;
buttonOffPreviouslyPressed = currentButtonOffPressed;
// Mostrar datos en la pantalla LCD
LCD.setCursor(0,0);
LCD.print("H:");
LCD.print(DHT.humidity);
LCD.print("%");
LCD.setCursor(8,0);
LCD.print("T:");
LCD.print(DHT.temperature);
LCD.print("C");
// Mostrar el estado de los LEDs en la pantalla LCD
LCD.setCursor(0,1);
if (ledOnState) {
LCD.print("Bomba ON ");
}
if (ledOffState) {
LCD.print("Bomba OFF");
}
// Esperar un breve período para evitar lecturas rápidas
delay(100); // Ajusta el retardo según sea necesario
}