HydroMazing: Sistema Inteligente de Jardinería IoT para Cultivo Avanzado
Componentes y materiales
| Componente | Cantidad | Notas |
|---|---|---|
| Raspberry Pi 3 Model B | 1 | Opcional: IoT, mensajería SMS |
| Arduino Nano R3 | 2 | Nodos sensores/actuadores |
| Shield de expansión Arduino Nano | 2 | |
| Sensor temp/humedad DHT21/22 | 1 | Puede necesitar resistencia 10k Vcc/Data |
| Módulo fotorresistencia (luz) | 1 | |
| Radio nRF24L01 2.4GHz | 1 | Con o sin antena SMA |
| Sensor Dallas (temp. solución nutritiva) | 1 | Probablemente necesite conector |
| Módulos TX/RX 433MHz | 1 par | Para enchufes inalámbricos |
| Pack 3-5 enchufes inalámbricos + mando | 1 | Control de ventiladores, luces, bombas |
| Pantalla LCD con botones DFRobot (shield Uno) | 1 | Monitor local |
Herramientas
- Soldador
Software y servicios
- Arduino IDE
- Microsoft Visual Studio 2015 (para parte Raspberry Pi / web)
Sobre el proyecto
No pretendía hacer un producto, solo resolver un problema común: cultivar plantas en interior/controlado. ¿Cómo crear ambiente óptimo con electrónica común y objetos caseros? ¿Suelo o hidropónico?
hydroMazing facilita proporcionar condiciones óptimas para cultivar plantas en casa. Sistema independiente de recopilación de datos e interfaz web en tu propio dispositivo, no en nube remota.
Automatización del hogar
Inicialmente usé termostatos programables Lux WIN100 para ventiladores. Efectivos pero con muchos cables y relés antiguos. Intenté hackear una regleta con mis propios relés y Arduino Uno → lío de cables y conectores, desánimo.
Idea: usar enchufes AC controlados por radio (mando a distancia). Hackear el mando para que Arduino envíe señales ON/OFF. ¿Fiable? Probé y no fue mucho mejor. Luego encontré módulos TX/RX 315/433MHz baratos. Con librería RCSwitch leí códigos del mando y los reproduje con Arduino. ¡Funcionó!
Programación: "TheDecider"
Desarrollé software con parámetros base para temporización, gestión, transmisión/recepción de objetos "sensor" y "appliance". Control de electrodomésticos mediante algoritmos llamados "TheDecider": decide encender/apagar enchufes según lecturas de sensores y umbrales programados. Diseñado para ser adaptable a acuaponía, setas, etc.
Los enchufes inalámbricos resultaron fiables. El código creció hasta tocar límites de memoria del Arduino Uno → optimización forzada. Finalmente necesitó segundo microcontrolador o uno mayor.
Monitorización inalámbrica SIN Internet
Comunicación entre microcontroladores: nRF24L01 (radio 2.4GHz bajo consumo). Añadí otro Arduino Uno con shield LCD para mostrar lecturas, estados y alertas. Plataforma abierta, auto-contenida, arquitectura abierta para integrar Internet fácilmente.
Monitorización por Internet (Raspberry Pi)
Raspberry Pi + nRF24L01 recibe datos. Modifiqué código Arduino para escuchar transmisiones y volcar a archivos: log completo, estado sensores, estado actuadores, alertas. Script PHP lee archivos y muestra web en Apache (Pi). Script Python vigila carpeta alertas: si existe, parsea y envía email/SMS. Mueve alerta para que PHP la muestre. Logs → base de datos → analíticas e informes. hydroMazing Garden Wizard guía todo el cultivo.
Monitorización solución nutritiva (hidropónico)
Controla nivel, pH y EC. Activar bomba para rellenar agua ("topping-off") y mantener concentración. Gestiona bombas pH/EC y notifica cambios necesarios.
Código: Configuración núcleo (CoreSettings.h)
Archivo crítico: red nRF, códigos mando enchufes, temporizadores, definiciones de objetos Appliance y Sensor.
/* CoreSettings.h - Copyright (C) 2015 Cory J. Potter - All Rights Reserved
Licencia: ver LICENSE.txt - NO USO COMERCIAL */
#ifndef __CORESETTINGS_H__
#define __CORESETTINGS_H__
#ifdef ARDUINO
#define RX_PIN 103
#define TONE_PIN 104
#define TX_PIN 8
uint8_t node_address = 1;
uint8_t totalNodes = 3;
unsigned long lastRxTimeStamp = 0;
const uint64_t nRFbaseAddress = 1034834473100;
uint8_t nRFaddress = 0;
uint64_t tx_pipes[3] = { 0xF0F0F0F0F8LL, 0xF0F0F0F0F7LL, 0xF0F0F0F0F6LL };
uint64_t rx_pipes[3] = { 0xF0F0F0F0F1LL, 0xF0F0F0F0F2LL, 0xF0F0F0F0F3LL };
// Enchufes inalámbricos (ejemplo ETEKCITY #0319)
uint8_t totalSwitches = 5;
unsigned long mySwitchOn[] = {24,333107,333251,333571,335107,341251};
unsigned long mySwitchOff[] = {24,333116,333260,333580,335116,341260};
// I2C
const int MY_ADDRESS = 42;
const int SEND_TO_ADDRESS = 22;
// Temporizadores (encadenados)
Timer Timer_txData = { TIMER_TX_DATA, 30000UL, true, false, 0, NULL };
Timer Timer_Save_Settings = { TIMER_SAVE_SETTINGS, 3600000UL, true, false, 0, &Timer_txData };
Timer Timer_Sensor_Read = { TIMER_SENSOR_READINGS, 7000UL, true, false, 0, &Timer_Save_Settings };
Timer Timer_Alerts = { TIMER_ALERTS, 45000UL, true, false, 0, &Timer_Sensor_Read };
Timer Timer_rxData = { TIMER_RX_DATA, 6000UL, true, false, 0, &Timer_Save_Settings };
// Actuadores (Appliances)
Appliance Appliance_Light_1 = {101, 1, APPLIANCE_LIGHT, DEFAULT_TIME, true, false, OFF, NULL };
Appliance Appliance_IntakeFan = {104, 1, APPLIANCE_INTAKE_FAN, DEFAULT_TIME, true, false, OFF, &Appliance_Light_1 };
Appliance Appliance_ExhaustFan = {103, 1, APPLIANCE_EXHAUST_FAN, DEFAULT_TIME, true, false, OFF, &Appliance_IntakeFan };
Appliance Appliance_Humidifier = {102, 0, APPLIANCE_HUMIDIFIER, DEFAULT_TIME, true, false, OFF, &Appliance_ExhaustFan };
Appliance Appliance_Heater = {101, 0, APPLIANCE_HEATER, DEFAULT_TIME, true, false, OFF, &Appliance_Humidifier };
Appliance Appliance_FeedPump = {105, 1, APPLIANCE_PUMP, DEFAULT_TIME, true, false, OFF, &Appliance_Heater };
uint8_t totalAppliances = 6;
// Sensores
Sensor Sensor_Photocell = { PIN_A0, 1, SENSOR_PHOTO, 100, 50, 100, 0, 25, NULL };
Sensor Sensor_Temp = { PIN7, 1, SENSOR_TEMPF, 50, 70, 80, 0, 75, &Sensor_Photocell };
Sensor Sensor_Humidity = { PIN7, 1, SENSOR_HUMIDITY, 50, 40, 70, 0, 50, &Sensor_Temp };
Sensor Sensor_WaterTemp = { PIN3_INT1,1,SENSOR_WATER_TEMPF,100, 50, 70, 0, 65, &Sensor_Humidity };
Sensor Sensor_Flow = { PIN2_INT0,2, SENSOR_FLOW, 100, 50, 50, 0, 75, &Sensor_WaterTemp };
Sensor Sensor_Float = { PIN_A2, 1, SENSOR_FLOAT, 100, 0, 1, 0, 1, &Sensor_Flow };
Sensor Sensor_Voltage = { PIN1_TX, 1, SENSOR_VOLTAGE, 100, 0, 100, 0, 50, &Sensor_Float };
uint8_t totalSensors = 7;
#endif
#endif
Esquemáticos
- Ventiladores entrada/salida, luces, calefactores, deshumidificadores, bombas → controlados vía enchufes AC inalámbricos.
- Enchufes inalámbricos comerciales usados.
- Prototipo montado y testeando.
- Interfaz web prototipo (dashboard y alertas).
Más información
- Artículos relacionados: "Existential Crisis - Arduino RPG Simulator", "Why DIY when you could buy?", "What is a Smart Garden?", "Starting a Smart Indoor Garden", "Digging Deeper into Indoor Gardening", "Indoor Gardening: What can go wrong?", "Managing Nutrient Solution Systems", "Why Arduino when you can Pi?".
Proceso de manufactura
- Monitorización profesional de temperatura con Raspberry Pi y DS18B20
- Sistema de control de temperatura basado en LM35 con microcontrolador AT89S52
- Usar ADC MCP3008 para leer sensores analógicos con Raspberry Pi
- Cómo funcionan los sistemas antibloqueo de frenos (ABS): Guía completa
- Cómo funcionan los sistemas de encendido electrónico: Guía completa
- Cómo funcionan los sistemas de encendido por magneto: Principios clave y aplicaciones
- El sistema manufacturero americano: Historia, técnicas e impacto
- Comprendiendo Pantallas Braille Portátiles: Claves e Innovaciones
- Cerrando la Brecha de Habilidades en Hogar Inteligente: Por Qué Reino Unido Rezaga en Europa
- El Futuro de la Vida Urbana: Rasgos Clave de Ciudades Inteligentes Emergentes – Parte 1
- Mejora de la Producción de Bebidas con Monitorización de Nivel de Líquidos IoT