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
- https://robotdyn.com/ac-light-dimmer-module-1-channel-3-3v-5v-logic-ac-50-60hz-220v-110v.html
- https://github.com/RobotDynOfficial/RBDDimmer
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie