Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

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

Software y servicios

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

Más información

Proceso de manufactura

  1. Monitorización profesional de temperatura con Raspberry Pi y DS18B20
  2. Sistema de control de temperatura basado en LM35 con microcontrolador AT89S52
  3. Usar ADC MCP3008 para leer sensores analógicos con Raspberry Pi
  4. Cómo funcionan los sistemas antibloqueo de frenos (ABS): Guía completa
  5. Cómo funcionan los sistemas de encendido electrónico: Guía completa
  6. Cómo funcionan los sistemas de encendido por magneto: Principios clave y aplicaciones
  7. El sistema manufacturero americano: Historia, técnicas e impacto
  8. Comprendiendo Pantallas Braille Portátiles: Claves e Innovaciones
  9. Cerrando la Brecha de Habilidades en Hogar Inteligente: Por Qué Reino Unido Rezaga en Europa
  10. El Futuro de la Vida Urbana: Rasgos Clave de Ciudades Inteligentes Emergentes – Parte 1
  11. Mejora de la Producción de Bebidas con Monitorización de Nivel de Líquidos IoT