← 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.
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.
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) :
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) :
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 :
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 variateurOFF— 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 % :
dimmer.setPower(90);
4. Fonction getPower
Affiche la valeur de variation actuelle :
Serial.print(dimmer.getPower()); // Result 0~100 int
5. Fonction setMode
Définit et change le mode de fonctionnement :
dimmer.setMode(NORMAL_MODE/TOGGLE_MODE);
6. Fonction getMode
Affiche la valeur du mode de fonctionnement actuel :
Serial.print(dimmer.getMode()); // Result 0 (NORMAL_MODE) or 1 (TOGGLE_MODE)
7. Fonction setState
Définit l'état du variateur ON/OFF :
dimmer.setState(ON);
delay(100);
dimmer.setState(OFF);
8. Fonction getState
Affiche l'état actuel du variateur :
Serial.print(dimmer.getState()); // Result 0 (OFF) or 1 (ON)
9. Fonction changeState
Bascule l'état du variateur vers l'état opposé :
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 dansdimmer.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);
}
}
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 14void loop()— évaluation du bouton ON/OFF du variateur dansdimmer.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);
}
}
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
mapen valeurs de 0 à 100 % et enregistrées dansdimmer.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 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 % :
#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 :
#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
#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
#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);
// ...
}