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!
Código de programação:
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.
Obs.: Para fazer o upload do código, o módulo bluetooth não pode está conectado no RX e TX do arduino! Pois a gravação do microcontrolador usa essa porta digital.
//----------------------------inicio do programa-------------------------------------------
//André Kuhn - Automation
//Email - andrekuhn.automacao@gmail.com
//Código para o Dimmer ser controlado pelos botões e pelo módulo Bluetooth
//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;
//Variável para armazenar os caracteres recebidos pela serial, pode receber
//pelo bluetooth ou pelo serial monitor da IDE do arduino
char leitura;
//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);
//Definindo a valocidade da comunicação serial (baud-rate)
Serial.begin(9600);
}
//Função responsável por executar a lógica de programação
void loop()
{
//Verificando se há comunicação serial
if(Serial.available())
{
//Fazendo a leitura da comunicação serial e armazenando na variável
//leitura do tipo char
leitura = Serial.read();
}
//Verificando se o botão 0 foi pressionado ou se a variável leitura
//é igual a "A"
if((digitalRead(botao_0) == HIGH) || (leitura == 'A'))
{
//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
Serial.print(power); //Impressão na serial o valor de power
Serial.println(" %"); //Impressão na serial o texto " %"
}
//Verificando se o botão 1 foi pressionado ou se a variável leitura
//é igual a "B"
if((digitalRead(botao_1) == HIGH) || (leitura == 'B'))
{
//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
Serial.print(power); //Impressão na serial o valor de power
Serial.println(" %"); //Impressão na serial o texto " %"
}
//Verificando se a variável leitura é igual a "C"
if(leitura == 'C')
{
//power recebe valor 0, desliga a carga (0%)
power = 0;
Serial.print(power); //Impressão na serial o valor de power
Serial.println(" %"); //Impressão na serial o texto " %"
}
//Verificando se a variável leitura é igual a "D"
if(leitura == 'D')
{
//power recebe valor 100, liga a carga (100%)
power = 100;
Serial.print(power); //Impressão na serial o valor de power
Serial.println(" %"); //Impressão na serial o texto " %"
}
leitura = ' '; //Atribuindo o " " (espaço), na variável leitura
}
//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 = (83*(100-power));
//Se o powertime for menor ou igual a 300 microsegundos, dar o comando
//de ligar a lâmpada (carga) - potência total fornecida
if(powertime <= 830)
{
//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 300 microsegundos a 8000 microsegundos
else if((powertime > 830) && (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,33 microssegundos para que o TRIAC perceba o pulso
delayMicroseconds(8.33);
//Desliga o pulso do TRIAC, coloca o pino digital "load" em nível baixo
digitalWrite(load, LOW);
}
}
//----------------------------fim do programa-----------------------------------------------
Comentar
Boa tarde José Gustavo! Muito obrigado pelos parabéns! Foi eu que desenvolvi sim! E incubei o projeto junto com o labdegaragem.com. Agora estou vendendo por conta própria! Vou providenciar o vídeo do funcionamento e colocar no blog! Obrigado pela sugestão. Abraço.
Sugiro que divulgue um vídeo com sua aplicação em funcionamento.
André, foi você que desenvolveu a Dimmer Shield e toda a solução ?
Parabéns !!
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
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)