Resumen: Establecer el dimmer al 0% no garantiza que la lámpara se apague. La corriente de mantenimiento del TRIAC mantiene la conducción en cargas bajas. Solución: llame a
dimmer.setState(OFF)osetMode(OFF_MODE)en lugar desetPower(0)— o añada un relé para desconexión galvánica completa. DimmerLink detiene todos los pulsos de compuerta en el nivel 0, eliminando el problema por software.
Cómo se manifiesta el problema
Usted llama a setPower(0) o establece brightness: 0 en su automatización.
La carga debería estar apagada. En su lugar:
- una lámpara incandescente o halógena sigue brillando tenuemente;
- la lámpara puede parpadear lentamente (1–4 Hz) en el nivel «cero»;
- el comportamiento empeora con lámparas de baja potencia (25–40 W) y desaparece con 100 W+.
Esto no es un error de código. Es una propiedad fundamental de los circuitos TRIAC al interactuar con cargas resistivas pequeñas.
Causas fundamentales
Causa 1 — Corriente de mantenimiento del TRIAC
Un TRIAC (Triode for Alternating Current) conduce en ambos semiciclos AC una vez disparado. Para dejar de conducir debe alcanzar naturalmente el cruce por cero — y la corriente a través de la carga en el momento del cruce debe caer por debajo de la corriente de mantenimiento (I_H) del dispositivo.
Corriente de mantenimiento típica para un BTA16 o BT138 TRIAC: 25–80 mA.
Con una lámpara de 25 W a 230 V:
I_load = 25 W / 230 V ≈ 109 mA (pico durante la conducción)A un ángulo de corte de fase muy pequeño (cercano al 0%, es decir, cerca del cruce por cero), el pulso de corriente es tan breve que cae por debajo de I_H antes de que el TRIAC tenga tiempo de engancharse. Resultado: en algunos semiciclos el TRIAC se abre, en otros no — produciendo un parpadeo lento e irregular o un brillo tenue constante.
Causa 2 — Corriente de fuga del optoacoplador
El optoacoplador del controlador TRIAC (MOC3041, MOC3021 o equivalente) deja pasar una pequeña corriente de fuga (típicamente 1–5 mA) incluso cuando el LED interno está apagado. Para una lámpara de 100 W esto es invisible. Para una lámpara LED de 10 W o una incandescente de 25 W, la fuga por sí sola puede ser suficiente para mantener el brillo.
Causa 3 — Pulso mínimo de la biblioteca al 0%
Tanto RBDdimmer como rbdimmerESP32 imponen un ángulo de disparo mínimo
distinto de cero para evitar inestabilidad del hardware cerca de los cruces por cero.
Llamar a setPower(0) puede seguir generando un pulso de compuerta muy corto
en cada semiciclo. La carga, por tanto, recibe una pequeña ráfaga de potencia —
insuficiente para encender una bombilla de 100 W, pero visible en una lámpara de 25 W.
La solución es cambiar el modo de la biblioteca a OFF, no solo establecer la potencia en 0.
Diagnóstico del problema
- Verificar la potencia — reemplace la lámpara de 25–40 W por una incandescente de 100 W. Si el brillo desaparece, la corriente de mantenimiento es la causa.
- Desconectar el MCU — desenchufe todas las señales de control (DIM, ZC, VCC, GND del lado MCU). Si la lámpara sigue brillando, la corriente de fuga es la causa; si se apaga, la biblioteca está enviando pulsos residuales.
- Verificar la llamada API — busque
setPower(0)en su código. Confirme que no le falta una llamada asetState(OFF).
Soluciones
🟢 Para principiantes — Use DimmerLink o un relé
DimmerLink gestiona el disparo de la compuerta en su propio firmware (Cortex-M0+).
En el nivel 0 no genera pulsos de compuerta — el TRIAC no se dispara
independientemente de la fuga. Escriba 0 en el registro 0x10 (DIM0_LEVEL)
y la lámpara se apaga completamente.
// Arduino / ESP32 — DimmerLink I2C
Wire.beginTransmission(0x50);
Wire.write(0x10); // registro DIM0_LEVEL
Wire.write(0); // 0% — sin pulsos de compuerta
Wire.endTransmission();Añada un relé si la carga debe estar completamente desenergizada (aislamiento galvánico). Conecte un relé normalmente abierto (o SSR) en serie con el AC-IN del dimmer. Abra el relé cuando la carga deba estar apagada; ciérrelo para habilitar la atenuación:
// Ejemplo Arduino
const int RELAY_PIN = 7;
void setLoad(bool on, uint8_t level) {
if (!on) {
dimmer.setState(OFF);
digitalWrite(RELAY_PIN, LOW); // relé abierto — completamente apagado
} else {
digitalWrite(RELAY_PIN, HIGH); // relé cerrado — ruta AC activa
delay(5); // esperar estabilización de contactos
dimmer.setState(ON);
dimmer.setPower(level);
}
}🔵 Para usuarios avanzados — Soluciones de software y hardware
Opción A — Usar el modo OFF correcto (software)
setPower(0) establece el ángulo de disparo cerca de cero pero puede seguir
generando un pulso. La forma correcta de apagar completamente la carga es
cambiar el modo de operación:
rbdimmerESP32 / RBDdimmer:
#include <rbdimmerESP32.h> // o RBDdimmer.h para AVR/ESP8266
rbdimmer::Dimmer dimmer(DIM_PIN, ZC_PIN);
void setup() {
dimmer.begin(NORMAL_MODE, ON);
dimmer.setPower(50);
}
void turnOff() {
// Correcto: cambiar modo a OFF — sin pulsos de compuerta
dimmer.setState(OFF);
// Incorrecto: dimmer.setPower(0) — puede seguir disparando
}
void turnOn(uint8_t level) {
dimmer.setState(ON);
dimmer.setPower(level);
}Si su versión de la biblioteca usa
setMode():
dimmer.setMode(OFF_MODE); // apaga
dimmer.setMode(NORMAL_MODE); // reanuda la atenuaciónComponente ESPHome ac_dimmer:
El componente ac_dimmer de ESPHome establece output: false para inhibir
completamente los pulsos de compuerta:
output:
- platform: ac_dimmer
id: triac_output
gate_pin: GPIO4
zero_cross_pin: GPIO5
light:
- platform: monochromatic
output: triac_output
name: "Lamp"
# Cuando HA envía un comando de apagado, el componente detiene los pulsos de compuerta.Cuando Home Assistant envía un comando de apagado, ESPHome detiene completamente los pulsos de compuerta — el TRIAC no se dispara y la lámpara se apaga.
Opción B — Circuito RC snubber (hardware)
Un circuito RC snubber conectado en paralelo con el TRIAC reduce la velocidad de subida del voltaje (dV/dt) a través del dispositivo después de un cruce por cero. Esto ayuda al TRIAC a autoconmutar de forma fiable en ángulos de conducción pequeños.
Ánodo/cátodo del TRIAC
┌──────────┐
│ TRIAC │
└──────────┘
│ ← en paralelo: 100 Ω (0,5 W) + 100 nF clase X2
└── R ── C ── ┘Valores estándar del snubber: R = 100 Ω (0,5 W) y C = 100 nF, clase X2 (dimensionado para voltaje de red).
La mayoría de los módulos rbdimmer ya incluyen un snubber integrado. Verifique el esquema de su módulo antes de añadir uno externo.
Un circuito RC snubber no elimina el problema completamente — hace que el apagado del TRIAC sea más fiable, pero la fuga del optoacoplador persiste.
Opción C — Relé en serie para desconexión completa
Si la carga debe estar completamente desenergizada (requisito de seguridad o carga inductiva), añada un relé en serie:
| Escenario | Tipo de relé | Nota |
|---|---|---|
| Cargas normales | Relé SPST NO | Abierto = sin ruta AC |
| Inductivas (motores) | Relé SPST NO | Supresión de arco recomendada |
| Aislamiento de red requerido | SSR (relé de estado sólido) | Sin partes móviles |
Use el dimmer para el control de potencia y el relé para encendido/apagado:
void loop() {
if (targetLevel == 0) {
dimmer.setState(OFF);
digitalWrite(RELAY_PIN, LOW);
} else {
digitalWrite(RELAY_PIN, HIGH);
delay(5);
dimmer.setState(ON);
dimmer.setPower(targetLevel);
}
}Matriz de compatibilidad de cargas
| Carga | Síntoma al 0% | Causa | Solución |
|---|---|---|---|
| Incandescente 100 W+ | Sin brillo | Carga suficiente | setState(OFF) suficiente |
| Incandescente 25–40 W | Brillo tenue | Corriente de mantenimiento | setState(OFF) o relé |
| Halógena 50 W | Brillo o parpadeo lento | Corriente de mantenimiento | RC snubber + setState(OFF) |
| Halógena 12 V (transformador) | Brillo | Corriente reactiva | Relé para desconexión completa |
| Elemento calefactor | Sin brillo | Carga resistiva | setState(OFF) suficiente |
Errores frecuentes
| Error | Efecto | Solución |
|---|---|---|
Llamar a setPower(0) en lugar de setState(OFF) |
Pulso residual en cada semiciclo | Usar setState(OFF) |
| Asumir que 0% = apagado para lámparas de baja potencia | Brillo o parpadeo | Usar modo OFF |
| Añadir un snubber subdimensionado (resistencia < 0,5 W) | Sobrecalentamiento del snubber | Usar resistencia de 0,5 W o 1 W |
| Usar relé sin protección de arco en cargas inductivas | Soldadura de contactos | Añadir snubber en los contactos del relé |
Checklist rápido
Antes de reemplazar hardware, verifique en este orden:
Artículos relacionados
- Flickering at low brightness → AC Dimmer Flickering at Low Brightness
- Safety and wiring → AC Dimmer Safety: Mains Voltage, Isolation, and Wiring
- Choosing a dimmer → AC Dimmer Buyer's Guide
- LED-specific flicker → LED Flickering with AC Dimmer
¿Todavía tienes preguntas?
Ask on forum.rbdimmer.com or open a GitHub Issue.