Site icon AranaCorp

Utilizar um regulador de tensão AC com Arduino

Um regulador de tensão AC é um módulo que permite variar a potência de uma corrente alternada. Ele tem a mesma utilização que um transístor em corrente contínua. Permite, por exemplo, fazer variar o brilho de uma lâmpada alimentada em 220V ou a velocidade de um ventilador.

Material

Princípio de funcionamento

O regulador de luminosidade AC consiste num TRIAC (equivalente a um transístor em corrente contínua) e num detector de passagem por zero para sincronizar a variação de tensão com a fase da corrente alternada.

Esquema

Quanto ao esquema elétrico, o módulo é ligado ao setor através do bloco terminal AC-IN e a lâmpada é ligada ao bloco terminal LOAD. Quanto à eletrônica, os pinos são ligados da seguinte forma:

Se usar vários reguladores, os pinos Z-C serão todos ligados ao mesmo pino do microcontrolador (no nosso caso, o D2). A biblioteca RBDdimmer utiliza alguns pinos específicos dependendo do microcontrolador utilizado. Verifique a documentação da biblioteca para saber quais pinos podem ser usados.

Código

Para utilizar o módulo AC Light Dimmer, usamos a biblioteca RBDdimmer.h. A biblioteca irá gerir a sincronização entre o sinal PWM, que define a potência, e a fase da corrente alternada. Depois de importar a biblioteca e inicializar o módulo, só resta escolher o nível de potência entre 0 e 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

O brilho da lâmpada varia de acordo com o valor “power” enviado ao módulo. Vale notar que este módulo funciona com cargas dimerizáveis, e funciona melhor com lâmpadas incandescentes. Eu uso uma lâmpada LED e a variação funciona bem entre 6% e 40%. Abaixo de 6%, a lâmpada se apaga. Acima de 40%, não percebo alteração no brilho, e a lâmpada se apaga acima de 85%.

Bônus: Gerenciar dois reguladores de tensão AC

Se quiser utilizar um outro regulador de tensão AC ao mesmo tempo, basta ligar o pino Z-C ao pino 2 (no UNO) e o pino PWM ao pino 5 (ou outro pino PWM).

No código, para gerir dois módulos, é preciso declarar um objeto adicional dimmerLamp inicializando o pino de saída correto.

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

As duas lâmpadas se acendem e se apagam gradualmente, uma após a outra. Agora já pode controlar todas as lâmpadas da sua casa aplicando este tutorial.

Aplicações

Fontes

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

Exit mobile version