Objetivo y caso de uso
Qué construirás: Un controlador básico de relé de corte por fuga de agua usando un Arduino UNO R3, sensor de fuga de agua, módulo de relé de 1 canal y zumbador piezoeléctrico. Cuando se detecta agua, el Arduino conmuta el relé en aproximadamente 10–50 ms para cortar un circuito de control de baja tensión conectado y activa de inmediato una alarma local.
Por qué importa / Casos de uso
- Protección bajo fregadero: Detecta goteos bajo un fregadero de cocina o baño y corta una línea de válvula de 5–12 V o de habilitación de bomba antes de que el agua acumulada se extienda por el mueble.
- Monitoreo del área de la lavadora: Coloca el sensor en una bandeja cerca de la lavadora para que una fuga en el suelo active un zumbador audible y abra o cierre el relé para deshabilitar una ruta de control de solenoide de agua.
- Respuesta en sótano o cuarto de servicio: Detecta fugas tempranas cerca de un calentador de agua, filtro o tubería de sumidero y envía una señal rápida de corte mientras proporciona una alerta inmediata en el lugar.
- Prototipo educativo de automatización: Aprende sensado digital, conmutación segura con relé y control orientado a eventos en un microcontrolador de 8 bits con latencia en reposo casi nula y normalmente <1% de carga de CPU del UNO para este bucle simple.
Resultado esperado
- Un sketch de Arduino que lee continuamente el sensor de fuga y cambia el estado del relé tan pronto como se detecta agua.
- Una alarma con zumbador que se activa al mismo tiempo que el evento de corte para una notificación local clara.
- Un prototipo de bajo costo adecuado para pruebas en banco con electrónica de 5 V y circuitos de enclavamiento de válvula, bomba o controlador de baja tensión.
- Un flujo de respuesta repetible con temporización práctica: desde el humedecimiento del sensor hasta la acción del relé en decenas de milisegundos, sin uso de GPU y sin dependencia de FPS.
Audiencia: principiantes de Arduino, makers y estudiantes de automatización de edificios; Nivel: Principiante
Arquitectura/flujo: El sensor de fuga de agua detecta humedad → Arduino UNO lee la entrada digital/con umbral en el bucle principal → el relé se energiza o desenergiza según la elección de cableado a prueba de fallos → el zumbador suena hasta que la fuga desaparece o el sistema se reinicia.
Nota educativa de validación
Antes de publicar este caso, el contenido pasó la puerta automática de validación de Prometeo con estado PASS. El validador comprobó los bloques de código, la estructura del artículo, los comandos copiables y la coherencia con el catálogo de dispositivos soportados.
Evidencia de validación publicada
- Resultado automático: PASS.
- Estructura parseada: 3 apartados, 4 tablas y 3 bloques de código detectados antes de publicar.
- Código comprobado: 1 Arduino/arduino-cli compile, 1 C/C++ static checks, 1 Bash/copy-paste checks.
- Catálogo soportado: el texto se contrastó contra los perfiles de dispositivo validables de Prometeo y los stacks no soportados bloquean la publicación.
- Hallazgos del informe: sin hallazgos bloqueantes.
Esta validación confirma compatibilidad sintáctica y de herramientas para el material publicado, pero no sustituye la prueba física sobre tu hardware, cableado y entorno exactos.
Nota educativa de seguridad
Este proyecto es un prototipo educativo, no un sistema certificado de protección de edificios. Trátalo como un controlador de aprendizaje y una ayuda de respuesta a fugas a escala de banco.
Límites y precauciones importantes:
- No conectes tensión de red directamente a menos que estés cualificado para diseñar y probar sistemas de relé seguros para red eléctrica. Para uso de principiantes, mantén el relé solo en un circuito de baja tensión.
- El módulo de relé de este tutorial debe usarse para conmutar:
- cableado de control de válvula de baja tensión
- una entrada de habilitación de baja tensión
- una carga de demostración
no equipos domésticos de fontanería de CA a menos que estén correctamente diseñados. - El agua y la electrónica deben mantenerse físicamente separadas:
- solo el sensor de fuga debe exponerse al agua
- mantén secos el Arduino, la placa de relé, el cable USB y el zumbador
- Un sensor de fuga corroído o contaminado puede activar falsas alarmas o no detectar correctamente. Se requiere inspección periódica.
- La alimentación USB desde un ordenador es aceptable para pruebas de laboratorio, pero una instalación en campo requeriría un diseño de alimentación y una estrategia de encapsulado más deliberados.
- Este diseño no tiene garantía certificada a prueba de fallos, ni respaldo por batería, ni detección de manipulación.
- Si se usa cerca de bombas, válvulas o actuadores de mayor corriente, confirma que los contactos del relé estén clasificados para la carga real y que las cargas inductivas tengan la supresión adecuada.
- Nunca confíes solo en este prototipo para prevenir daños materiales en entornos de alto riesgo.
Diagrama de bloques conceptual
Vista de alto nivel: qué entra, qué procesa cada bloque y qué sale del sistema.
Arquitectura funcional
Flujo conceptual de señales y responsabilidades entre bloques del dispositivo.
Ruta de validación
Resumen conceptual de las herramientas usadas para comprobar el material publicado.
Requisitos previos
Antes de empezar, deberías tener:
- Familiaridad básica con:
- conectar cables jumper a los pines del Arduino
- seleccionar una placa y un puerto serie
- cargar un sketch de Arduino
- Un ordenador con:
- Arduino CLI instalado
- cable USB para el Arduino UNO R3
- Un espacio de trabajo seco y un pequeño recipiente o toalla de papel para pruebas controladas con agua
- Una carga o lazo de control de baja tensión para conectar a los contactos del relé con fines de demostración
- Ejemplos:
- una línea de control de válvula de 12 V DC
- una pequeña línea de habilitación de bomba DC
- una lámpara LED de prueba alimentada por separado
- Para un laboratorio de principiantes, un LED o zumbador en el lado de contactos del relé es más seguro que conectar al principio cualquier equipo real de fontanería
Materiales
Usa exactamente esta combinación de familia/modelo de dispositivos:
Arduino UNO R3 (ATmega328P) + sensor de fuga de agua + módulo de relé de 1 canal + zumbador piezoeléctrico
Lista de materiales recomendada:
| Elemento | Tipo exacto/recomendado | Propósito |
|---|---|---|
| Controlador principal | Arduino UNO R3 (ATmega328P) | Ejecuta la lógica de detección de fugas y del relé |
| Sensor | Módulo de sensor de fuga de agua con salida analógica y/o digital | Detecta presencia de agua en pistas expuestas |
| Salida de relé | Módulo de relé de 1 canal, bobina de 5 V, entrada compatible con Arduino | Conmuta el circuito de control externo de corte |
| Alarma | Zumbador piezoeléctrico, compatible con 5 V | Advertencia audible local |
| Cableado | Cables jumper macho-macho | Conexiones entre módulos |
| Cable USB | USB A a USB B | Alimentación y programación |
| Carga de prueba | Lámpara de baja tensión, módulo LED o lazo de control de válvula deshabilitado | Demostración segura de la acción del relé |
| Opcional | Toalla pequeña, vaso, pulverizador | Pruebas controladas con agua |
| Opcional | Protoboard | Cableado más limpio del zumbador si es necesario |
Notas sobre la combinación exacta de modelos
- El Arduino UNO R3 (ATmega328P) es el único controlador usado aquí.
- El sensor de fuga de agua puede exponer:
- AO: salida analógica
- DO: salida digital con umbral desde un comparador integrado
- En este tutorial, usaremos la salida analógica para un filtrado más estable y fácil de entender.
- Se asume que el módulo de relé tiene:
- VCC
- GND
- IN
- terminales de tornillo como COM, NO y NC
- El zumbador piezoeléctrico se trata como un zumbador simple de dos cables.
Configuración/Conexión
Este proyecto tiene dos partes:
- Lado lógico: Arduino, sensor, entrada del relé, zumbador
- Lado de contactos del relé: el circuito externo de baja tensión que deseas interrumpir o habilitar
Asignación de pines usada en este tutorial
| Pin de Arduino UNO | Pin del dispositivo conectado | Función |
|---|---|---|
| 5V | VCC del sensor | Alimentación del sensor de fuga |
| GND | GND del sensor | Tierra común |
| A0 | AO del sensor | Lectura analógica de fuga |
| 5V | VCC del relé | Alimentación del módulo de relé |
| GND | GND del relé | Tierra común |
| D8 | IN del relé | Señal de control del relé |
| D9 | Positivo del zumbador | Pin de accionamiento del zumbador |
| GND | Negativo del zumbador | Retorno del zumbador |
Pasos de conexión del sensor
- Conecta VCC del sensor de fuga de agua a 5V en el Arduino.
- Conecta GND del sensor a GND en el Arduino.
- Conecta AO del sensor a A0 en el Arduino.
- Si tu sensor también tiene DO, déjalo sin usar en este tutorial.
Pasos de conexión del módulo de relé
- Conecta VCC del relé a 5V del Arduino.
- Conecta GND del relé a GND del Arduino.
- Conecta IN del relé a D8 del Arduino.
Pasos de conexión del zumbador piezoeléctrico
- Conecta el terminal positivo del zumbador a D9.
- Conecta el terminal negativo del zumbador a GND.
Lado de contactos del relé: cómo usar la función de corte
El módulo de relé proporciona contactos de conmutación aislados, normalmente:
- COM: común
- NO: normalmente abierto
- NC: normalmente cerrado
Para un objetivo de relé de corte por fuga de agua, la configuración práctica más adecuada para principiantes es:
- Colocar el relé en serie con la línea de control de baja tensión del dispositivo que deseas detener.
- Elegir COM + NC si quieres el circuito conectado durante el funcionamiento normal en seco y desconectado cuando se active la alarma de fuga.
- Elegir COM + NO si quieres el circuito desconectado durante el funcionamiento normal en seco y conectado solo durante la alarma. Esto es menos común para corte.
Disposición de contactos recomendada para principiantes
Para un controlador de corte simple:
- Cable externo de fuente/control de baja tensión -> COM
- Relé NC -> entrada de carga/control
Resultado:
- Estado seco: COM y NC están conectados, por lo que se permite el circuito de carga/control.
- Estado de fuga: el relé conmuta alejándose de NC, abriendo la ruta de control y creando una acción de corte.
Nota importante de configuración sobre la lógica del relé
Algunos módulos de relé son activos en LOW:
- escribir
LOWen la entrada enciende el relé (ON) - escribir
HIGHapaga el relé (OFF)
Otros son activos en HIGH.
El sketch de abajo admite esto usando una constante de configuración para que no tengas que reescribir la lógica.
Código validado
Sketch completo de Arduino: water_leak_shutoff_relay.ino
Vista pública parcial del archivo validado. El código completo se muestra a miembros y en PDF/Print.
/*
water_leak_shutoff_relay.ino
Device model:
Arduino UNO R3 (ATmega328P) + water leak sensor + 1-channel relay module + piezo buzzer
Goal:
Detect water using analog input, confirm the leak with simple timing/filter logic,
trigger an audible alarm, and switch a relay for shutoff control.
Serial output:
9600 baud
*/
const int SENSOR_PIN = A0;
const int RELAY_PIN = 8;
const int BUZZER_PIN = 9;
// Relay module behavior:
// true = relay input is active LOW
// false = relay input is active HIGH
const bool RELAY_ACTIVE_LOW = true;
// Sensor thresholds:
// Lower analog readings often mean "more water" on many common modules,
// but some modules behave differently. Validate with Serial Monitor first.
const int LEAK_THRESHOLD_WET = 500; // Reading at or below this means "wet"
const int LEAK_THRESHOLD_DRY = 560; // Reading at or above this means "dry again"
// Timing filters to avoid false triggers from noise or tiny splashes
const unsigned long WET_CONFIRM_MS = 400;
const unsigned long DRY_CONFIRM_MS = 1500;
const unsigned long STATUS_PRINT_MS = 500;
// Buzzer pattern timing
const unsigned long BUZZER_ON_MS = 180;
const unsigned long BUZZER_OFF_MS = 220;
bool leakAlarm = false;
unsigned long wetStartMs = 0;
unsigned long dryStartMs = 0;
unsigned long lastStatusPrintMs = 0;
unsigned long buzzerToggleMs = 0;
bool buzzerState = false;
void setRelayAlarmState(bool alarmActive) {
// For shutoff wiring using COM + NC:
// alarmActive should cause the relay to switch away from NC.
bool relayEnergized = alarmActive;
if (RELAY_ACTIVE_LOW) {
digitalWrite(RELAY_PIN, relayEnergized ? LOW : HIGH);
} else {
digitalWrite(RELAY_PIN, relayEnergized ? HIGH : LOW);
}
}
void setBuzzer(bool on) {
if (on) {
tone(BUZZER_PIN, 2400); // 2.4 kHz tone
} else {
noTone(BUZZER_PIN);
}
}
void printState(const char* stateName, int sensorValue) {
Serial.print("State: ");
Serial.print(stateName);
Serial.print(" | sensor=");
Serial.print(sensorValue);
Serial.print(" | relay_alarm=");
Serial.println(leakAlarm ? "ON" : "OFF");
}
// .../*
water_leak_shutoff_relay.ino
Device model:
Arduino UNO R3 (ATmega328P) + water leak sensor + 1-channel relay module + piezo buzzer
Goal:
Detect water using analog input, confirm the leak with simple timing/filter logic,
trigger an audible alarm, and switch a relay for shutoff control.
Serial output:
9600 baud
*/
const int SENSOR_PIN = A0;
const int RELAY_PIN = 8;
const int BUZZER_PIN = 9;
// Relay module behavior:
// true = relay input is active LOW
// false = relay input is active HIGH
const bool RELAY_ACTIVE_LOW = true;
// Sensor thresholds:
// Lower analog readings often mean "more water" on many common modules,
// but some modules behave differently. Validate with Serial Monitor first.
const int LEAK_THRESHOLD_WET = 500; // Reading at or below this means "wet"
const int LEAK_THRESHOLD_DRY = 560; // Reading at or above this means "dry again"
// Timing filters to avoid false triggers from noise or tiny splashes
const unsigned long WET_CONFIRM_MS = 400;
const unsigned long DRY_CONFIRM_MS = 1500;
const unsigned long STATUS_PRINT_MS = 500;
// Buzzer pattern timing
const unsigned long BUZZER_ON_MS = 180;
const unsigned long BUZZER_OFF_MS = 220;
bool leakAlarm = false;
unsigned long wetStartMs = 0;
unsigned long dryStartMs = 0;
unsigned long lastStatusPrintMs = 0;
unsigned long buzzerToggleMs = 0;
bool buzzerState = false;
void setRelayAlarmState(bool alarmActive) {
// For shutoff wiring using COM + NC:
// alarmActive should cause the relay to switch away from NC.
bool relayEnergized = alarmActive;
if (RELAY_ACTIVE_LOW) {
digitalWrite(RELAY_PIN, relayEnergized ? LOW : HIGH);
} else {
digitalWrite(RELAY_PIN, relayEnergized ? HIGH : LOW);
}
}
void setBuzzer(bool on) {
if (on) {
tone(BUZZER_PIN, 2400); // 2.4 kHz tone
} else {
noTone(BUZZER_PIN);
}
}
void printState(const char* stateName, int sensorValue) {
Serial.print("State: ");
Serial.print(stateName);
Serial.print(" | sensor=");
Serial.print(sensorValue);
Serial.print(" | relay_alarm=");
Serial.println(leakAlarm ? "ON" : "OFF");
}
void setup() {
pinMode(RELAY_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
// Default safe startup for this tutorial:
// no alarm until a confirmed leak is detected.
leakAlarm = false;
setRelayAlarmState(leakAlarm);
setBuzzer(false);
Serial.begin(9600);
delay(300);
Serial.println("Water leak shutoff relay controller starting...");
Serial.println("Using analog leak sensing on A0");
Serial.println("Check dry and wet readings before final installation.");
// Initialize timing references
wetStartMs = 0;
dryStartMs = 0;
lastStatusPrintMs = 0;
buzzerToggleMs = 0;
buzzerState = false;
}
void loop() {
unsigned long now = millis();
int sensorValue = analogRead(SENSOR_PIN);
bool wetCandidate = (sensorValue <= LEAK_THRESHOLD_WET);
bool dryCandidate = (sensorValue >= LEAK_THRESHOLD_DRY);
// Leak detection state machine with hysteresis and timing confirmation
if (!leakAlarm) {
if (wetCandidate) {
if (wetStartMs == 0) {
wetStartMs = now;
}
if (now - wetStartMs >= WET_CONFIRM_MS) {
leakAlarm = true;
dryStartMs = 0;
setRelayAlarmState(leakAlarm);
Serial.println("LEAK DETECTED: relay shutoff activated");
printState("LEAK", sensorValue);
}
} else {
wetStartMs = 0;
}
} else {
if (dryCandidate) {
if (dryStartMs == 0) {
dryStartMs = now;
}
if (now - dryStartMs >= DRY_CONFIRM_MS) {
leakAlarm = false;
wetStartMs = 0;
setRelayAlarmState(leakAlarm);
setBuzzer(false);
buzzerState = false;
Serial.println("RESET TO DRY: relay returned to normal");
printState("DRY", sensorValue);
}
} else {
dryStartMs = 0;
}
}
// Buzzer pattern during active alarm
if (leakAlarm) {
if (now - buzzerToggleMs >= (buzzerState ? BUZZER_ON_MS : BUZZER_OFF_MS)) {
buzzerState = !buzzerState;
setBuzzer(buzzerState);
buzzerToggleMs = now;
}
} else {
if (buzzerState) {
buzzerState = false;
setBuzzer(false);
}
}
// Periodic status prints
if (now - lastStatusPrintMs >= STATUS_PRINT_MS) {
printState(leakAlarm ? "LEAK" : "DRY", sensorValue);
lastStatusPrintMs = now;
}
delay(20);
}
Cómo calibrar el umbral si tu sensor se comporta de forma diferente
Muchas placas económicas de sensor de fuga cambian el valor analógico cuando están mojadas, pero la dirección y el rango pueden variar.
Antes del uso final:
- Carga el sketch tal como está.
- Abre el monitor serie.
- Anota las lecturas analógicas:
- completamente seco
- ligeramente húmedo
- claramente mojado
- Ajusta:
LEAK_THRESHOLD_WETLEAK_THRESHOLD_DRY
Usa una separación entre ellos para crear histéresis, lo que ayuda a evitar conmutaciones rápidas.
Ejemplo de edición de umbral si tu sensor está seco cerca de 850 y mojado cerca de 300:
const int LEAK_THRESHOLD_WET = 450;
const int LEAK_THRESHOLD_DRY = 700;
Comandos de compilación/carga/ejecución
Tabla de comandos
| Tarea | Comando |
|---|---|
| Actualizar índice de placas | arduino-cli core update-index |
| Instalar núcleo AVR | arduino-cli core install arduino:avr |
| Compilar sketch | arduino-cli compile --fqbn arduino:avr:uno ./water_leak_shutoff_relay |
| Cargar sketch | arduino-cli upload --fqbn arduino:avr:uno --port <PORT> ./water_leak_shutoff_relay |
| Lista opcional de placas | arduino-cli board list |
| Monitor serie opcional | arduino-cli monitor --port <PORT> --config 9600 |
Flujo de trabajo
- Crea una carpeta de proyecto llamada
water_leak_shutoff_relay. - Guarda el sketch como:
water_leak_shutoff_relay/water_leak_shutoff_relay.ino- Ejecuta los comandos requeridos:
arduino-cli core update-index
arduino-cli core install arduino:avr
arduino-cli compile --fqbn arduino:avr:uno ./water_leak_shutoff_relay
arduino-cli upload --fqbn arduino:avr:uno --port <PORT> ./water_leak_shutoff_relay
- Busca tu puerto serie si es necesario:
- Ejemplo Linux:
/dev/ttyACM0 - Ejemplo Windows:
COM4 - Ejemplo macOS:
/dev/cu.usbmodem14101 - Abre un monitor serie a 9600 baudios para observar lecturas y cambios de estado.
Validación paso a paso
Usa estos puntos de control en orden. Cada punto de control incluye la observación esperada y la condición de aprobación.
1. Verificación de encendido y estado inactivo
- Acción:
- Alimenta el Arduino por USB.
- Mantén el sensor seco y sin tocar metal ni agua.
- Observación esperada:
- El monitor serie imprime texto de inicio.
- Las líneas de estado repetidas muestran
State: DRY. - El zumbador permanece en silencio.
- El relé permanece en su estado normal sin alarma.
- Condición de aprobación:
- No ocurre ninguna alarma mientras el sensor permanece seco durante al menos 30 segundos.
2. Captura de línea base de lectura en seco
- Acción:
- Observa los valores
sensor=impresos durante 10 a 20 segundos. - Anota el rango seco típico.
- Observación esperada:
- Los valores del sensor se mantienen bastante consistentes con pequeñas fluctuaciones.
- Condición de aprobación:
- Las lecturas en seco permanecen claramente en un lado de
LEAK_THRESHOLD_DRY. - Si no, debes recalibrar los umbrales antes de continuar.
3. Prueba controlada de activación por humedad
- Acción:
- Pon unas gotas de agua en el área de detección, o tócala con una toalla de papel húmeda.
- Observación esperada:
- El valor del sensor cruza el umbral de mojado.
- Después de aproximadamente
WET_CONFIRM_MS, el monitor serie imprimeLEAK DETECTED. - El zumbador empieza a pulsar.
- El relé cambia de estado.
- Condición de aprobación:
- La alarma no es instantánea por ruido, pero sí se activa de forma fiable cuando el sensor está realmente mojado.
4. Verificación del comportamiento del relé de corte
- Acción:
- Conecta un circuito de prueba seguro de baja tensión a través de los contactos del relé, preferiblemente usando COM + NC para funcionamiento normal con paso y apertura en alarma.
- Repite la prueba de activación por humedad.
- Observación esperada:
- En estado seco, el circuito externo de baja tensión está completo.
- En estado de fuga, el circuito se interrumpe.
- Condición de aprobación:
- Los contactos del relé realizan la función de corte prevista de forma consistente durante al menos 5 ciclos de prueba.
5. Verificación de recuperación en seco y anti-rebote
- Acción:
- Retira el agua y seca bien el sensor.
- Observa si el sistema se restablece solo después de una sequedad estable.
- Observación esperada:
- El zumbador continúa hasta que el sensor vuelve por encima de
LEAK_THRESHOLD_DRYdurante aproximadamenteDRY_CONFIRM_MS. - Entonces el serie imprime
RESET TO DRY. - El relé vuelve a su estado normal.
- Condición de aprobación:
- No hay clics rápidos del relé ni conmutaciones falsas repetidas durante la transición de secado.
Resolución de problemas
| Síntoma | Causa probable | Solución |
|---|---|---|
| El relé parece invertido: el corte ocurre en estado seco | La polaridad de entrada del relé o la elección de contactos es la opuesta a la esperada | Cambia RELAY_ACTIVE_LOW, o mueve la carga de NO a NC según corresponda |
| El sensor siempre indica mojado | Umbral demasiado alto, sensor contaminado o agua ya puenteando las pistas | Limpia y seca el sensor, inspecciona las lecturas, baja el umbral de mojado |
| El sensor nunca se activa con agua | Umbral demasiado bajo, pin equivocado usado o malentendido del tipo de salida del sensor | Confirma que AO esté conectado a A0, observa los valores serie cuando esté mojado, ajusta los umbrales |
| El zumbador no suena | Polaridad incorrecta del zumbador, incompatibilidad entre tipo pasivo/activo o error de cableado | Vuelve a comprobar D9 y GND, prueba el zumbador por separado, asegúrate de usar un zumbador compatible con tone() |
| El relé vibra cerca del umbral | Valores ruidosos del sensor o histéresis insuficiente | Aumenta la separación entre los umbrales de mojado y seco; aumenta los tiempos de confirmación |
| La carga falla | Puerto incorrecto o falta el núcleo AVR | Ejecuta arduino-cli board list, verifica <PORT>, vuelve a ejecutar la instalación del núcleo |
| La salida serie es ilegible | Velocidad en baudios incorrecta | Configura el monitor a 9600 baudios |
| El módulo de relé reinicia el Arduino o se comporta de forma extraña | Problema de consumo/ruido o cableado deficiente | Mantén el cableado corto, asegúrate de tener conexiones sólidas de 5 V/GND, prueba los módulos individualmente |
Mejoras
Fiabilidad y calidad de instalación
- Añade una bandeja para sensor o monta el sensor en el punto más bajo donde el agua se acumularía primero.
- Usa un segundo sensor de fuga en lógica en paralelo para cobertura de dos zonas, como uno bajo un fregadero y otro detrás de un electrodoméstico.
- Añade un modo de alarma enclavada para que, una vez detectada una fuga, se requiera un reinicio manual incluso después del secado.
- Coloca el Arduino y el relé en una pequeña carcasa, con el sensor en un cable que se extienda hasta el área supervisada.
Mejor comportamiento de control
- Añade un botón de prueba manual para simular una fuga sin usar agua.
- Añade un botón de silencio que silencie el zumbador pero mantenga el relé en estado de corte.
- Registra conteos de eventos o marcas de tiempo por serie para que un estudiante pueda documentar ciclos de prueba repetidos.
Integración más segura en el mundo real
- Usa el relé para controlar solo una válvula de baja tensión o interfaz de control, no cableado desconocido de alta potencia.
- Sustituye el zumbador piezoeléctrico por un zumbador montado en panel para una alerta audible más clara.
- Si más adelante se añade una válvula de corte real, elige una válvula que tenga un comportamiento a prueba de fallos claro y una tensión de control compatible.
Lista de verificación final
- [ ] Usé Arduino UNO R3 (ATmega328P) + sensor de fuga de agua + módulo de relé de 1 canal + zumbador piezoeléctrico.
- [ ] El sensor está cableado a A0, la entrada del relé a D8, el zumbador a D9.
- [ ] Conecté todas las tierras juntas.
- [ ] Guardé el sketch como
water_leak_shutoff_relay.ino. - [ ] Ejecuté:
- [ ]
arduino-cli core update-index - [ ]
arduino-cli core install arduino:avr - [ ]
arduino-cli compile --fqbn arduino:avr:uno ./water_leak_shutoff_relay - [ ]
arduino-cli upload --fqbn arduino:avr:uno --port <PORT> ./water_leak_shutoff_relay - [ ] Verifiqué las lecturas serie en estado seco.
- [ ] Calibré
LEAK_THRESHOLD_WETyLEAK_THRESHOLD_DRYsi fue necesario. - [ ] Probé la detección de fuga con una pequeña cantidad de agua controlada.
- [ ] Confirmé que el patrón del zumbador se activa durante una fuga.
- [ ] Confirmé que el relé interrumpe la ruta de control de baja tensión prevista durante una fuga.
- [ ] Sequé el sensor y verifiqué una recuperación limpia al estado normal.
- [ ] Entiendo que esto es un prototipo educativo, no un sistema de seguridad certificado.
Encuentra este producto y/o libros sobre este tema en Amazon
Como afiliado de Amazon, gano con las compras que cumplan los requisitos. Si compras a través de este enlace, ayudas a mantener este proyecto.




