MONGO GARDEN es una estación de monitoreo embebida en hardware propio para un jardín vertical. Mide 30 canales de sensores de humedad del sustrato, humedad del aire, temperatura del aire, presión atmosférica, radiación UV, registra los datos en SD, expone datos vía WiFi y WebSocket, y corre sobre un PCB diseñado desde cero.
Arquitectura del sistema
El sistema combina sensado analógico multiplexado, almacenamiento local en SD, comunicación WiFi con servidor HTTP y WebSocket, y un reloj de tiempo real para timestamping preciso.
Arduino MKR1000 con chip ATSAMW25. Combina ARM Cortex-M0+ con módulo WiFi integrado WINC1500. Operado bajo el framework PlatformIO.
2 módulos CD74HC4067 controlados con 4 pines digitales. Permite leer sensores de humedad de suelo agrupados en dos líneas analógicas con muy pocos recursos del microcontrolador.
Soporta modo cliente WiFi con WebSocket y también un Access Point propio con servidor HTTP. Eso le da operación local y remota según el escenario.
Los datos se guardan en data.txt para conservar lecturas locales incluso cuando no hay red disponible.
El DS1302 aporta fecha y hora a cada registro. También existe un modo demo que sincroniza el reloj con la hora de compilación del firmware.
La placa integra conectores para sensores, relés de control y el resto de periféricos del sistema en un diseño hecho específicamente para este módulo.
Sensores integrados
PCB del proyecto
Aquí se pueden observar dos imágenes de la PCB diseñada en KiCad y el resultado despues de ser fabricada con JLCPCB.
Interfaz de comandos
El sistema acepta comandos tanto por puerto Serial como por WebSocket. La misma interfaz funciona en modo local y en modo remoto.
| Función | Descripción | Estado |
|---|---|---|
| leersensores() | Lee los canales del multiplexor con delay configurable | Activo |
| obtenerhora() | Captura timestamp del DS1302 | Activo |
| imprimirhora() | Envía la última hora obtenida al Serial o WebSocket | Activo |
| humedaddht11() | Temperatura y humedad del DHT11 interno o externo | Activo |
| escribirDatos() | Guarda los valores actuales en data.txt con timestamp | Activo |
| barometro() | Temperatura, presión y altitud estimada | Activo |
| TSL2561() | Lectura de lux, clasificación de luz e índice UV aproximado | Activo |
| startWebServerAP() | Crea un Access Point propio con servidor HTTP | Activo |
| WifiLab() | Conecta a red WiFi e inicia WebSocket | Activo |
| pingToHost() | Verifica conectividad de red con ping | Activo |
Montaje integrado
A continuación se muestra el montaje interior del módulo donde se pueden apreciar los diferentes componentes del proyecto en su posición final