← Tasmota-Konfiguration | Inhaltsverzeichnis
Arduino IDE-Bibliothek
Version 1.0 – 2019
Sie entwickeln ein Arduino-Projekt? Arduino-Bibliothek: ESP32/8266, STM32, Arduino-Boards. Code-Beispiele.
Anschluss I/O
Der Dimmer wird über zwei digitale Pins mit Arduino-Controllern verbunden:
- Erster Pin (Zero) — zur Erkennung des Nulldurchgangs der AC-Phase, der das Interrupt-Signal auslöst
- Zweiter Pin (DIM/PSM) — zur Steuerung (Dimmen) des Stroms
Der Zero-Pin muss an bestimmte Microcontroller-Pins angeschlossen werden (die je nach Modell — Uno, Nano, Leonardo und Mega — unterschiedlich sind), da er mit den Microcontroller-Interrupts verknüpft ist.
Die Spannung des Dimmer-VCC muss dem Logikpegel des Microcontrollers entsprechen:
- 5 V für Uno, Nano, Leonardo und Mega
- 3,3 V für STM32, ESP32, ESP8266
Verbindungstabelle
| Board | INPUT-Pin Nulldurchgang | OUTPUT-Pin |
|---|---|---|
| Leonardo | D7 (NICHT ÄNDERBAR) | D0–D6, D8–D13 |
| Mega | D2 (NICHT ÄNDERBAR) | D0–D1, D3–D70 |
| UNO / NANO | D2 (NICHT ÄNDERBAR) | D0–D1, D3–D20 |
| ESP8266 | D1(GPIO5), D5(GPIO14), D7(GPIO13), D2(GPIO4), D6(GPIO12), D8(GPIO15) | D0(GPIO16), D2(GPIO4), D6(GPIO12), D8(GPIO15), D1(GPIO5), D5(GPIO14), D7(GPIO13) |
| ESP32 | GPIO: 36, 39, 32, 25, 27, 12, 7, 2, 4, 17, 18, 21, 22, 34, 35, 33, 26, 14, 13, 15, 0, 16, 5, 19, 1, 23 | GPIO: 32, 25, 27, 12, 15, 0, 16, 5, 19, 3, 22, 33, 26, 14, 13, 2, 4, 17, 18, 21, 1, 23 |
| Arduino M0 / Arduino Zero | D7 (NICHT ÄNDERBAR) | D0–D6, D8–D13 |
| Arduino Due | D0–D53 | D0–D53 |
| STM32, Blue Pill (STM32F1) | PA0–PA15, PB0–PB15, PC13–PC15 | PA0–PA15, PB0–PB15, PC13–PC15 |
Bibliothek und Funktionen
In Arduino wird der Dimmer über die Bibliothek RBDdimmer.h gesteuert, die externe Interrupts und Timer-Interrupts nutzt. Sie vereinfacht das Schreiben des Codes und gibt dem Hauptprogramm mehr Rechenzeit. Dadurch lassen sich mehrere Dimmer von einem einzigen Microcontroller aus steuern.
Die Bibliothek enthält einige Beispiele. Da wir die Bibliothek kontinuierlich weiterentwickeln, empfehlen wir, regelmäßig auf Website-Updates zu achten oder unseren Newsletter zu abonnieren.
Die Bibliothek vereinfacht den Benutzercode durch folgende Funktionen:
1. Funktion dimmerLamp
Diese Funktion initialisiert den verwendeten Pin und wird vom Benutzer definiert:
a. Für Boards OHNE wählbaren ZERO-CROSS-Eingangspin (AVR, Arduino M0/Zero):
dimmerLamp dimmer(4); // dimmer output DIM/PSM is initialized on the pin 4
b. Für Boards mit wählbarem Nulldurchgangspin (ESP32, ESP8266, Arduino Due):
dimmerLamp dimmer(4, 2); // dimmer output DIM/PSM on pin 4, zero-cross on pin 2
2. Funktion begin
Initialisierung von Port, Timer und externem Interrupt vom Nulldurchgang:
dimmer.begin(NORMAL_MODE, ON/OFF);
Parameter 1: Betriebsmodus des Dimmers:
NORMAL_MODE— Dimmer arbeitet mit einem fest definierten Wert von 0 bis 100 (%)- Beispiel:
\RBDdimmer\examples\SimpleDimmer TOGGLE_MODE— gleichmäßige Änderung des Dimmwerts auf und ab in einem definierten Bereich- Beispiel:
\RBDdimmer\examples\SimpleToggleDimmer
Parameter 2: ON/OFF:
ON— Timer einschalten, Dimmer freigebenOFF— Timer-Parameter ausschalten, Dimmer sperren
3. Funktion setPower
Setzt den Dimmwert von 0 bis 100 %:
dimmer.setPower(90);
4. Funktion getPower
Gibt den aktuellen Dimmwert aus:
Serial.print(dimmer.getPower()); // Result 0~100 int
5. Funktion setMode
Setzt und ändert den Betriebsmodus:
dimmer.setMode(NORMAL_MODE/TOGGLE_MODE);
6. Funktion getMode
Gibt den aktuellen Betriebsmodus aus:
Serial.print(dimmer.getMode()); // Result 0 (NORMAL_MODE) or 1 (TOGGLE_MODE)
7. Funktion setState
Setzt den Dimmer-Status ON/OFF:
dimmer.setState(ON);
delay(100);
dimmer.setState(OFF);
8. Funktion getState
Gibt den aktuellen Status des Dimmers aus:
Serial.print(dimmer.getState()); // Result 0 (OFF) or 1 (ON)
9. Funktion changeState
Wechselt den Dimmer-Status auf den jeweils entgegengesetzten Wert:
dimmer.setState(ON);
delay(100);
dimmer.changeState();
delay(100);
10. Funktion toggleSettings
Gleichmäßige Änderung des Dimmwerts auf und ab in einem definierten Bereich:
Beispiel: \RBDdimmer\examples\SimpleToggleDimmer
Beispiele
Beispiel: Dimmwert über den seriellen Port
Dieses Sketch dient dazu, den Dimmwert über den seriellen Port des Controllers einzustellen:
- Verwendung von
USE_SERIAL.begin - Die Funktion
void printSpace()fügt nach den Funktionsdaten ein Leerzeichen ein void loop()wertet den seriellen Port aus und schreibt die Werte indimmer.setPower(outVal)
#include
#define outputPin 12
#define zerocross 5 // for boards with CHANGEABLE input pins
// For ESP8266, ESP32, Arduino due boards
// dimmerLamp dimmer(outputPin, zerocross);
// For MEGA, Leonardo, UNO, Arduino M0, Arduino Zero
dimmerLamp dimmer(outputPin);
int buttonRed = 0;
void setup() {
dimmer.begin(NORMAL_MODE, ON); // dimmer initialisation: name.begin(MODE, STATE)
dimmer.setPower(50);
pinMode(14, INPUT);
}
void loop() {
button = digitalRead(14);
if (button == 1)
{
delay(50);
dimmer.setState(ON); // .setState(ON/OFF);
}
if (button == 0)
{
delay(50);
dimmer.setState(OFF); // .setState(ON/OFF);
}
}
Beispiel: EIN/AUS-Schaltung
Dieses Sketch schaltet die Lampe über einen Taster ein und aus:
pinMode(14, INPUT)— der Taster ist an Pin 14 angeschlossenvoid loop()— EIN/AUS-Taster-Auswertung für den Dimmer indimmer.setState(ON/OFF)
#include
#define outputPin 12
#define zerocross 5 // for boards with CHANGEABLE input pins
// For ESP8266, ESP32, Arduino due boards
// dimmerLamp dimmer(outputPin, zerocross);
// For MEGA, Leonardo, UNO, Arduino M0, Arduino Zero
dimmerLamp dimmer(outputPin);
int buttonRed = 0;
void setup() {
dimmer.begin(NORMAL_MODE, ON); // dimmer initialisation: name.begin(MODE, STATE)
dimmer.setPower(50);
pinMode(14, INPUT);
}
void loop() {
button = digitalRead(14);
if (button == 1)
{
delay(50);
dimmer.setState(ON); // .setState(ON/OFF);
}
if (button == 0)
{
delay(50);
dimmer.setState(OFF); // .setState(ON/OFF);
}
}
Beispiel: Dimmen mit einem Potentiometer
Dieses Sketch ermöglicht die Einstellung des Dimmwerts über ein Potentiometer:
- Die Potentiometerwerte ändern sich im Bereich von 0 bis 1023
- Die Potentiometerwerte werden mit der Funktion
mapauf 0 bis 100 % umgerechnet und indimmer.setPower(outVal)gespeichert
#include
#define outputPin 12
#define zerocross 5 // for boards with CHANGEABLE input pins
// For ESP8266, ESP32, Arduino due boards
// dimmerLamp dimmer(outputPin, zerocross);
// For MEGA, Leonardo, UNO, Arduino M0, Arduino Zero
dimmerLamp dimmer(outputPin);
int outVal = 0;
void setup()
{
dimmer.begin(NORMAL_MODE, ON); // dimmer initialisation: name.begin(MODE, STATE)
}
void loop()
{
outVal = map(analogRead(0), 1, 1024, 100, 0); // analogRead(analog_pin), min, max, 100%, 0%
dimmer.setPower(outVal); // name.setPower(0%-100%)
}
Beispiel: Toggle-Dimming
Dieses Sketch realisiert durch eine Funktion die gleichmäßige Änderung des Dimmwerts in einem definierten Wertebereich.
Die Werte werden im Bereich von 0 bis 100 % definiert:
#include
#define outputPin 12
#define zerocross 5 // for boards with CHANGEABLE input pins
// For ESP8266, ESP32, Arduino due boards
// dimmerLamp dimmer(outputPin, zerocross);
// For MEGA, Leonardo, UNO, Arduino M0, Arduino Zero
dimmerLamp dimmer(outputPin);
void setup() {
dimmer.begin(TOGGLE_MODE, OFF); // dimmer initialisation: name.begin(MODE, STATE)
dimmer.toggleSettings(0, 70); // Name.toggleSettings(MIN, MAX);
dimmer.setState(ON); // state: dimmer1.setState(ON/OFF);
}
void loop() {
// ...
dimmer.setState(ON); // set power to MAX value
// ...
dimmer.setState(OFF); // set power to MIN value
}
Beispiel: Sanftes Dimmen per Tastendruck
Dieses Sketch schaltet den Dimmer nach Drücken des ersten Tasters sanft ein und nach Drücken des zweiten Tasters sanft aus:
#include
#define outputPin 12
#define zerocross 5 // for boards with CHANGEABLE input pins
#define LAMPMAXVALUE 100
// For ESP8266, ESP32, Arduino due boards
// dimmerLamp dimmer(outputPin, zerocross);
// For MEGA, Leonardo, UNO, Arduino M0, Arduino Zero
dimmerLamp dimmer(outputPin);
int stateL = 0, valLamp;
int mainLamp = 0;
int buttonRed = 0;
int buttonBlue = 0;
bool setLamp = true;
void setup() {
dimmer.begin(NORMAL_MODE, ON); // dimmer initialisation: name.begin(MODE, STATE)
// ...
}
void RiseFallLamp(bool RiseFallInt)
{
if ((RiseFallInt == true) && (mainLamp < LAMPMAXVALUE)) mainLamp++;
else if ((RiseFallInt != true) && (mainLamp > 0)) mainLamp--;
}
bool setLampState(int val)
{
bool ret;
if (val >= 1) ret = true;
else ret = false;
return ret;
}
void readButtonState()
{
buttonRed = digitalRead(13);
buttonBlue = digitalRead(15);
if (buttonRed < 1) stateL++;
if (buttonBlue < 1) stateL--;
if (stateL < 0) stateL = 0;
if (stateL > 1) stateL = 1;
}
void loop() {
readButtonState();
dimmer.setPower(mainLamp); // setPower(0-100%);
RiseFallLamp(setLampState(stateL));
delay(25);
}
Anschluss von zwei oder mehr Dimmern
Z-C (ZeroCross): ZC pin needs only for 1st dimmer. For the next dimmers don't need to connect Z-C.
An jeden Dimmer muss der jeweilige Dim-Pin angeschlossen werden.
Beispielcode
#define outputPin1 12 // Dim pin for dimmer 1
#define outputPin2 11 // Dim pin for dimmer 2
#define outputPin3 10 // Dim pin for dimmer 3
#define zerocross 5 // for boards with CHANGEABLE input pin
// For ESP8266, ESP32, STM32, Arduino due boards
// dimmerLamp dimmer1(outputPin1, zerocross);
// dimmerLamp dimmer2(outputPin2, zerocross);
// For MEGA, Leonardo, UNO, Arduino M0, Arduino Zero
dimmerLamp dimmer1(outputPin1); // initialise port for dimmer 1
dimmerLamp dimmer2(outputPin2); // initialise port for dimmer 2
dimmerLamp dimmer3(outputPin3); // initialise port for dimmer 3
void setup() {
dimmer1.begin(NORMAL_MODE, ON);
dimmer2.begin(NORMAL_MODE, ON);
dimmer3.begin(NORMAL_MODE, ON);
}
void loop() {
// ...
dimmer1.setPower(outVal1);
dimmer2.setPower(outVal2);
dimmer3.setPower(outVal3);
// ...
}
2- und 4-kanalige Dimmer an einphasigem AC
Die 2- und 4-kanaligen Dimmer verfügen über 1 ZC- und 2 bzw. 4 Dim-Pins.
Mehr-Kanal-Codebeispiel
#define outputPin1 12 // Dim pin for dimmer 1
#define outputPin2 11 // Dim pin for dimmer 2
#define outputPin3 10 // Dim pin for dimmer 3
#define outputPin4 9 // Dim pin for dimmer 4
#define zerocross 5 // for boards with CHANGEABLE input pin
// For ESP8266, ESP32, Arduino due boards
// dimmerLamp dimmer1(outputPin1, zerocross);
// dimmerLamp dimmer2(outputPin2, zerocross);
// For MEGA, Leonardo, UNO, Arduino M0, Arduino Zero
dimmerLamp dimmer1(outputPin1); // initialise port for dimmer 1
dimmerLamp dimmer2(outputPin2); // initialise port for dimmer 2
dimmerLamp dimmer3(outputPin3); // initialise port for dimmer 3
dimmerLamp dimmer4(outputPin4); // initialise port for dimmer 4
void setup() {
dimmer1.begin(NORMAL_MODE, ON);
dimmer2.begin(NORMAL_MODE, ON);
dimmer3.begin(NORMAL_MODE, ON);
dimmer4.begin(NORMAL_MODE, ON);
}
void loop() {
// ...
dimmer1.setPower(outVal1);
dimmer2.setPower(outVal2);
dimmer3.setPower(outVal3);
dimmer4.setPower(outVal4);
// ...
}