In sintesi: Impostare il dimmer allo 0% non garantisce lo spegnimento della lampada. La corrente di mantenimento del TRIAC mantiene la conduzione con carichi bassi. Soluzione: chiamare
dimmer.setState(OFF)osetMode(OFF_MODE)invece disetPower(0)— oppure aggiungere un relè per la disconnessione galvanica completa. DimmerLink arresta tutti gli impulsi di gate al livello 0, eliminando il problema via software.
Come si manifesta il problema
Si chiama setPower(0) o si imposta brightness: 0 nell'automazione.
Il carico dovrebbe essere spento. Invece:
- una lampada a incandescenza o alogena continua a brillare debolmente;
- la lampada può sfarfallare lentamente (1–4 Hz) al livello «zero»;
- il comportamento peggiora con lampade di bassa potenza (25–40 W) e scompare con 100 W+.
Questo non è un errore di codice. È una proprietà fondamentale dei circuiti TRIAC nell'interazione con piccoli carichi resistivi.
Cause fondamentali
Causa 1 — Corrente di mantenimento del TRIAC
Un TRIAC (Triode for Alternating Current) conduce in entrambi i semicicli AC dopo l'innesco. Per smettere di condurre deve raggiungere naturalmente il passaggio per lo zero — e la corrente attraverso il carico al momento del passaggio deve scendere al di sotto della corrente di mantenimento (I_H) del dispositivo.
Corrente di mantenimento tipica per un BTA16 o BT138 TRIAC: 25–80 mA.
Con una lampada da 25 W a 230 V:
I_load = 25 W / 230 V ≈ 109 mA (picco durante la conduzione)A un angolo di taglio di fase molto piccolo (vicino allo 0%, cioè vicino al passaggio per lo zero), l'impulso di corrente è così breve che scende sotto I_H prima che il TRIAC abbia il tempo di agganciarsi. Risultato: in alcuni semicicli il TRIAC si apre, in altri no — producendo uno sfarfallio lento e irregolare o un bagliore costante debole.
Causa 2 — Corrente di dispersione dell'optoaccoppiatore
L'optoaccoppiatore di pilotaggio del TRIAC (MOC3041, MOC3021 o equivalente) lascia passare una piccola corrente di dispersione (tipicamente 1–5 mA) anche quando il LED interno è spento. Per una lampada da 100 W questo è invisibile. Per una lampada LED da 10 W o una lampada a incandescenza da 25 W, la dispersione da sola può essere sufficiente per mantenere un bagliore.
Causa 3 — Impulso minimo della libreria allo 0%
Sia RBDdimmer che rbdimmerESP32 impongono un angolo di innesco minimo
diverso da zero per evitare instabilità hardware vicino ai passaggi per lo zero.
La chiamata a setPower(0) può comunque generare un impulso di gate molto breve
ad ogni semiciclo. Il carico riceve quindi un piccolo burst di potenza —
insufficiente per accendere una lampadina da 100 W, ma visibile su una lampada da 25 W.
La soluzione è commutare la libreria in modalità OFF, non semplicemente impostare la potenza a 0.
Diagnosi del problema
- Verificare la potenza — sostituire la lampada da 25–40 W con una a incandescenza da 100 W. Se il bagliore scompare, la corrente di mantenimento è la causa.
- Scollegare il MCU — staccare tutti i segnali di controllo (DIM, ZC, VCC, GND lato MCU). Se la lampada continua a brillare, la corrente di dispersione è la causa; se si spegne, la libreria sta inviando impulsi residui.
- Verificare la chiamata API — cercare
setPower(0)nel codice. Confermare di non aver dimenticato una chiamata asetState(OFF).
Soluzioni
🟢 Per principianti — Usare DimmerLink o un relè
DimmerLink gestisce l'innesco del gate nel proprio firmware (Cortex-M0+).
Al livello 0 non genera impulsi di gate — il TRIAC non viene innescato
indipendentemente dalla dispersione. Scrivere 0 nel registro 0x10 (DIM0_LEVEL)
e la lampada si spegne completamente.
// Arduino / ESP32 — DimmerLink I2C
Wire.beginTransmission(0x50);
Wire.write(0x10); // registro DIM0_LEVEL
Wire.write(0); // 0% — nessun impulso di gate
Wire.endTransmission();Aggiungere un relè se il carico deve essere completamente disalimentato (isolamento galvanico). Collegare un relè normalmente aperto (o SSR) in serie con l'AC-IN del dimmer. Aprire il relè quando il carico deve essere spento; chiuderlo per abilitare la dimmerizzazione:
// Esempio Arduino
const int RELAY_PIN = 7;
void setLoad(bool on, uint8_t level) {
if (!on) {
dimmer.setState(OFF);
digitalWrite(RELAY_PIN, LOW); // relè aperto — completamente spento
} else {
digitalWrite(RELAY_PIN, HIGH); // relè chiuso — percorso AC attivo
delay(5); // attendere la stabilizzazione dei contatti
dimmer.setState(ON);
dimmer.setPower(level);
}
}🔵 Per utenti avanzati — Soluzioni software e hardware
Opzione A — Usare la corretta modalità OFF (software)
setPower(0) imposta l'angolo di innesco vicino a zero ma può comunque generare
un impulso. Il modo corretto per spegnere completamente il carico è cambiare
la modalità operativa:
rbdimmerESP32 / RBDdimmer:
#include <rbdimmerESP32.h> // o RBDdimmer.h per AVR/ESP8266
rbdimmer::Dimmer dimmer(DIM_PIN, ZC_PIN);
void setup() {
dimmer.begin(NORMAL_MODE, ON);
dimmer.setPower(50);
}
void turnOff() {
// Corretto: commutare la modalità su OFF — nessun impulso di gate
dimmer.setState(OFF);
// Errato: dimmer.setPower(0) — può comunque innescare
}
void turnOn(uint8_t level) {
dimmer.setState(ON);
dimmer.setPower(level);
}Se la versione della libreria usa
setMode():
dimmer.setMode(OFF_MODE); // spegne
dimmer.setMode(NORMAL_MODE); // riprende la dimmerizzazioneComponente ESPHome ac_dimmer:
Il componente ac_dimmer di ESPHome imposta output: false per inibire
completamente gli impulsi di gate:
output:
- platform: ac_dimmer
id: triac_output
gate_pin: GPIO4
zero_cross_pin: GPIO5
light:
- platform: monochromatic
output: triac_output
name: "Lamp"
# Quando HA invia un comando di spegnimento, il componente arresta gli impulsi di gate.Quando Home Assistant invia un comando di spegnimento, ESPHome arresta completamente gli impulsi di gate — il TRIAC non viene innescato e la lampada si spegne.
Opzione B — Circuito RC snubber (hardware)
Un circuito RC snubber collegato in parallelo al TRIAC riduce la velocità di salita della tensione (dV/dt) ai capi del dispositivo dopo un passaggio per lo zero. Questo aiuta il TRIAC ad autocommutarsi in modo affidabile ad angoli di conduzione piccoli.
Anodo/catodo del TRIAC
┌──────────┐
│ TRIAC │
└──────────┘
│ ← in parallelo: 100 Ω (0,5 W) + 100 nF classe X2
└── R ── C ── ┘Valori standard dello snubber: R = 100 Ω (0,5 W) e C = 100 nF, classe X2 (dimensionato per la tensione di rete).
La maggior parte dei moduli rbdimmer include già uno snubber integrato. Verificare lo schema del modulo prima di aggiungerne uno esterno.
Un circuito RC snubber non elimina completamente il problema — rende lo spegnimento del TRIAC più affidabile, ma la dispersione dell'optoaccoppiatore persiste.
Opzione C — Relè in serie per disconnessione completa
Se il carico deve essere completamente disalimentato (requisito di sicurezza o carico induttivo), aggiungere un relè in serie:
| Scenario | Tipo di relè | Nota |
|---|---|---|
| Carichi normali | Relè SPST NO | Aperto = nessun percorso AC |
| Induttivi (motori) | Relè SPST NO | Soppressione dell'arco raccomandata |
| Isolamento dalla rete richiesto | SSR (relè a stato solido) | Nessuna parte mobile |
Usare il dimmer per il controllo di potenza e il relè per accensione/spegnimento:
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);
}
}Matrice di compatibilità dei carichi
| Carico | Sintomo allo 0% | Causa | Soluzione |
|---|---|---|---|
| Incandescenza 100 W+ | Nessun bagliore | Carico sufficiente | setState(OFF) sufficiente |
| Incandescenza 25–40 W | Bagliore debole | Corrente di mantenimento | setState(OFF) o relè |
| Alogena 50 W | Bagliore o sfarfallio lento | Corrente di mantenimento | RC snubber + setState(OFF) |
| Alogena 12 V (trasformatore) | Bagliore | Corrente reattiva | Relè per disconnessione completa |
| Elemento riscaldante | Nessun bagliore | Carico resistivo | setState(OFF) sufficiente |
Errori frequenti
| Errore | Effetto | Soluzione |
|---|---|---|
Chiamare setPower(0) invece di setState(OFF) |
Impulso residuo ad ogni semiciclo | Usare setState(OFF) |
| Presumere che 0% = spento per lampade di bassa potenza | Bagliore o sfarfallio | Usare la modalità OFF |
| Aggiungere uno snubber sottodimensionato (resistore < 0,5 W) | Surriscaldamento dello snubber | Usare un resistore da 0,5 W o 1 W |
| Usare un relè senza protezione d'arco su carichi induttivi | Saldatura dei contatti | Aggiungere snubber sui contatti del relè |
Checklist rapida
Prima di sostituire l'hardware, verificare in quest'ordine:
Articoli correlati
- 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
Hai ancora domande?
Ask on forum.rbdimmer.com or open a GitHub Issue.