Jardín Interior Automatizado con Arduino: Cuidado Inteligente de Plantas
Componentes y suministros
| Arduino Nano R3 | 1 |
| Dongle Bluetooth a USB mbientLab | 1 |
| PCB personalizada JLCPCB | 1 |
Sobre este proyecto
La jardinería en la era moderna significa complicar las cosas con electrones, bits y bytes. Combinar microcontroladores y jardinería es una idea muy popular. Creo que es porque los jardines tienen entradas y salidas muy simples, fáciles de entender. Supongo que la gente (yo incluido) ve un hobby notoriamente simple y relajado y no puede evitar sentir la necesidad de sobrecomplicarlo.
En este proyecto te muestro cómo construir una versión simplificada de jardín interior usando una placa de desarrollo Arduino.
Ofrezco una guía completa paso a paso para que hagas tu propio jardín bonito, explicando en detalle tanto hardware como software para que sea el camino más sencillo para probar tus habilidades en electrónica. Este proyecto es muy manejable, especialmente tras conseguir el PCB personalizado que pedimos a JLCPCB para mejorar el aspecto, y hay suficiente documentación y código para que crees tu sistema de jardín automático.
Lo hicimos en solo 7 días: 3 días para hardware y montaje, 4 días para código y app Android para controlarlo por Bluetooth. Antes de empezar, veamos:
Qué aprenderás en este tutorial
- Elegir los componentes adecuados según las funcionalidades del proyecto
- Diseñar el circuito para conectar todos los componentes elegidos
- Montar todas las partes y empezar pruebas
- Usar la app Android para conectar por Bluetooth y manipular el sistema
Paso 1: ¿Qué es un jardín interior?
La mayoría de las plantas tienen necesidades simples. Como invitados, son poco exigentes. Solo tres cosas básicas antes de traer una planta a casa: luz, agua y aire. Si dominas estos cuatro elementos (sic), puedes crear un jardín interior en casi cualquier lugar del mundo y en cualquier estación.
- Luz: La mayoría de plantas de jardín necesitan al menos 6 horas de luz diaria. Pero debe ser buena luz. Si pones la mano frente a la ventana y no proyecta sombra, probablemente la luz no sea adecuada. Puedes suplementar con luces de cultivo. Si tienes luz natural modesta y no quieres luces especiales, elige plantas de baja luz o muévelas a un alféizar soleado.
- Agua: Las plantas necesitan condiciones cercanas a su hábitat nativo. Una planta del desierto necesita menos riego que una de pantano. Saber qué prefiere es buen primer paso. Las propias plantas dan pistas: hojas gruesas y gomosas son acumuladoras de agua y aguantan menos riego que hojas finas y delicadas. Si odias regar, elige variedades que prosperen con poco, o macetas con depósitos ocultos.
- Aire: Como subproducto de la fotosíntesis, las plantas producen oxígeno y filtran gases nocivos (formaldehído) via hojas. Para mantenerlas sanas, limpia sus hojas y mantén el aire moviéndose y húmedo: colócalas en zona con buena circulación o usa un ventilador pequeño.
Haré un sistema basado en Arduino para supervisar temperatura y humedad de mi planta y proveer automáticamente sus necesidades: intensidad de luz, agua y aire fresco. Necesito sensores para controlar actuadores: luz según sensor de brillo, riego según sensor de humedad de suelo, ventiladores según sensor temperatura/humedad.
Paso 2: Sensores y actuadores
El sistema ensambla sensores y actuadores para acceder a datos físicos alrededor de la planta y determinar qué necesita y cuándo suministrarlo.
Sensores
- Sensor de luz BH1750: BH1750FVI es sensor digital de luz (I2C). Ideal para obtener datos de luz ambiental y ajustar retroiluminación LCD/teclado en móviles. Detecta rango amplio a alta resolución (1–65535 lx).
- Sensor de humedad de suelo: Los que miden resistencia/conductividad entre dos contactos son básicamente basura. La resistencia no indica bien el contenido de humedad (depende de pH, sales disueltas, temperatura). Además, suelen ser de mala calidad y los contactos corroen rápido; difícil que duren una temporada.
- Sensor temperatura y humedad DHT11: Básico, ultra barato, digital. Usa sensor capacitivo de humedad y termistor; salida digital en pin de datos (sin pines analógicos). Simple de usar, pero requiere temporización cuidadosa. Solo da nuevos datos cada 2 segundos.
Actuadores
- LED blanco: Diodo emisor de luz, semiconductor de dos terminales. Emite luz al activarse con voltaje adecuado (recombinación electrón-hueco → fotones).
- Bomba de agua: Dispositivo que mueve fluidos por acción mecánica. Clasificadas en elevación directa, desplazamiento y gravedad. Funcionan por mecanismos alternativos o rotativos, consumen energía para mover fluido. Fuentes: manual, eléctrica, motores, eólica. Tamaños: microscópicos (médicos) a industriales.
- Ventilador DC 12V: Importante para mover aire fresco alrededor de la planta cuando sea necesario y mantenerla sana.
Paso 3: Fabricación del PCB (por JLCPCB)
Sobre JLCPCB
JLCPCB (Shenzhen JIALICHUANG Electronic Technology Development Co., Ltd.) es la mayor empresa de prototipos PCB en China y fabricante high-tech especializado en prototipos rápidos y pequeña serie. Con más de 10 años de experiencia, >200.000 clientes, >8.000 pedidos/día. Capacidad anual 200.000 m² para PCB de 1, 2 o multicapa. Profesional, gran escala, bien equipado, gestión estricta, calidad superior.
Volviendo a nuestro proyecto
Comparé precios de muchos fabricantes y elegí JLCPCB: mejor proveedor y más barato. Solo subí el archivo Gerber, ajusté parámetros (grosor, color, cantidad), pagué 2 $ y recibí el PCB en 3 días. A veces hay envío gratis.
Puedes descargar el circuito (PDF) aquí.
Como ves, el PCB está muy bien fabricado: misma forma de hoja que diseñamos, todas las etiquetas y logos para guiar el soldado.
Paso 4: Ingredientes
Componentes necesarios (con enlaces de compra):
- PCB pedida a JLCPCB
- Arduino Nano: enlace
- Módulo ESP01: enlace
- Módulo Bluetooth HC-05 o HC-06: enlace
- Sensor luz BH1750: enlace
- Sensor temp/humedad: enlace
- Sensor humedad suelo: enlace
- Bomba de agua: enlace
- Ventilador DC 12V: enlace
- LEDs blancos: enlace
- Conectores header: enlace
Paso 5: El montaje
Mostrar los 9 elementos
Listos para soldar componentes. ¡Sigue las etiquetas para evitar errores! Empezamos soldando el conector del Arduino para probar alimentación y puedes escribir código de prueba básico para verificar cada sensor (luz, LEDs) porque todos van directo a la placa (Arduino), tienes acceso total.
Nota: Mantén la punta del soldador limpia y brillante. Límpiala en la esponja cada vez. Si ves que pierde brillo (flux u oxidación), límpiala aunque estés en medio del soldado. Una punta limpia transfiere calor mucho mejor.
El PCB de JLCPCB guía para colocar todo correctamente. No dudes en visitar el enlace para ver el PCB y pedir online.
Usar este PCB es muy cómodo por su calidad y las etiquetas garantizan que no cometas errores de soldado. Soldé cada componente en su sitio; se pueden usar ambas caras del PCB.
Con el PCB listo y componentes soldados, preparé un diseño para corte láser CNC para integrar electrónica y planta en un mismo soporte. Si quieres el mismo diseño, archivos DXF aquí.
Paso 6: La App Android
Esta app conecta a tu Arduino por Bluetooth. En modo manual accedes a ventiladores, luces y bomba de agua para ON/OFF, y lees datos de sensores pulsando "get data"; los valores aparecen en pantalla del smartphone.
Descarga gratis la app en este enlace.
Paso 7: Código Arduino y validación
El código está disponible para descargar en este enlace. Es simple y bien comentado para entenderlo por ti mismo.
Cada botón tiene su función, pero destaco el modo automático de control de brillo: puse el sensor de luz en la base inferior; al seleccionar este modo, el sistema controla el brillo de los LEDs frontales según la señal del sensor. También podemos leer temperatura y humedad directamente en la pantalla del smartphone, lo cual es muy útil.
Código
Código fuente Arduino
/************************************************************************************************************************************************************************
* - Author : BELKHIR Mohamed
* - Profession : (Developer) MEGA DAS owner
* - Main purpose : Industrial Application
* - Copyright (c) holder : All rights reserved
* - License : BSD 2-Clause License
* - Date : 20/11/2017
***********************************************************************************************************************************************************************/
#include "DHT.h"
#include <Wire.h>
#include <BH1750.h>
// Pines de control
const int Pump = 4; // Bomba de agua
const int Fan = 5; // PWM para velocidad ventilador
const int Light = 6; // Brillo LEDs
const int TempHum = 7; // Entrada DHT
const int Moisture = 8; // Entrada digital sensor humedad
const int TestLED = 9; // Test LEDs PCB
const int Brightness = 12; // Entrada sensor luz
const int analogMoistue = 0; // Entrada analógica sensor humedad
#define DHTTYPE DHT11
DHT dht(TempHum, DHTTYPE);
BH1750 lightMeter;
char Data = 'x';
String cmd = "";
int flagModeAuto = 0;
int sprayCMD = 0;
int LightCMD = 0;
int lightLevelPlus = 0;
float temperature = 0;
float humidity = 0;
uint16_t lux = 0;
void setup() {
Wire.begin();
dht.begin();
lightMeter.begin();
Serial.begin(9600);
Serial.setTimeout(100);
pinMode(Pump, OUTPUT);
pinMode(Fan, OUTPUT);
pinMode(Light, OUTPUT);
pinMode(Moisture, INPUT);
pinMode(TestLED, INPUT);
delay(1000);
digitalWrite(Pump, LOW);
digitalWrite(Fan, LOW);
digitalWrite(Light, LOW);
}
void loop() {
while (Serial.available()) {
delay(10);
Data = Serial.read();
cmd += Data;
}
if (cmd == "dt") Serial.print(humidity);
if (cmd == "dh") Serial.print(lux);
if (cmd == "db") Serial.print(temperature);
if (cmd == "o") flagModeAuto = 1;
if (cmd == "m") flagModeAuto = 0;
if (flagModeAuto == 1) {
autoPump();
lightBrightness();
autoFan();
} else {
if (cmd == "f") analogWrite(Fan, 255);
if (cmd == "x") analogWrite(Fan, 0);
if (cmd == "l") analogWrite(Light, 255);
if (cmd == "k") analogWrite(Light, 0);
if (cmd == "w") analogWrite(Pump, 255);
if (cmd == "y") analogWrite(Pump, 0);
}
cmd = "";
lux = lightMeter.readLightLevel();
temperature = dht.readTemperature();
humidity = dht.readHumidity();
}
void autoPump() {
if (analogRead(analogMoistue) < sprayCMD) {
digitalWrite(Pump, HIGH);
delay(1000);
digitalWrite(Pump, LOW);
delay(1000);
}
}
void lightBrightness() {
while (lux < LightCMD) {
analogWrite(Light, lightLevelPlus);
delay(100);
lightLevelPlus++;
lux = lightMeter.readLightLevel();
}
}
void autoFan() {
if (temperature > 30) analogWrite(Fan, 255);
else analogWrite(Fan, 0);
}
Partes personalizadas y envolventes
dxf_mdf_5mm_s0PEHuez4w.rar
Esquemáticos
(No incluido en el original)
Proceso de manufactura
- Crea un Impresionante Sistema Ambilight para Monitor con Arduino
- Construya el clásico juego Pong en Arduino UNO con pantalla OLED: Tutorial paso a paso
- Detector de frecuencia de audio con Arduino – Mide los picos de sonido más intensos
- Construye tu Propio Tamagotchi con Arduino: Mascota Digital DIY
- Controlador Inalámbrico Inteligente de Interruptores: Manipulador Remoto Basado en Arduino
- Tres en raya con Arduino, matriz LED MAX7219 y carcasa de cartón
- Pistola de Agua Inteligente Activada por Movimiento con Arduino Nano
- Construye un Temporizador Regresivo Fiable con Arduino y Pantalla de 7 Segmentos SparkFun
- Girasol Arduino: Construye un Girasol Electrónico que Sigue al Sol
- Construye tu Propio Coche RC Porsche con Arduino: Guía Paso a Paso
- Kit de Robot de Navegación Interior Inteligente para Proyectos Arduino