Simple médula de luz (Arduino)
Este módulo permite controlar un relé conectado a una lámpara mediante comandos enviados por puerto serial. Soporta:
- Control manual (
led: true/false
) - Programación horaria (
on_time
,off_time
) - Prioridad automática (el horario prevalece sobre el estado manual)
🔌 Requisitos de hardware
- Microcontrolador: Arduino Nano / Uno / ESP32 (modo serial)
- Relé de 1 canal (5V)
- Carga conectada (ej. lámpara 220V)
- Comunicación Serial desde Node-RED o backend
📡 Comunicación Serial
Se utiliza un protocolo JSON vía Serial
(9600 baudios). Cada línea debe terminar en \n
.
Estructura esperada:
{
"current_time": "HH:MM",
"on_time": "HH:MM",
"off_time": "HH:MM",
"led": true | false
}
````
> **Notas:**
>
> * `current_time` es obligatorio para la programación horaria.
> * `led` activa control manual, pero se ignora si el sistema está dentro del horario programado.
---
## 🧠 Prioridad de control
| Condición | Acción sobre el relé |
| ---------------------------- | ------------------------- |
| Dentro del horario | Relé encendido (`LOW`) |
| Fuera del horario + override | Relé según `led` (manual) |
| Fuera del horario | Relé apagado (`HIGH`) |
---
## 🔄 Flujo típico (desde Node-RED)
```text
[ Inject Timestamp ] → [ Function: construir JSON ] → [ Serial out ]
Ejemplo función Node-RED (JavaScript):
let now = new Date();
now.setHours(now.getHours() - 3); // GMT-3
let hh = now.getHours().toString().padStart(2, '0');
let mm = now.getMinutes().toString().padStart(2, '0');
msg.payload = JSON.stringify({
current_time: `${hh}:${mm}`,
on_time: "22:00",
off_time: "23:00",
led: false
}) + "\n";
return msg;
🧠 Código fuente
📘 Código Arduino (resumen lógico)
if (doc.containsKey("current_time")) { ... }
if (doc.containsKey("on_time") && doc.containsKey("off_time")) { ... }
if (doc.containsKey("led")) { ... }
Evaluación lógica:
if (inSchedule) {
// Encender (modo automático)
} else if (manualOverride) {
// Aplicar control manual
} else {
// Apagar
}
🛠️ Debugging serial
En Monitor Serial
, el dispositivo imprime:
- 📥 JSON recibido
- ⏰ Hora actual
- ⏱️ Rango programado
- 💡 Estado del relé
🧪 Casos de prueba
Caso | Resultado esperado |
---|---|
Hora 21:00, on 20:00, off 22:00 | 💡 Encendido por horario ✅ |
Hora 23:00, led: true | 💤 Fuera de horario, sin override. Apagado |
Hora 23:00, led: true + horario válido | 💡 Encendido (horario tiene prioridad) ✅ |
🔐 Licencia
Este módulo forma parte del ecosistema GrowHardware – libre, modular y extendible. Compatible con AI-Core y futuros módulos de automatización agrícola.