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:
* 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.
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.
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.
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:
