Zum Inhalt springen

Mehrkanalige AC-Dimmer-Steuerung: 2CH- und 4CH-Anleitung

Zwei oder vier AC-Lasten unabhängig von einer Platine steuern? Mehrkanalige Dimmer-Module teilen sich einen Nulldurchgangseingang, geben aber jeder Last einen eigenen DIM-Pin — hier die Verdrahtung und der Code.

Kurzfassung: 2CH-8A- und 4CH-10A-Module teilen sich einen ZC-Pin über alle Kanäle. Jeder Kanal hat seinen eigenen DIM-Pin. Ein Interrupt-Aufruf im Code deckt alle Kanäle ab; Helligkeit wird pro Kanal-Handle unabhängig gesetzt. Verwenden Sie rbdimmerESP32 auf Dual-Core-ESP32, RBDdimmer auf Arduino/ESP8266.



Was mehrkanalige Module bieten

Modul Kanäle Max. pro Kanal Gemeinsam
2CH 8A 2 8A / ~1 300W bei 220V ZC-Pin, AC-N
4CH 10A 4 10A / ~1 700W bei 220V ZC-Pin, AC-N

Jeder Kanal steuert eine AC-Last unabhängig. Der Nulldurchgangsdetektor ist gemeinsam — ein MCU-Interrupt bedient alle Kanäle.



Verdrahtung


2CH 8A — Pin-Zuordnung

text
Modul    →   MCU (ESP32-Beispiel)
────────────────────────────────
ZC-OUT   →   GPIO 4   (Interrupt, beliebiger GPIO auf ESP32)
DIM1     →   GPIO 16  (Kanal 1)
DIM2     →   GPIO 17  (Kanal 2)
VCC      →   3.3V
GND      →   GND

AC-Seite: Beide Kanäle teilen sich den Neutralleiter (AC-N). Jeder Kanal hat eigene AC-L-IN- und AC-L-OUT-Anschlüsse in Reihe mit seiner Last.

Full wiring diagrams: Hardware Connection Guide


4CH 10A — Pin-Zuordnung

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

⚠️ Ein ZC-Pin für alle Kanäle. Verbinden Sie ZC-OUT mit einem einzigen MCU-Interrupt-Pin. Im Code den Nulldurchgang einmal registrieren — er gilt für jeden Kanal des Moduls.




Code: ESP32 (rbdimmerESP32)

Verwenden Sie rbdimmerESP32 auf Dual-Core-ESP32 und ESP32-S3. Die Bibliothek handhabt IRAM_ATTR und Core-Pinning automatisch — die ISR läuft auf Core 0, WiFi auf Core 1, was Abstürze verhindert.


2-Kanal-Beispiel

cpp
// rbdimmerESP32 — 2 unabhängige Kanäle, gemeinsamer Nulldurchgang
// 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);
    // Helligkeit jedes Kanals unabhängig setzen
    rbdimmer_set_level(ch1, 80);  // Kanal 1 → 80%
    rbdimmer_set_level(ch2, 40);  // Kanal 2 → 40%
}
void loop() {
    // Level zur Laufzeit nach Bedarf ändern
    // rbdimmer_set_level(ch1, newLevel);
}


4-Kanal-Beispiel

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]);
    }
    // Beispiel: abgestufte Helligkeit
    rbdimmer_set_level(channels[0], 100);
    rbdimmer_set_level(channels[1], 75);
    rbdimmer_set_level(channels[2], 50);
    rbdimmer_set_level(channels[3], 25);
}


Dimmkurven

Kurve Konstante Geeignet für
Linear RBDIMMER_CURVE_LINEAR Heizelemente
RMS RBDIMMER_CURVE_RMS Glühlampen
Logarithmisch RBDIMMER_CURVE_LOGARITHMIC Dimmbare LED-Lampen



Code: Arduino / ESP8266 (RBDdimmer)

Verwenden Sie RBDdimmer für ATmega-basierte Arduino-Platinen und 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 Kanäle

cpp
// RBDdimmer — 2 Kanäle auf Arduino Uno/Nano
// ZC-Pin MUSS Pin 2 oder Pin 3 auf Uno/Nano sein (INT0/INT1)
#include <RBDdimmer.h>
#define ZC_PIN    2   // Hardware-Interrupt-Pin
#define DIM1_PIN  5
#define DIM2_PIN  6
// Erster Dimmer registriert den Nulldurchgangs-Pin
dimmerLamp dimmer1(DIM1_PIN, ZC_PIN);
// Nachfolgende Dimmer teilen das ZC-Signal von dimmer1
dimmerLamp dimmer2(DIM2_PIN);
void setup() {
    dimmer1.begin(NORMAL_MODE, ON);
    dimmer2.begin(NORMAL_MODE, ON);
    dimmer1.setPower(80);  // Kanal 1 → 80%
    dimmer2.setPower(40);  // Kanal 2 → 40%
}
void loop() {
    // Kein spezieller Aufruf in NORMAL_MODE erforderlich
}


Arduino Mega — ZC-Pin-Optionen

Beim Mega kann ZC Pin 2, 3, 18, 19, 20 oder 21 sein. Das 4CH-Modul funktioniert genauso — deklarieren Sie jeden Kanal nach dem ersten:

cpp
dimmerLamp dimmer1(DIM1_PIN, ZC_PIN);  // ZC wird hier gesetzt
dimmerLamp dimmer2(DIM2_PIN);
dimmerLamp dimmer3(DIM3_PIN);
dimmerLamp dimmer4(DIM4_PIN);


ESP8266 — Mehrkanal

ESP8266 verwendet RBDdimmer mit dem gleichen Muster: Der erste dimmerLamp setzt den ZC-Pin; nachfolgende teilen ihn automatisch.

cpp
// RBDdimmer — 2 Kanäle auf 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);  // teilt ZC von dimmer1
void setup() {
    dimmer1.begin(NORMAL_MODE, ON);
    dimmer2.begin(NORMAL_MODE, ON);
    dimmer1.setPower(80);
    dimmer2.setPower(40);
}
void loop() {}



Laufzeitsteuerung

Beide Bibliotheken erlauben Helligkeitsänderungen zur Laufzeit:

cpp
// rbdimmerESP32
rbdimmer_set_level(ch1, 60);
// Mit sanftem Übergang (rbdimmerESP32)
// Signatur: (Kanal, Ziel_Level_Prozent, Dauer_ms)
rbdimmer_set_level_transition(ch1, 60, 2000); // → 60% über 2 000 ms
// RBDdimmer
dimmer1.setPower(60);



Häufige Fehler

Fehler Lösung
Separate ZC-Pins pro Kanal Einen ZC-Pin, eine Registrierung verwenden
RBDdimmer auf ESP32+WiFi rbdimmerESP32 verwenden
ZC auf Nicht-Interrupt-Pin (Uno) Pin 2 oder 3 auf Uno/Nano verwenden
Kanal überlastet Modul-Nennwert prüfen: 8A oder 10A pro Kanal
DIM-Pins in falscher Reihenfolge verdrahtet Lasten tauschen Kanäle; GPIO neu zuordnen



Verwandte Artikel



Noch Fragen?

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

Diesen Beitrag teilen
Anmelden , um einen Kommentar zu hinterlassen