Zum Inhalt springen

← Tasmota-Konfiguration | Inhaltsverzeichnis

Arduino IDE-Bibliothek



Version 1.0 – 2019

Sie entwickeln ein Arduino-Projekt? Arduino-Bibliothek: ESP32/8266, STM32, Arduino-Boards. Code-Beispiele.

Info
Dimmer-Bibliothek herunterladen: RBDDimmer



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.

Info
Dimmer-Bibliothek herunterladen: RBDDimmer

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):

cpp
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):

cpp
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:

cpp
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 freigeben
  • OFF — Timer-Parameter ausschalten, Dimmer sperren


3. Funktion setPower

Setzt den Dimmwert von 0 bis 100 %:

cpp
dimmer.setPower(90);


4. Funktion getPower

Gibt den aktuellen Dimmwert aus:

cpp
Serial.print(dimmer.getPower()); // Result 0~100 int


5. Funktion setMode

Setzt und ändert den Betriebsmodus:

cpp
dimmer.setMode(NORMAL_MODE/TOGGLE_MODE);


6. Funktion getMode

Gibt den aktuellen Betriebsmodus aus:

cpp
Serial.print(dimmer.getMode()); // Result 0 (NORMAL_MODE) or 1 (TOGGLE_MODE)


7. Funktion setState

Setzt den Dimmer-Status ON/OFF:

cpp
dimmer.setState(ON);
delay(100);
dimmer.setState(OFF);


8. Funktion getState

Gibt den aktuellen Status des Dimmers aus:

cpp
Serial.print(dimmer.getState()); // Result 0 (OFF) or 1 (ON)


9. Funktion changeState

Wechselt den Dimmer-Status auf den jeweils entgegengesetzten Wert:

cpp
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 in dimmer.setPower(outVal)
cpp
#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 angeschlossen
  • void loop() — EIN/AUS-Taster-Auswertung für den Dimmer in dimmer.setState(ON/OFF)
cpp
#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 map auf 0 bis 100 % umgerechnet und in dimmer.setPower(outVal) gespeichert
cpp
#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:

cpp
#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:

cpp
#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

cpp
#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

cpp
#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);
  // ...
}

← Tasmota-Konfiguration | Inhaltsverzeichnis