fbpixel
Etiquetas: , ,
4.8
(6)

El variador de tensión CA es un módulo que permite variar la potencia de una corriente alterna. Tiene el mismo uso que un transistor en corriente continua. Puede utilizarse para variar la luminosidad de una lámpara alimentada con 220V o para variar la velocidad de un ventilador, por ejemplo.

Material

  • Ordenador
  • Arduino UNO
  • Cable USB A Macho/B Macho
  • AC Light Dimmer

Principio de funcionamiento

El atenuador de luz de CA consta de un triac (equivalente a un transistor de CC) y un detector de paso por cero de fase para sincronizar la variación de tensión y la fase de la corriente de CA.

Esquema

Según el esquema de cableado, el módulo se conecta a la red a través de la regleta AC-IN y la bombilla se conecta a la regleta LOAD. En la parte electrónica, los pines se conectan de la siguiente manera:

  • Vcc en el pin 5 o 3.3V del microcontrolador
  • GND a tierra GND del microcontrolador
  • Z-C en el pin 2
  • PWM en el pin 3

Si estás usando varios accionamientos, los pines Z-C se conectan todos al mismo pin del microcontrolador (en nuestro caso D2). La biblioteca RBDdimmer utiliza algunos pines en particular, dependiendo del microcontrolador utilizado. Consulta la documentación la biblioteca para ver qué pines puedes utilizar.

Código

Para utilizar el módulo AC Light Dimmer, utilizamos la biblioteca RBDdimmer.h. La biblioteca gestionará la sincronización entre la señal PWM, que establece la potencia, y la fase de la corriente alterna. Una vez importada la librería e inicializado el módulo, sólo tenemos que elegir el nivel de potencia entre 0 y 100%.

//Libraries
#include <RBDdimmer.h>//https://github.com/RobotDynOfficial/RBDDimmer

//Parameters
const int zeroCrossPin  = 2;
const int acdPin  = 3;
int MIN_POWER  = 0;
int MAX_POWER  = 80;
int POWER_STEP  = 2;

//Variables
int power  = 0;

//Objects
dimmerLamp acd(acdPin);

void setup(){
//Init Serial USB
Serial.begin(9600);
Serial.println(F("Initialize System"));
acd.begin(NORMAL_MODE, ON);
}

void loop(){
  testDimmer();
}

void testDimmer(){/* function testDimmer */ 
////Sweep light power to test dimmer
  for(power=MIN_POWER;power<=MAX_POWER;power+=POWER_STEP){
    acd.setPower(power); // setPower(0-100%);
      Serial.print("lampValue -> ");
      Serial.print(acd.getPower());
      Serial.println("%");
    delay(100);
  }

  for(power=MAX_POWER;power>=MIN_POWER;power-=POWER_STEP){
    acd.setPower(power); // setPower(0-100%);
      Serial.print("lampValue -> ");
      Serial.print(acd.getPower());
      Serial.println("%");
    delay(100);
  }
}

Resultado

La luminosidad de la bombilla varía en función del valor de «potencia» enviado al módulo. Es bueno tener en cuenta que este módulo funciona con cargas regulables y funciona mejor con bombillas incandescentes. Yo uso una bombilla LED y la regulación funciona bien entre el 6% y el 40%. Por debajo del 6% la lámpara se apaga, por encima de eso no veo cambios en la luminosidad y la bombilla se apaga por encima del 85%.

Bonus: Gestión de dos variadores de tensión alterna

Si quieres utilizar otro variador de tensión alterna al mismo tiempo, simplemente conecta el pin Z-C al pin 2 (en el UNO) y el pin PWM al pin 5 (u otro pin PWM).

En el código, para gestionar dos módulos, hay que declarar un objeto dimmerLamp adicional inicializando el pin de salida adecuado.

//Libraries
#include <RBDdimmer.h>//https://github.com/RobotDynOfficial/RBDDimmer

//Constants
#define nbACD 2

//Parameters
const int zeroCrossPin = 2;
const int acdPin[nbACD] ={3,5};
int MIN_POWER[nbACD] ={0,0};
int MAX_POWER[nbACD] ={80,80};
int POWER_STEP[nbACD] ={1,1};

//Variables
int power[nbACD] ={0,0};
dimmerLamp acd[nbACD] ={dimmerLamp(acdPin[0]),dimmerLamp(acdPin[1])};

void setup(){
//Init Serial USB
Serial.begin(9600);
Serial.println(F("Initialize System"));
for(int i=0;i<nbACD;i++) acd[i].begin(NORMAL_MODE, ON);
}

void loop(){
  testDimmer();
}

void testDimmer(){/* function testDimmer */ 
////Sweep light power to test dimmer
for(int i=0;i<nbACD;i++){
  for(power[i]=MIN_POWER[i];power[i]<=MAX_POWER[i];power[i]+=POWER_STEP[i]){
    acd[i].setPower(power[i]); // setPower(0-100%);
      Serial.print(F("lampValue "));Serial.print(i);Serial.print(F(" -> "));
      Serial.print(acd[i].getPower());
      Serial.println(F("%"));
    delay(100);
  }

  for(power[i]=MAX_POWER[i];power[i]>=MIN_POWER[i];power[i]-=POWER_STEP[i]){
    acd[i].setPower(power[i]); // setPower(0-100%);
      Serial.print(F("lampValue "));Serial.print(i);Serial.print(F(" -> "));
      Serial.print(acd[i].getPower());
      Serial.println(F("%"));
    delay(100);
  }
}
}

Las dos lámparas se encienden y apagan gradualmente, una tras otra. Ahora puedes aplicar este tutorial para gestionar todas las lámparas de tu casa.

Aplicaciones

  • Controla la luminosidad de una habitación según la hora del día
  • Controlar la velocidad de un ventilador en función de la temperatura ambiente

Fuentes

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 4.8 / 5. Recuento de votos: 6

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en los medios sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?