Ir al contenido

← 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.

Info
Descargar la biblioteca dimmer: RBDDimmer



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.

Info
Descargar la biblioteca dimmer: RBDDimmer

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

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

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

cpp
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 dimmer
  • OFF — 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%:

cpp
dimmer.setPower(90);


4. Función getPower

Muestra el valor de atenuación actual:

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


5. Función setMode

Establece y cambia el modo de funcionamiento:

cpp
dimmer.setMode(NORMAL_MODE/TOGGLE_MODE);


6. Función getMode

Muestra el valor del modo de funcionamiento actual:

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


7. Función setState

Establece el estado del dimmer ON/OFF:

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


8. Función getState

Muestra el estado actual del dimmer:

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


9. Función changeState

Cambia el estado del dimmer al opuesto:

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


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 14
  • void loop() — evaluador del botón ON/OFF del dimmer en 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);
  }
}


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 map a valores de 0 a 100% y se almacenan en 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%)
}


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

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
}


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:

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



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

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



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

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

← Configuración Tasmota | Contenido