Blog em desenvolvimento

Blog em desenvolvimento

Dimmer Shield - controle pelo botão - 1 canal

Tutorial para controlar o novo Dimmer Shield pelos botões, utilizando o Arduíno UNO.

ATENÇÃO: Neste projeto utiliza conexão direta à rede elétrica, se for feito ligação de forma inadequada pode causar CHOQUE ELÉTRICO e INCÊNDIO. Só execute este projeto caso você tenha conhecimento com instalações elétricas!

Descrição:
O novo Dimmer Shield é um shield para Arduíno. É utilizado para controlar a potência de aparelhos elétricos domésticos, por exemplo, lâmpada incandescente, lâmpadas fluorescente ou LED dimerizáveis, ventilador de mesa e de teto, liquidificador, entre outros.

Está a venda neste link:
http://produto.mercadolivre.com.br/MLB-775276602-dimmer-shield-arduino-110vac-e-220vac-ate-trs-canais-_JM
link de venda

Figura 1 - Novo Dimmer Shield para Arduino

Especificação técnica do novo Dimmer Shield:
Corrente máxima:     8 A
Tensão Máxima de pico: 400 V
Com dissipador incluso:

Potência máxima com dissipador incluso – 127 Volts: 400 Watts
Potência máxima com dissipador incluso – 220 Volts: 800 Watts

Com dissipador externo maior:
            Potência máxima com dissipador externo maior – 127 Volts: 1016 Watts
            Potência máxima com dissipador externo maior – 220 Volts: 1760 Watts

* CUIDADO ao colocar a mão no dissipador e no triac! Pois a temperatura pode chegar acima de 100 °C.

Ligação elétrica:
A ligação elétrica do novo Dimmer Shield é feito da seguinto forma, o VAC indicado na placa será a conexão da tomada e o LOAD é a conexão da carga.
   Tomada  <=>    VAC
    Carga     <=>  LOAD

A figura 2, 3 e 4 mostra o esquema da ligação elétrica.

Figura 2 - Esquema de ligação elétrica

 
Figura 3 - Esquema de ligação elétrica, utilizando como carga lâmpada incandescente ou led dimerizável.


Seleção do pino digital de disparo do triac:
O novo Dimmer Shield tem a possibilidade de alterar o pino digital de disparo do triac, são os pinos digitais 3, 5 e 6. A alteração é feito por jumper. É necessário modificar no código o pino selecionado. No algoritmo deste tutorial tem o comentário explicando como é feito a alteração. A figura 4 mostra onde é feito a seleção do jumper.

Figura 4 - Seleção do pino digital de disparo do triac


Seleção de pinos dos dois botões:
O novo Dimmer Shield utiliza os pinos analógicos para detectar o pressionamento. O circuito dos botões estão na configuração pull-down, ou seja, quando o botão não está pressionado está em nível baixo, e quando pressionado em nível alto na entrada analógica. É possível alterar a porta analógica que irá detectar o pressionamento do botão, o B0 pode utilizar as portas A0, A1 ou A2 e o B1 as portas A3, A4 ou A5.

B0 <=> A0 ou A1 ou A2
B1 <=> A3 ou A4 ou A5

A Figura 5 mostra onde é feito a alteração dos jumpers.

Figura 5- Seleção de pinos dos botões B0 e B1

Código de programação para o Arduino:
Segue o código de programação utilizado neste tutorial. Observar os comentários, para fazer as alterações de acordo com os jumpers na placa. Copiar e colar na IDE do Arduino e depois fazer o upload do código.

//------------------------------inicio do programa---------------------------------
//André Kuhn - Automação
//Email: andrekuhn.automacao@gmail.com
//Código para utilizar o novo Dimmer Shield para ser controlado pelos botões.

//Pino digital responsável pelo chaveamento do TRIAC, o novo Dimmer Shield
//pode utilizar os pinos digitais 3, 5 e 6, é necessário alterar o jumper na
//placa. Para utilizar no antigo Dimmer Shield, o pino é o 3.
int load = 3;

//Porcentagem inicial em 40%, variável com valor da 0 a 100.
volatile int power = 40;

//Declarando os pinos de leitura dos botões B0 e B1 do novo Dimmer Shield, o
//botão B0 podem ser A0,A1 e A2, e o botão B1 as entradas A3, A4 e A5. Lembrar
//da alteração dos jumpers na placa. No antigo Dimmer Shield os pinos dos botões
//são fixos, pino 4 e 5.
int botao_0 = A0, botao_1 = A3;

//Inicializando a função de configuração das portas digitais e analógicas
void setup()
{
  //Declarando o pino digital load (digital 3) como saída
  pinMode(load, OUTPUT);

  //Inicializa interrupção. O número zero indica a porta 2 do Arduino,
  //zero_cross_int é a função que será chamada toda vez que pino 2 do Arduino,
  //"subir" (RISING) de valor de 0 para 1.
  attachInterrupt(0, zero_cross_int, RISING);

  //Declarando o pino do botão 0 como entrada
  pinMode(botao_0, INPUT);
  //Declarando o pino do botão 1 como entrada
  pinMode(botao_1, INPUT);

  //Colocando o pino do botão 0 em nível baixo (0 volt)
  digitalWrite(botao_0, LOW);

  //Colocando o pino do botão 1 em nível baixo (0 volt)
  digitalWrite(botao_1, LOW);
}

//Função responsável por executar a lógica de programação
void loop()
{
  //Verificando se o botão 0 foi pressionado
  if (digitalRead(botao_0) == HIGH)
  {
    //Se power (porcentagem) for maior que 0, executa
    if (power > 0)
    {
      //Faz a subtração do power anterior com 10 (decremento de 10)
      power = power - 10;
    }
    delay(200); //Espera de 200 milisegundos
  }

  //Verificando se o botão 1 foi pressionado
  if (digitalRead(botao_1) == HIGH)
  {
    //Se power (porcentagem) for menor que 100, executa
    if (power < 100)
    {
      //Faz a soma do power anterior com 10 (incremento de 10)
      power = power + 10;
    }

    delay(200); //Espera de 200 milisegundos
  }
}

//Função executada quando o Dimmer Shield detecta a passagem por zero da tensão
//alternada (senóide)
void zero_cross_int()
{
  //Cálculo do ângulo de disparo: 60Hz -> 8,33ms (1/2 ciclo)
  //(8333us - 8,33us) / 100 = 83 (aproximadamente)

  //O powertime é o tempo que o TRIAC permanescerá desligado quando é detectado
  //o ponto 0 da senóide e varia de 0 a 8300 microsegundos
  int powertime = (82 * (100 - power));

  //Se o powertime for menor ou igual a 820 microsegundos, dar o comando de
  //ligar a lâmpada (carga) - potência total fornecida
  if (powertime <= 820)
  {
    //Liga o pulso do sinal ao TRIAC para que ele passe a conduzir, coloca o
    //pino digital "load" em nível alto
    digitalWrite(load, HIGH);
  }

  //Se o powertime for menor ou igual a 8000 microsegundos, dar o comando de
  //desligar a lâmpada (carga) - potência zero fornecida
  else if (powertime >= 8000)
  {
    //Desliga o pulso do sinal ao TRIAC para que ele não conduza, coloca o pino
    //digital "load" em nível baixo
    digitalWrite(load, LOW);
  }

  //Se o powertime estiver entre 820 microsegundos a 8000 microsegundos
  else if ((powertime > 820) && (powertime < 8000))
  {
    //Mantém o circuito desligado por powertime microssegundos (espera powertime
    //microssegundos)
    delayMicroseconds(powertime);
 
    //Envia sinal ao TRIAC para que ele passe a conduzir, coloca o pino digital
    //"load" em nível alto
    digitalWrite(load, HIGH);
 
    //Espera 8 microssegundos para que o TRIAC perceba o pulso
    delayMicroseconds(8);

    //Desliga o pulso do TRIAC, coloca o pino digital "load" em nível baixo
    digitalWrite(load, LOW);
  }
}
//------------------------------fim da programa----------------------------------------------

Vídeo demonstração do novo Dimmer Shield:








8 comentários:

Anônimo disse...

como fazer isso automatizado?

André Kuhn disse...

Automatizado seria ligar e desligar por um determinado tempo? Se sim, pode usar um módulo rtc (real time clock), e programar pra ligar em um determinado horário e depois desligar.

Lucas Murilo disse...

Olá, boa tarde!

Estou utilizando um dimmer shield, porem pelo jeito, é o modelo antigo, pois nele nao tem esse capacitor laranja que neste tem, e a disposição dos botoes e componentes são um pouco diferentes. E seguinte a exemplo desse projeto, estou utilizando uma lampada de led dimerizavel, porem nao funciona de acordo com o seu, pois fica piscando quando nao esta desligada ou potencia máxima. Poderia me dar um feedback com relacao a isso?

André Kuhn disse...

Olá, boa noite!

Os botões do novo Dimmer Shield estão conectados nas entradas analógicas, onde o Botão 0, pode ser A0, A1 ou A2, e o Botão 1 a entrada A3, A4 ou A5. A seleção é feito por jumper na placa. O antigo dimmer shield, os dois botões são fixo, e estão conectados na entrada digital D4 e D5.

Provavelmente o seu código deve esta usando o botão das entradas do novo dimmer, que são as analógicas, então faça a alteração nessa parte:
int botao_0 = A0, botao_1 = A3;

Colocando da seguinte forma:
int botao_0 = 4, botao_1 = 5;

Aguardo feedback, se foi solucionado o problema.

Qualquer dúvida só entrar em contato!

Obrigado por comprar o Dimmer Shield!

Abraço.

Lucas Murilo disse...

Olá Andre, muito obrigado pela resposta. A questão não tem a ver com a lógica programação, sei e alterei o código dos botões. O problema é que a lâmpada incandescente funciona perfeitamente, porem quando eu coloco lampada de led dimerizavel, ela nao se comporta de acordo com o desejado. Ela fica piscando quando eu coloco em baixa e média potencia. Acredito que seja pelo fato de as lampadas de led terem bem menos potência se comparada as incandescentes, sendo a que eu tenho ser de 9w. eu montei todo o circuito do dimmer shield na protoboard, e continua da mesma forma. Agora nesta shield que vc utilizou aqui, eu vi que tem a mais no circuito um capacitor, e um resistor de 2watts de 56R. Eu coloquei esse resistor de 56r em paralelo com a lampada de led dimerizavel, e dessa forma ela funciona, porem o resistor logo queima. Preciso de uma luz, to quebrando a cabeca há muitos dias. Ja estou cansado de procurar respostas e não acho. Me ajuda por favor, principalmente na parte do circuito. Se vc tiver como mandar uma foto detalhada da shield parte de cima e de baixo para eu tentar decifrar as ligacoes, ou se vc tiver o esquematico, eu te agradeco muito!

André Kuhn disse...

O circuito que tem o capacitor e o resistor de 2W, é o circuito snubber. Este circuito tem a finalidade de "amortecer" os transientes de alta tensão quando ocorre a comutação do acionamento ou desacionamento em carga indutiva, protegendo o TRIAC.

Vou procurar o esquemático e posto aqui.

Qual arduino está utilizando?

Dependendo do Arduino, o tempo de resposta pode ser lenta, ou seja, o tempo de realizar o controle quando há a passagem pelo ponto zero da tensão e ativar a porta digital de disparo do triac.
Tive esse problema com algumas placas arduinos que comprei da China, e conseguir solucionar alterando o tempo de controle do "powertime" no código:


/////////////////////////////////////////////////////////////////////////
//Se o powertime for menor ou igual a 820 microsegundos, dar o comando de
//ligar a lâmpada (carga) - potência total fornecida
if (powertime <= 1000)
{
//Liga o pulso do sinal ao TRIAC para que ele passe a conduzir, coloca o
//pino digital "load" em nível alto
digitalWrite(load, HIGH);
}

//Se o powertime for menor ou igual a 8000 microsegundos, dar o comando de
//desligar a lâmpada (carga) - potência zero fornecida
else if (powertime >= 8000)
{
//Desliga o pulso do sinal ao TRIAC para que ele não conduza, coloca o pino
//digital "load" em nível baixo
digitalWrite(load, LOW);
}

//Se o powertime estiver entre 820 microsegundos a 8000 microsegundos
else if ((powertime > 1000) && (powertime < 8000))
{
//Mantém o circuito desligado por powertime microssegundos (espera powertime
//microssegundos)
delayMicroseconds(powertime);

//Envia sinal ao TRIAC para que ele passe a conduzir, coloca o pino digital
//"load" em nível alto
digitalWrite(load, HIGH);

//Espera 8 microssegundos para que o TRIAC perceba o pulso
delayMicroseconds(8);

//Desliga o pulso do TRIAC, coloca o pino digital "load" em nível baixo
digitalWrite(load, LOW);
}
}

Ou seja, o controle do dimmer será realizado entre 1000us a 8000us.

Modifica essa parte do código e verifique se o problema ainda persiste.

Aguardo o feedback.

André Kuhn disse...

Lucas Murilo, entre em contato comigo pelo e-mail: andrekuhn.automacao@gmail.com. Não é possível colocar o imagens (esquemático) no comentário do blogger.

João Pedro disse...

Onde eu posso achar um Shield como esse com botoes?

Seguidores