← Configuración Tasmota | Contenido
Biblioteca Arduino IDE
Versión 1.0 — 2019
¿Desarrolla proyectos con Arduino? Biblioteca Arduino para ESP32/8266, STM32 y placas Arduino. Ejemplos de código incluidos.
Conexión de E/S
El dimmer se conecta a los controladores Arduino mediante dos pines digitales:
- Primero (Zero) — para controlar el paso por cero de fase de la AC, que se usa para iniciar la señal de interrupción
- Segundo (DIM/PSM) — para controlar (atenuar) la corriente
El pin Zero debe conectarse a los pines designados del microcontrolador (que varían según el modelo: Uno, Nano, Leonardo y Mega), ya que está vinculado a las interrupciones del microcontrolador.
El voltaje VCC del dimmer debe coincidir con el nivel lógico del microcontrolador:
- 5 V para Uno, Nano, Leonardo y Mega
- 3,3 V para STM32, ESP32, ESP8266
Tabla de conexión
| Placa | Pin ENTRADA Cruce por cero | Pin SALIDA |
|---|---|---|
| Leonardo | D7 (NO MODIFICABLE) | D0-D6, D8-D13 |
| Mega | D2 (NO MODIFICABLE) | D0-D1, D3-D70 |
| UNO / NANO | D2 (NO MODIFICABLE) | 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 (NO MODIFICABLE) | 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 |
Biblioteca y funciones
En Arduino, el dimmer se controla con la biblioteca RBDdimmer.h, que utiliza interrupciones externas e interrupciones de tiempo de proceso. Esto simplifica la escritura del código y deja más tiempo de procesamiento para el código principal, lo que permite controlar varios dimmers desde un único microcontrolador.
La biblioteca incluye varios ejemplos de uso. La actualizamos constantemente, por lo que recomendamos consultar las actualizaciones del sitio web o suscribirse a nuestro boletín.
Esta biblioteca simplifica el código de usuario con las siguientes funciones:
1. Función dimmerLamp
Esta función inicializa el pin de operación y es definida por el usuario:
a. Para placas SIN pin ZERO-CROSS modificable (AVR, Arduino M0/Zero):
dimmerLamp dimmer(4); // dimmer output DIM/PSM is initialized on the pin 4
b. Para placas con cruce por cero modificable (ESP32, ESP8266, Arduino Due):
dimmerLamp dimmer(4, 2); // dimmer output DIM/PSM on pin 4, zero-cross on pin 2
2. Función begin
Inicialización del puerto, temporizador e interrupción externa de cruce por cero:
dimmer.begin(NORMAL_MODE, ON/OFF);
Parámetro 1: modos de funcionamiento del dimmer:
NORMAL_MODE— hace funcionar el dimmer con el valor definido de 0 a 100 (%)- Ejemplo:
\RBDdimmer\examples\SimpleDimmer TOGGLE_MODE— cambio suave del valor de atenuación hacia arriba o hacia abajo en un rango definido- Ejemplo:
\RBDdimmer\examples\SimpleToggleDimmer
Parámetro 2: ON/OFF:
ON— activa el temporizador, permite usar el dimmerOFF— desactiva los parámetros del temporizador, impide el uso del dimmer
3. Función setPower
Establece el valor de atenuación de 0 a 100%:
dimmer.setPower(90);
4. Función getPower
Muestra el valor de atenuación actual:
Serial.print(dimmer.getPower()); // Result 0~100 int
5. Función setMode
Establece y cambia el modo de funcionamiento:
dimmer.setMode(NORMAL_MODE/TOGGLE_MODE);
6. Función getMode
Muestra el valor del modo de funcionamiento actual:
Serial.print(dimmer.getMode()); // Result 0 (NORMAL_MODE) or 1 (TOGGLE_MODE)
7. Función setState
Establece el estado del dimmer ON/OFF:
dimmer.setState(ON);
delay(100);
dimmer.setState(OFF);
8. Función getState
Muestra el estado actual del dimmer:
Serial.print(dimmer.getState()); // Result 0 (OFF) or 1 (ON)
9. Función changeState
Cambia el estado del dimmer al opuesto:
dimmer.setState(ON);
delay(100);
dimmer.changeState();
delay(100);
10. Función toggleSettings
Cambio suave del valor de atenuación hacia arriba o hacia abajo en un rango definido:
Ejemplo: \RBDdimmer\examples\SimpleToggleDimmer
Ejemplos
Ejemplo: valor de atenuación por puerto serie
El siguiente sketch permite definir el valor de atenuación a través del puerto serie del controlador:
- Se usa
USE_SERIAL.begin - La función
void printSpace()se utiliza para añadir espacio después de los datos funcionales void loop()es el evaluador del puerto serie, utilizado para registrar y definir valores endimmer.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);
}
}
Ejemplo: encendido/apagado
El siguiente sketch permite encender y apagar la lámpara con un botón:
pinMode(14, INPUT)— el botón está conectado al pin 14void loop()— evaluador del botón ON/OFF del dimmer endimmer.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);
}
}
Ejemplo: atenuación con potenciómetro
El siguiente sketch permite definir el valor de atenuación mediante un potenciómetro:
- Los valores del potenciómetro varían en el rango de 0 a 1023
- Los valores del potenciómetro se convierten mediante la función
mapa valores de 0 a 100% y se almacenan endimmer.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%)
}
Ejemplo: alternancia de valores de atenuación
El siguiente sketch define mediante una función los cambios suaves del valor de atenuación en un rango de valores definido.
Los valores se definen en un rango de 0 a 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
}
Ejemplo: atenuación suave con botones
El siguiente sketch permite encender el dimmer suavemente al pulsar el primer botón y apagarlo al pulsar el segundo:
#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);
}
Conexión de dos o más dimmers
Z-C (ZeroCross): ZC pin needs only for 1st dimmer. For the next dimmers don't need to connect Z-C.
Para cada dimmer, es necesario conectar el pin Dim.
Código
#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);
// ...
}
Dimmers de 2 y 4 canales a una fase AC
Los dimmers de 2 y 4 canales tienen 1 pin ZC y 2 a 4 pines Dim.
Ejemplo de código 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);
// ...
}