Se rendre au contenu

Variateur AC multicanal : guide 2CH et 4CH

Besoin de piloter deux ou quatre charges AC indépendamment depuis une seule carte ? Les modules variateurs multicanaux partagent une seule entrée de passage par zéro mais offrent à chaque charge sa propre broche DIM — voici le câblage et le code.

En bref : Les modules 2CH 8A et 4CH 10A partagent une broche ZC pour tous les canaux. Chaque canal a sa propre broche DIM. Un seul appel d'interruption dans le code couvre tous les canaux ; la luminosité se règle indépendamment par descripteur de canal. Utilisez rbdimmerESP32 sur ESP32 double cœur, RBDdimmer sur Arduino/ESP8266.



Ce que fournissent les modules multicanaux

Module Canaux Max. par canal Partagé
2CH 8A 2 8A / ~1 300W sous 220V Broche ZC, AC-N
4CH 10A 4 10A / ~1 700W sous 220V Broche ZC, AC-N

Chaque canal pilote une charge AC indépendamment. Le détecteur de passage par zéro est partagé — une seule interruption MCU dessert tous les canaux.



Câblage


2CH 8A — affectation des broches

text
Module   →   MCU (exemple ESP32)
────────────────────────────────
ZC-OUT   →   GPIO 4   (interruption, tout GPIO sur ESP32)
DIM1     →   GPIO 16  (canal 1)
DIM2     →   GPIO 17  (canal 2)
VCC      →   3.3V
GND      →   GND

Côté AC : les deux canaux partagent le neutre (AC-N). Chaque canal dispose de ses propres AC L-IN et AC L-OUT connectés en série avec sa charge.

Full wiring diagrams: Hardware Connection Guide


4CH 10A — affectation des broches

text
Module   →   MCU (exemple ESP32)
────────────────────────────────
ZC-OUT   →   GPIO 4
DIM1     →   GPIO 16
DIM2     →   GPIO 17
DIM3     →   GPIO 18
DIM4     →   GPIO 19
VCC      →   3.3V
GND      →   GND

⚠️ Une seule broche ZC pour tous les canaux. Connectez ZC-OUT à une seule broche d'interruption du MCU. Dans le code, enregistrez le passage par zéro une fois — il s'applique à tous les canaux du module.




Code : ESP32 (rbdimmerESP32)

Utilisez rbdimmerESP32 sur ESP32 double cœur et ESP32-S3. La bibliothèque gère automatiquement IRAM_ATTR et l'affectation aux cœurs — l'ISR s'exécute sur le Core 0 tandis que le WiFi tourne sur le Core 1, évitant les plantages.


Exemple 2 canaux

cpp
// rbdimmerESP32 — 2 canaux indépendants, passage par zéro partagé
// Docs : rbdimmer.com/docs/universal-library-for-esp32
#include "rbdimmerESP32.h"
#define ZC_PIN    4
#define DIM1_PIN  16
#define DIM2_PIN  17
rbdimmer_channel_t ch1, ch2;
void setup() {
    rbdimmer_init();
    rbdimmer_register_zero_cross(ZC_PIN, RBDIMMER_PHASE_DEFAULT);
    rbdimmer_config_t cfg1 = {
        .gpio_pin     = DIM1_PIN,
        .phase        = RBDIMMER_PHASE_DEFAULT,
        .initial_level = 0,
        .curve_type   = RBDIMMER_CURVE_RMS
    };
    rbdimmer_config_t cfg2 = {
        .gpio_pin     = DIM2_PIN,
        .phase        = RBDIMMER_PHASE_DEFAULT,
        .initial_level = 0,
        .curve_type   = RBDIMMER_CURVE_RMS
    };
    rbdimmer_create_channel(&cfg1, &ch1);
    rbdimmer_create_channel(&cfg2, &ch2);
    // Régler la luminosité de chaque canal indépendamment
    rbdimmer_set_level(ch1, 80);  // Canal 1 → 80%
    rbdimmer_set_level(ch2, 40);  // Canal 2 → 40%
}
void loop() {
    // Modifier les niveaux à l'exécution selon les besoins
    // rbdimmer_set_level(ch1, newLevel);
}


Exemple 4 canaux

cpp
#include "rbdimmerESP32.h"
#define ZC_PIN    4
const uint8_t DIM_PINS[4] = {16, 17, 18, 19};
rbdimmer_channel_t channels[4];
void setup() {
    rbdimmer_init();
    rbdimmer_register_zero_cross(ZC_PIN, RBDIMMER_PHASE_DEFAULT);
    for (int i = 0; i < 4; i++) {
        rbdimmer_config_t cfg = {
            .gpio_pin      = DIM_PINS[i],
            .phase         = RBDIMMER_PHASE_DEFAULT,
            .initial_level = 0,
            .curve_type    = RBDIMMER_CURVE_RMS
        };
        rbdimmer_create_channel(&cfg, &channels[i]);
    }
    // Exemple : luminosité en escalier
    rbdimmer_set_level(channels[0], 100);
    rbdimmer_set_level(channels[1], 75);
    rbdimmer_set_level(channels[2], 50);
    rbdimmer_set_level(channels[3], 25);
}


Courbes de variation

Courbe Constante Idéale pour
Linéaire RBDIMMER_CURVE_LINEAR Éléments chauffants
RMS RBDIMMER_CURVE_RMS Ampoules à incandescence
Logarithmique RBDIMMER_CURVE_LOGARITHMIC Ampoules LED dimmables



Code : Arduino / ESP8266 (RBDdimmer)

Utilisez RBDdimmer pour les cartes Arduino à base d'ATmega et ESP8266.

⚠️ Do not use RBDdimmer on ESP32 with WiFi active — the ISR lacks IRAM_ATTR and causes crashes. Use rbdimmerESP32 instead. See: Wrong Library: RBDdimmer vs rbdimmerESP32


Arduino Uno/Nano — 2 canaux

cpp
// RBDdimmer — 2 canaux sur Arduino Uno/Nano
// La broche ZC DOIT être la broche 2 ou 3 sur Uno/Nano (INT0/INT1)
#include <RBDdimmer.h>
#define ZC_PIN    2   // Broche d'interruption matérielle
#define DIM1_PIN  5
#define DIM2_PIN  6
// Le premier variateur enregistre la broche de passage par zéro
dimmerLamp dimmer1(DIM1_PIN, ZC_PIN);
// Les variateurs suivants partagent le signal ZC de dimmer1
dimmerLamp dimmer2(DIM2_PIN);
void setup() {
    dimmer1.begin(NORMAL_MODE, ON);
    dimmer2.begin(NORMAL_MODE, ON);
    dimmer1.setPower(80);  // Canal 1 → 80%
    dimmer2.setPower(40);  // Canal 2 → 40%
}
void loop() {
    // Aucun appel spécial nécessaire en NORMAL_MODE
}


Arduino Mega — options de broche ZC

Sur le Mega, la broche ZC peut être 2, 3, 18, 19, 20 ou 21. Le module 4CH fonctionne de la même manière — déclarez chaque canal après le premier :

cpp
dimmerLamp dimmer1(DIM1_PIN, ZC_PIN);  // ZC défini ici
dimmerLamp dimmer2(DIM2_PIN);
dimmerLamp dimmer3(DIM3_PIN);
dimmerLamp dimmer4(DIM4_PIN);


ESP8266 — multicanal

ESP8266 utilise RBDdimmer avec le même schéma : le premier dimmerLamp définit la broche ZC ; les suivants la partagent automatiquement.

cpp
// RBDdimmer — 2 canaux sur ESP8266 (NodeMCU)
#include <RBDdimmer.h>
#define ZC_PIN   5   // D1
#define DIM1_PIN 4   // D2
#define DIM2_PIN 14  // D5
dimmerLamp dimmer1(DIM1_PIN, ZC_PIN);
dimmerLamp dimmer2(DIM2_PIN);  // partage le ZC de dimmer1
void setup() {
    dimmer1.begin(NORMAL_MODE, ON);
    dimmer2.begin(NORMAL_MODE, ON);
    dimmer1.setPower(80);
    dimmer2.setPower(40);
}
void loop() {}



Contrôle à l'exécution

Les deux bibliothèques permettent de modifier la luminosité à l'exécution :

cpp
// rbdimmerESP32
rbdimmer_set_level(ch1, 60);
// Avec transition progressive (rbdimmerESP32)
// signature : (canal, niveau_cible_pct, durée_ms)
rbdimmer_set_level_transition(ch1, 60, 2000); // → 60% en 2 000 ms
// RBDdimmer
dimmer1.setPower(60);



Erreurs fréquentes

Erreur Solution
Broches ZC séparées par canal Utiliser une broche ZC, un seul enregistrement
RBDdimmer sur ESP32+WiFi Utiliser rbdimmerESP32
ZC sur broche sans interruption (Uno) Utiliser broche 2 ou 3 sur Uno/Nano
Surcharge d'un canal Vérifier le calibre du module : 8A ou 10A par canal
Broches DIM câblées dans le mauvais ordre Les charges échangent les canaux ; réaffecter les GPIO



Articles connexes



Encore des questions ?

Ask on forum.rbdimmer.com or open a GitHub Issue.

Partager cet article
Se connecter pour laisser un commentaire.