Tutorial: Controlando a luminosidade de uma lâmpada incandescente com Dimmer Shield


ATENÇÃO: este projeto utiliza conexão direta à rede elétrica, e não fazer as conexões de forma adequada causa riscos de CHOQUE ELÉTRICO e INCÊNDIO. Só execute este projeto caso você já tenha experiência prévia com instalações elétricas.

Olá garagista no tutorial de hoje mostraremos como utilizar o Dimmer Shield  para controlar a luminosidade de uma lâmpada incandescente pelo monitor serial Arduíno e por tac switchs presentes na placa através do Arduíno UNO Rev.3( Lembrando que a carga máxima é de até 4 A) .

Material utilizados

1x Dimmer Shield

1xArduíno UNO Rev.3

1x Plug de Tomada

1x Lâmpada 

1x Metro de cabo AC

1. Dimmer Shield

Figura 1- Dimmer Shield

Características:

O Dimmer Shield é um shield para Arduíno que pode acionar de forma proporcional cargas como lâmpadas e motores, ou seja, você pode variar a intensidade do brilho de uma lâmpada incandescente, velocidade de um ventilador de mesa e controlar dispositivos que operam diretamente com 110V ou 220V com no máximo 4 A.

 VAC: 110/220VAC 4 A

 LOAD: Lâmpada Incandescente, Motor de ventilador de mesa e etc.

 Pinos Utilizados:

 D2 - Interrupção (Passagem por Zero) 

 D3 - Chaveamento do Triac 

 D4 e D5 - Chaves tácteis para uso geral

2. Dimmer

Dimmers (controles de brilho) e Controles de potência nada mais são do que circuitos que, intercalados com cargas na rede de energia elétrica, permitem controlar a sua potência.

Figura 2 - Esquema de ligação de um Dimmer

Ligados em série com lâmpadas incandescentes, eles permitem controlar seu brilho. Ligados em série com aparelhos que usam motores universais, eles possibilitam o controle da velocidade e em série com elementos de aquecimento a sua temperatura. Infelizmente, esses controles só podem ser usados com cargas resistivas (elementos de aquecimento e lâmpadas) ou formadas por um único enrolamento indutivo (motores universais e transformadores). Nunca devemos usar esses controles com lâmpadas eletrônicas, fluorescentes ou equipamentos eletrônicos em geral, pois eles podem causar a sua queima.O TRIAC é o elemento principal capaz de conduzir a corrente principal da carga. O controle da potência é feito, variando-se o ponto de disparo do triac em cada semiciclo da alimentação de corrente alternada.

Figrura 3 - Passagem pelo ponto zero 

Figura 1- Ângulos de disparo

Com uma constante de tempo baixa  o TRIAC dispara no início do semiciclo e a potência aplicada à carga é maior. Com uma constante de tempo alta , o disparo ocorre no final do semiciclo e apenas uma pequena parte da potência disponível é aplicada à carga.

Entre os dois extremos o controle pode ser ajustado para aplicar à carga qualquer potência entre 0 e aproximadamente 95% da potência máxima. 

3. Sketch

//Desenvolvido por Marco Silva
//Email: Marco.silva@labdegaragem.com
//Lab de Garagem

int AC_LOAD = 3;// Dará o pulso no Triac pin
int dimming = 125;// Dimming level (0-128) 0 = ON, 128 = OFF
unsigned long time;//Contará o tempo
unsigned long timeout;//Estouro
int brilho[3];//Recebe os valores da serial
int i=0;//Quantidade de caracteres recebida pela serial
int flag=0;//Indica que foi recebida informação pela serial
char temp;//Armazena dados recebidos pela serial
int x,y;//Variaveis auxiliares

void setup()
{
  Serial.begin(9600);//Inicia a serial com baud rate
  pinMode(AC_LOAD, OUTPUT);// Disparo do Triac pino 3
  attachInterrupt(0, zero_crosss_int, RISING);// Interrupção detecta a passagem por 0, quando passa de nível baixo para auto
  pinMode(4, INPUT);// Configura o pino 4 como entrada
  pinMode(5, INPUT);// Configura o pino 5 como entrada
  
}

void zero_crosss_int() // Função que detecta a passagem por 0
{
  // Calculo do ângulo de disparo :: 60Hz-> 8.33ms (1/2 Cycle)
  // (8333us - 8.33us) / 128 = 65 (Approx)
  int dimtime = (65*dimming); // 65 equivale a 1 de 128
  delayMicroseconds(dimtime); // Off cycle
  digitalWrite(AC_LOAD, HIGH); // disparando o Triac
  delayMicroseconds(8.33); // Aguarda o tempo de disparo
  digitalWrite(AC_LOAD, LOW); // finaliza o pulso do Triac
}

void loop()
{
  //------------------------------------------------------------------------------------------
  // Retorna o tempo em milisegundos desde que o Arduíno começou a rodar,
  time = millis()%2;//Divide por 2 e salva o resto
  if(time==1||time==0)//Compara se o resto é igual a 0 ou 1 e sempre vai ser
  {
  timeout++;// Cronômetro
    if (timeout>500)// Compara se houve estouro do tempo
    {
    i=0;// Zera o quantidades de caracteres recebidos
    flag=0;// Zera o aviso de que foi recebido algum dado na serial
    }  
   }
 
  //-------------------------------------------------------------------------------------------
  
  //Aumenta a intensidade
  if(digitalRead(4)==1 && dimming >10)// Compara se o botão foi pressionado e se o dimming é maior que 10 seu limite máximo
  {
   dimming= dimming -5;// Aumenta a intensidade de 5 em 5
    y=dimming/1.25;//Converte em %
    y=(y-100)*(-1);//O dimming é inversamente proporcional à porcentagem
    Serial.print(y);
    Serial.println("%");
    Serial.print("Resolucao: ");
    Serial.println(dimming);
    delay(100);// Aguarda um tempo até o próximo acionamento
  }
  //Diminui a intensidade
  if(digitalRead(5)==1&& dimming<125)
  {
    dimming= dimming +5; 
    y=dimming/1.25;
    y=(y-100)*(-1);
    Serial.print(y);
    Serial.println("%");
    Serial.print("Resolucao: ");
    Serial.println(dimming);
    delay(100);
  }
  //--------------------------------------------------------------------------------------------
  if (Serial.available()>0)// Verifica se houve recepção
  {
    flag=1;//Sinaliza que houve recepção
    timeout=0;// Zera o o tempo de reset
    //------------------------------------------------------------------------------------------
    temp = Serial.read();// Armazena o que foi recebido pela serial
    brilho[i]=temp-48;// Decrementa 48 na tabela ascii para converter de decimal para char
    i++;// Contabiliza um recebimento
  }
   //---------------------------------------------------------------------------
if (timeout>200&&flag==1)// Compara se houve estouro do timeout(se ficou um tempo sem recepção) e se houve recepção
{
  flag=0;// Sera aviso de recepção
  
   // Verifica a quantidade de informação recebida
   switch(i)
   {
   case 1:
   x=brilho[0];//Unidade
   break;
   
   case 2:
   x=brilho[0]*10 + brilho[1];//Dezena e unidade
   break;
   
   case 3:
   x=brilho[0]*100 + brilho[1]*10 + brilho[2];//Centena, Dezena, Unidade
   break;
   }  
   // Envia para serial informações em % e resolução de disparo
    Serial.print(x);
    Serial.println("%");
     delay(30);
   
    if(x>100||x<0)// Proteção para se foi inserido um valor mair que 100%
    {
    Serial.println("Excedeu o limite");
    }
    else// Se estiver tudo OK
    {
    x=100-x;// Inversamente proporcional a %
    dimming=x*1.25;// Resolução diminuida de 128 para 125 para garantir um tempo bom de resposta
      if(dimming<8)
      {
      dimming=8;// O dimming será sempre maior que 10 para garantir um tempo bom de resposta
      }
    //Envia para a serial o valor da resolução
    Serial.print("Resolucao: ");
    Serial.println(dimming);
    }

}
}

Referências:

http://www.labdegaragem.org/loja/48-ldg/dimmer-shield.html

http://labdegaragem.com/profiles/blogs/tutorial-dimmer-shield

http://labdegaragem.com/profiles/blogs/tutorial-acionando-lampada-com-mini-relay-shield-e-interruptor-pa

http://www.newtoncbraga.com.br/index.php/como-funciona/619-dimmers-e-controles-de-potencia-art071

Exibições: 27511

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de André Araújo Kuhn Pereira em 29 junho 2017 às 13:41

Boa tarde Carlos!

Até o momento não conseguir colocar pra funcionar o Dimmer Shield junto com o display.

O Dimmer funciona com interrupção pela passagem do ponto zero da tensão da rede.

Quando utiliza o display, na hora de enviar os dados do microcontrolador para o display, possivelmente acontece a interrupção, falhando o envio de dados.

O triac utilizado no novo Dimmer Shield é o BTA08-600B, com capacidade de corrente de até 8A e tensão de até 600V.

Porém na corrente de 8 A, esquenta muito o dissipador incluso da placa, pois é pequeno.

Com a corrente de 4 A, o dissipador incluso dissipa de forma eficiente.

Sobre a possibilidade de alterar o triac pra suportar maior corrente, não aconselho a fazer isso. Pois a trilha de cobre da placa do novo Dimmer Shield suporta a corrente máxima de 10A.

Se caso deseja fazer essa alteração, sugiro fazer jumpers com fio na trilha da placa. Lembrando também que em corrente de 16 A, o calor dissipado pelo triac será bem maior, necessitando colocar um dissipador maior ou ventilação forçada.

Qualquer dúvida entre em contato!

Obrigado por comprar o Dimmer Shield!

Segue o link do novo Dimmer Shield: http://produto.mercadolivre.com.br/MLB-775276602-dimmer-shield-ardu...

Abraço.

Comentário de Carlos em 29 junho 2017 às 12:30

Saudacoes, 

Estou querendo acrescentar um display lcd, mas nao estou conseguindo, parace que tem algum conflito, poderia me orientar.

Voce diz que só pode controlar carga com 4A, mas na configuracao qto comprei diz ate 8A, o triac realmente é de 8A,, ?????

Preciso controlar uma carga de 16A, posso substituir o triac por um , por exemplo BTA41?

Obrigado

Comentário de André Araújo Kuhn Pereira em 6 julho 2016 às 12:17
Bom dia Gilmar! Ainda não fiz código utilizando o LCD com o Dimmer Shield! Mas já fiz testes utilizando o Ethernet Shield com o Dimmer Shield e não percebi lentidão nas respostas! Mas eu não hospedei nenhuma página HTML no código, fiz o código para o Arduíno lê o que tem após o endereço IP digitado no navegador, por exemplo, 192.168.0.177/Aumentar, o comando será aumentar o dimmer (brilho de uma lâmpada). O funcionamento do Dimmer é detectando o ponto zero da senoide da tensão alternada, quando detecta esse ponto, sai da função principal e executa a função de controle do Dimmer. Nesta função, antes do delay tem os cálculos do tempo que será inserido no delay, ou seja, o Arduíno "demora" um certo tempo para fazer essa conta, ou seja, quando colocado em 90%, o código coloca em 100%, o pulso digital de disparo do TRIAC em nível alto o tempo todo. Diante disso, o controle é de 0% a 90%!
Comentário de Gilmar Correa Moraes em 5 julho 2016 às 12:12

Bom dia, sobre este dimmer, um efeito muito curioso é que se o sistema possuir menu (LCD) ou um buzzer a velocidade do menu ou do som, ficam de acordo com a frequência inserida ao pino 2( ou 3), muita lentidão, outro fato se aumentar a velocidade do dimmer o menu e o som mudam para cima também, se tirar o fio da entrada 2 ou 3 ( attachInterrupt(0, zero_crosss_int, RISING);) funciona normalmente.

Comentário de alisson jose dos santos em 2 maio 2016 às 9:19

Obrigado pela atenção André

Comentário de André Araújo Kuhn Pereira em 28 abril 2016 às 10:04

Alisson! Até o momento não conseguir desenvolver um código utilizando o Dimmer Shield com Infrared. Conseguir utilizando bluetooth, ethernet shield e comunicação serial. Estou tentando com o módulo WiFi ESP8266. No momento estou providenciando a fabricação dos shields pra continuar vendendo por conta própria. Em breve colocarei mais tutoriais. Abraço.

Comentário de alisson jose dos santos em 23 abril 2016 às 12:04

ola tenho um projeto igual e esse só que e pelo controle remoto tem como usar a interrupção com a biblioteca ir remote do arduino ?

 

Comentário de André Araújo Kuhn Pereira em 30 novembro 2015 às 0:52

Caro Mario Henrique, pode inserir os botões do Dimmer Shield sem problemas, os botões do shield são chaves tácteis para uso geral!

Lembrando que terá que configurar os pinos digitais dos botões, que são D4 e D5, como INPUT, no void setup() do código.

Comentário de André Araújo Kuhn Pereira em 30 novembro 2015 às 0:43

Caro Bruno Carvalho, para satisfazer a sua necessidade, será necessário criar uma variável para armazenar a temperatura, e outra variável para armazenar a porcentagem desejada. Com essas variáveis pode fazer cálculos para controlar a luminosidade de acordo com a temperatura.

Comentário de Bruno Carvalho em 26 novembro 2015 às 18:09

Obrigado pela atenção André, porém com esse código a configuração da temperatura em um display q eu estou usando dobrou e nao aconteceu esperado. 

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2020   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço