Se rendre au contenu

← Configuration Tasmota | Sommaire

Bibliothèque Arduino IDE



Version 1.0 — 2019

Vous développez un projet Arduino ? Bibliothèque Arduino : ESP32/8266, STM32, cartes Arduino. Exemples de code.

Info
Télécharger la bibliothèque variateur : RBDDimmer



Connexion I/O

Le variateur est connecté aux contrôleurs Arduino via deux broches numériques :

  • Première broche (Zero) — pour détecter le passage par zéro de la phase AC, utilisé pour déclencher le signal d'interruption
  • Deuxième broche (DIM/PSM) — pour contrôler (varier) le courant

La broche Zero doit être connectée à des broches spécifiques du microcontrôleur (qui varient selon le modèle — Uno, Nano, Leonardo et Mega), car elle est liée aux interruptions du microcontrôleur.

La tension du VCC du variateur doit correspondre au niveau logique du microcontrôleur :

  • 5 V pour Uno, Nano, Leonardo et Mega
  • 3,3 V pour STM32, ESP32, ESP8266


Tableau de connexion

Carte Broche INPUT Passage par zéro Broche OUTPUT
Leonardo D7 (NON MODIFIABLE) D0-D6, D8-D13
Mega D2 (NON MODIFIABLE) D0-D1, D3-D70
UNO / NANO D2 (NON MODIFIABLE) 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 (NON MODIFIABLE) 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



Bibliothèque et fonctions

Dans Arduino, le variateur est contrôlé via la bibliothèque RBDdimmer.h, qui utilise des interruptions externes et des interruptions de timer. Cela simplifie l'écriture du code et libère davantage de temps processeur pour le code principal. C'est pourquoi vous pouvez contrôler plusieurs variateurs depuis un seul microcontrôleur.

Info
Télécharger la bibliothèque variateur : RBDDimmer

La bibliothèque contient quelques exemples. Nous mettons constamment à jour notre bibliothèque ; nous vous recommandons de vérifier régulièrement les mises à jour sur le site web ou de vous abonner à notre newsletter.

Cette bibliothèque simplifie le code utilisateur grâce aux fonctions suivantes :


1. Fonction dimmerLamp

Cette fonction initialise le numéro de broche utilisé et est définie par l'utilisateur :

a. Pour les cartes SANS broche d'entrée ZERO-CROSS modifiable (AVR, Arduino M0/Zero) :

cpp
dimmerLamp dimmer(4); // dimmer output DIM/PSM is initialized on the pin 4

b. Pour les cartes avec passage par zéro modifiable (ESP32, ESP8266, Arduino Due) :

cpp
dimmerLamp dimmer(4, 2); // dimmer output DIM/PSM on pin 4, zero-cross on pin 2


2. Fonction begin

Initialisation du port, du timer et de l'interruption externe depuis le passage par zéro :

cpp
dimmer.begin(NORMAL_MODE, ON/OFF);

Paramètre 1 : modes de fonctionnement du variateur :

  • NORMAL_MODE — fait fonctionner le variateur à une valeur définie de 0 à 100 (%)
  • Exemple : \RBDdimmer\examples\SimpleDimmer
  • TOGGLE_MODE — variation progressive de la valeur vers le haut ou vers le bas dans une plage définie
  • Exemple : \RBDdimmer\examples\SimpleToggleDimmer

Paramètre 2 : ON/OFF :

  • ON — active le timer, permet l'utilisation du variateur
  • OFF — désactive les paramètres du timer, empêche l'utilisation du variateur


3. Fonction setPower

Définit la valeur de variation de 0 à 100 % :

cpp
dimmer.setPower(90);


4. Fonction getPower

Affiche la valeur de variation actuelle :

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


5. Fonction setMode

Définit et change le mode de fonctionnement :

cpp
dimmer.setMode(NORMAL_MODE/TOGGLE_MODE);


6. Fonction getMode

Affiche la valeur du mode de fonctionnement actuel :

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


7. Fonction setState

Définit l'état du variateur ON/OFF :

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


8. Fonction getState

Affiche l'état actuel du variateur :

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


9. Fonction changeState

Bascule l'état du variateur vers l'état opposé :

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


10. Fonction toggleSettings

Variation progressive de la valeur vers le haut ou vers le bas dans une plage définie :

Exemple : \RBDdimmer\examples\SimpleToggleDimmer



Exemples


Exemple : valeur de variation via le port série

Ce sketch permet de définir la valeur de variation via le port série du contrôleur :

  • Utilisation de USE_SERIAL.begin
  • La fonction void printSpace() sert à ajouter un espace après les données fonctionnelles
  • void loop() évalue le port série et définit les valeurs dans 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);
  }
}


Exemple : marche/arrêt

Ce sketch permet d'allumer et d'éteindre la lampe avec un bouton :

  • pinMode(14, INPUT) — le bouton est connecté à la broche 14
  • void loop() — évaluation du bouton ON/OFF du variateur dans 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);
  }
}


Exemple : variation avec un potentiomètre

Ce sketch permet de définir la valeur de variation via un potentiomètre :

  • Les valeurs du potentiomètre varient de 0 à 1023
  • Les valeurs du potentiomètre sont converties via la fonction map en valeurs de 0 à 100 % et enregistrées dans 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 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%)
}


Exemple : variation en toggle

Ce sketch définit par une fonction la variation progressive de la valeur dans une plage de valeurs définie.

Les valeurs sont définies dans une plage de 0 à 100 % :

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
}


Exemple : variation douce par action sur boutons

Ce sketch allume progressivement le variateur après pression du premier bouton et l'éteint progressivement après pression du second bouton :

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);
}



Connexion de deux variateurs ou plus

Z-C (ZeroCross): ZC pin needs only for 1st dimmer. For the next dimmers don't need to connect Z-C.

Pour chaque variateur, la broche Dim doit être connectée.


Le code

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



Variateurs 2 et 4 lignes sur secteur monophasé AC

Les variateurs 2 et 4 lignes disposent d'1 broche ZC et de 2 à 4 broches Dim.


Exemple de code multicanal

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

← Configuration Tasmota | Sommaire