En résumé : Régler le variateur à 0% ne garantit pas l'extinction de la lampe. Le courant de maintien du TRIAC maintient la conduction pour les faibles charges. Solution : appelez
dimmer.setState(OFF)ousetMode(OFF_MODE)au lieu desetPower(0)— ou ajoutez un relais pour une déconnexion galvanique complète. DimmerLink arrête toutes les impulsions de gâchette au niveau 0, éliminant le problème par logiciel.
À quoi ressemble le problème
Vous appelez setPower(0) ou définissez brightness: 0 dans votre automatisation.
La charge devrait être éteinte. À la place :
- une lampe à incandescence ou halogène continue de briller faiblement ;
- la lampe peut scintiller lentement (1–4 Hz) au niveau « zéro » ;
- le phénomène est plus marqué avec les lampes de faible puissance (25–40 W) et disparaît à partir de 100 W+.
Ce n'est pas une erreur de code. C'est une propriété fondamentale des circuits TRIAC en interaction avec de petites charges résistives.
Causes profondes
Cause 1 — Courant de maintien du TRIAC
Un TRIAC (Triode for Alternating Current) conduit dans les deux demi-périodes AC après déclenchement. Pour arrêter de conduire, il doit naturellement atteindre le passage par zéro — et le courant dans la charge au moment du passage doit descendre en dessous du courant de maintien (I_H) du composant.
Courant de maintien typique pour un BTA16 ou BT138 TRIAC : 25–80 mA.
Avec une lampe de 25 W à 230 V :
I_load = 25 W / 230 V ≈ 109 mA (crête pendant la conduction)À un angle de découpe de phase très petit (proche de 0%, c'est-à-dire proche du passage par zéro), l'impulsion de courant est si brève qu'elle chute sous I_H avant que le TRIAC n'ait le temps de se verrouiller. Résultat : certaines demi-périodes le TRIAC s'ouvre, d'autres non — produisant un scintillement lent et irrégulier ou une lueur constante faible.
Cause 2 — Courant de fuite de l'optocoupleur
L'optocoupleur de commande du TRIAC (MOC3041, MOC3021 ou équivalent) laisse passer un faible courant de fuite (typiquement 1–5 mA) même quand la LED interne est éteinte. Pour une lampe de 100 W c'est invisible. Pour une lampe LED de 10 W ou une lampe à incandescence de 25 W, la fuite seule peut suffire à entretenir une lueur.
Cause 3 — Impulsion minimale de la bibliothèque à 0%
Les bibliothèques RBDdimmer et rbdimmerESP32 imposent un angle de
déclenchement minimum non nul pour éviter l'instabilité matérielle près des
passages par zéro. L'appel à setPower(0) peut quand même générer une très courte
impulsion de gâchette à chaque demi-période. La charge reçoit donc une infime
bouffée de puissance — insuffisante pour allumer une ampoule de 100 W,
mais visible sur une lampe de 25 W.
La solution est de basculer le mode de la bibliothèque sur OFF, pas simplement de régler la puissance à 0.
Diagnostic du problème
- Vérifier la puissance — remplacez la lampe de 25–40 W par une lampe à incandescence de 100 W. Si la lueur disparaît, le courant de maintien en est la cause.
- Déconnecter le MCU — débranchez tous les signaux de commande (DIM, ZC, VCC, GND côté MCU). Si la lampe brille encore, le courant de fuite en est la cause ; si elle s'éteint, la bibliothèque envoie des impulsions résiduelles.
- Vérifier l'appel API — cherchez
setPower(0)dans votre code. Confirmez que vous n'avez pas oublié un appel àsetState(OFF).
Solutions
🟢 Pour les débutants — Utiliser DimmerLink ou un relais
DimmerLink gère le déclenchement de la gâchette dans son propre firmware (Cortex-M0+).
Au niveau 0, il ne génère aucune impulsion de gâchette — le TRIAC n'est pas
déclenché indépendamment de la fuite. Écrivez 0 dans le registre 0x10 (DIM0_LEVEL)
et la lampe s'éteint complètement.
// Arduino / ESP32 — DimmerLink I2C
Wire.beginTransmission(0x50);
Wire.write(0x10); // registre DIM0_LEVEL
Wire.write(0); // 0% — aucune impulsion de gâchette
Wire.endTransmission();Ajoutez un relais si la charge doit être complètement hors tension (isolation galvanique). Connectez un relais normalement ouvert (ou SSR) en série avec l'AC-IN du variateur. Ouvrez le relais quand la charge doit être éteinte ; fermez-le pour activer la variation :
// Exemple Arduino
const int RELAY_PIN = 7;
void setLoad(bool on, uint8_t level) {
if (!on) {
dimmer.setState(OFF);
digitalWrite(RELAY_PIN, LOW); // relais ouvert — complètement éteint
} else {
digitalWrite(RELAY_PIN, HIGH); // relais fermé — chemin AC actif
delay(5); // attendre la stabilisation des contacts
dimmer.setState(ON);
dimmer.setPower(level);
}
}🔵 Pour les utilisateurs avancés — Solutions logicielles et matérielles
Option A — Utiliser le bon mode OFF (logiciel)
setPower(0) règle l'angle de déclenchement à quasi zéro mais peut encore
générer une impulsion. La bonne méthode pour éteindre complètement la charge
est de changer le mode de fonctionnement :
rbdimmerESP32 / RBDdimmer :
#include <rbdimmerESP32.h> // ou RBDdimmer.h pour AVR/ESP8266
rbdimmer::Dimmer dimmer(DIM_PIN, ZC_PIN);
void setup() {
dimmer.begin(NORMAL_MODE, ON);
dimmer.setPower(50);
}
void turnOff() {
// Correct : basculer le mode sur OFF — aucune impulsion de gâchette
dimmer.setState(OFF);
// Incorrect : dimmer.setPower(0) — peut encore déclencher
}
void turnOn(uint8_t level) {
dimmer.setState(ON);
dimmer.setPower(level);
}Si votre version de la bibliothèque utilise
setMode():
dimmer.setMode(OFF_MODE); // éteint
dimmer.setMode(NORMAL_MODE); // reprend la variationComposant ESPHome ac_dimmer :
Le composant ac_dimmer d'ESPHome définit output: false pour inhiber
complètement les impulsions de gâchette :
output:
- platform: ac_dimmer
id: triac_output
gate_pin: GPIO4
zero_cross_pin: GPIO5
light:
- platform: monochromatic
output: triac_output
name: "Lamp"
# Quand HA envoie une commande d'extinction, le composant arrête les impulsions de gâchette.Quand Home Assistant envoie une commande d'extinction, ESPHome arrête complètement les impulsions de gâchette — le TRIAC n'est pas déclenché et la lampe s'éteint.
Option B — Circuit RC snubber (matériel)
Un circuit RC snubber connecté en parallèle avec le TRIAC réduit la vitesse de montée en tension (dV/dt) aux bornes du composant après un passage par zéro. Cela aide le TRIAC à se commuter de manière fiable aux petits angles de conduction.
Anode/cathode du TRIAC
┌──────────┐
│ TRIAC │
└──────────┘
│ ← en parallèle : 100 Ω (0,5 W) + 100 nF classe X2
└── R ── C ── ┘Valeurs standard du snubber : R = 100 Ω (0,5 W) et C = 100 nF, classe X2 (prévu pour la tension secteur).
La plupart des modules rbdimmer intègrent déjà un snubber. Vérifiez le schéma de votre module avant d'en ajouter un externe.
Un circuit RC snubber n'élimine pas complètement le problème — il rend l'extinction du TRIAC plus fiable, mais le courant de fuite de l'optocoupleur persiste.
Option C — Relais en série pour déconnexion complète
Si la charge doit être complètement hors tension (exigence de sécurité ou charge inductive), ajoutez un relais en série :
| Scénario | Type de relais | Remarque |
|---|---|---|
| Charges normales | Relais SPST NO | Ouvert = pas de chemin AC |
| Inductives (moteurs) | Relais SPST NO | Suppression d'arc recommandée |
| Isolation secteur requise | SSR (relais statique) | Pas de pièces mobiles |
Utilisez le variateur pour le contrôle de puissance et le relais pour le marche/arrêt :
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 de compatibilité des charges
| Charge | Symptôme à 0% | Cause | Solution |
|---|---|---|---|
| Incandescente 100 W+ | Pas de lueur | Charge suffisante | setState(OFF) suffit |
| Incandescente 25–40 W | Lueur faible | Courant de maintien | setState(OFF) ou relais |
| Halogène 50 W | Lueur ou scintillement lent | Courant de maintien | RC snubber + setState(OFF) |
| Halogène 12 V (transformateur) | Lueur | Courant réactif | Relais pour déconnexion complète |
| Élément chauffant | Pas de lueur | Charge résistive | setState(OFF) suffit |
Erreurs fréquentes
| Erreur | Effet | Solution |
|---|---|---|
Appeler setPower(0) au lieu de setState(OFF) |
Impulsion résiduelle à chaque demi-période | Utiliser setState(OFF) |
| Supposer que 0% = éteint pour les lampes de faible puissance | Lueur ou scintillement | Utiliser le mode OFF |
| Ajouter un snubber sous-dimensionné (résistance < 0,5 W) | Surchauffe du snubber | Utiliser une résistance de 0,5 W ou 1 W |
| Utiliser un relais sans protection d'arc sur charges inductives | Soudure des contacts | Ajouter un snubber sur les contacts du relais |
Checklist rapide
Avant de remplacer du matériel, vérifiez dans l'ordre :
Articles connexes
- 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
Encore des questions ?
Ask on forum.rbdimmer.com or open a GitHub Issue.