Skip to content

Instantly share code, notes, and snippets.

@gbkrobotics
Created June 16, 2018 17:20
Show Gist options
  • Save gbkrobotics/f46f03ecf6aeef3ece6ac7689825065c to your computer and use it in GitHub Desktop.
Save gbkrobotics/f46f03ecf6aeef3ece6ac7689825065c to your computer and use it in GitHub Desktop.
/*
- O Módulo Dimmer Arduino é um equipamento criado com o intuito de proporcionar ao hobista ou projetista a possibilidade de realizar o controle da quantidade de energia que é enviada para a lâmpada incandescente, consecutivamente proporcionando maior ou menor luminosidade.
- Para melhor funcionamento o Módulo Dimmer possui em seu sistema um controlador Triac Q4010 integrado, utilizado comumente para chavear a corrente alternada.
- Com a capacidade de dimerizar uma ou mais lâmpadas incandescentes, o Módulo Dimmer é capaz de controlar eletricamente a intensidade luminosa ou o consumo de uma fonte de luz qualquer, como, por exemplo, uma lâmpada incandescente tradicional.
- Como característica fundamental de funcionamento do Dimmer temos a sua capacidade de interromper o envio de corrente a um dado circuito através de uma regulagem de disparos que é programada através do Arduino, Raspberry Pi, PIC, entre outros.
- Com uma entrada e uma saída específica para corrente de 127V ou 220V (deve ser escolhido no momento da compra) o Módulo Dimmer Arduino proporciona através das portas do microcontrolador uma configuração capaz de controlar a intensidade de lâmpadas incandescentes de uma forma muito mais prática e eficiente, aumentando ou diminuindo a faixa luminosa.
- A porta representada pela entrada ZC (Zero Cross) manda um aviso para o microcontrolador de que a tensão está cruzando o zero. A Platafroma Microcontroladora, por sua vez, manda um pulso de volta para o Módulo Dimmer através da porta DIM que fará com que o módulo controle o brilho das lâmpadas incandescentes instaladas.
- Em uma visão mais ampla o Dimmer Arduino é um dispositivo que possui a capacidade de variar a luminosidade de uma ou mais lâmpadas incandescentes, tornando o ambiente muito mais agradável, de fácil controle, trazendo consigo inclusive o benefício de maior economia de energia.
CARACTERÍSTICAS:
- Módulo Dimmer;
- Possibilita o controle da quantidade de energia que é transmitida às lâmpadas incandescentes;
- Proporciona controle preciso da luminosidade das lâmpadas incandescentes;
- Controlador Triac Q4010 integrado;
- Capacidade de dimerizar uma ou mais lâmpadas incandescentes;
- Luminosidade controlada através de sistemas microcontroladores;
- Porta ZC (Zero Cross) que avisa quanto a tensão estiver cruzando o zero;
- Porta DIM que recebe um pulso de tensão do microcontrolador como resposta ao ZC;
- Torna o ambiente muito mais agradável;
- Diminui o consumo de energia;
- Fácil controle;
- Simples instalação;
- Garantia Legal de 90 dias (contra defeitos de fabricação).
ESPECIFICAÇÕES:
- Tensão para lâmpadas incandescentes: 220VAC
- Tensão junto ao Arduino: 5V DC;
- Tensão entrada de disparo: DIM 5V;
- Corrente: 8A (necessário dissipador de calor);
- Dimensões (CxLxA): 62x34x18mm;
- Peso: 21g.
*/
#include <TimerOne.h> // inclui biblioteca Timer1
#define triacApin 4 // Define que o Dimmer será comandado pelo pino 4
int frequencia = 60;
int stateTriacA = 0;
int power = 0; //inicializa variavel que controla potencia na lampada com 0 (lampada apagada)
void setup()
{
Serial.begin(9600);
pinMode(triacApin, OUTPUT);
digitalWrite(triacApin, LOW);
Serial.println("Controle de TRIAC.\r\nDigite o Percentual de Brilho (duas casas) Ex.: 25");
// Initialize the interruption time Timer1
Timer1.initialize(); // Initialize TimerOne library for the freq we need
// Attach the interrupt 0 to pin 2 for the detection of zero crossing (Zero Cross Detection)
attachInterrupt(0, zero_cross_detect, FALLING); // Attach an Interrupt to Pin 2 (Interrupt 0) for Zero Cross Detection
}
void loop()
{
int i = 0;
int read_data[2];
while(i<2){
while(Serial.available()){
read_data[i] = Serial.read();
i++;
}
}
power = Concatena_Numeros(read_data[0],read_data[1]);
Serial.println(power);
}
void zero_cross_detect()
{
if(power > 0){
long dimtime = int(map(power,0,100,8000,150)); // calcula o tempo de delay para o disparo do TRIAC 7950,100
Timer1.attachInterrupt(gateTRIAC, dimtime); //associa a funcao gateTRIAC com Interrupcao do TIMER1
Timer1.start(); // inicia contagem TIMER1
}else{
digitalWrite(triacApin, LOW); // mantem gate do TRIAC desativado.
Timer1.stop();
}
}
void gateTRIAC ()
{ // trata interrupcao do TIMER1 gerando pulso no gate do TRIAC
digitalWrite(triacApin, HIGH); // dispara o Triac
delayMicroseconds(5); // aguarda 5 microsegundos para garantir disparo do TRIAC
digitalWrite(triacApin, LOW); // desabibilta gate do TRIAC
Timer1.stop();
}
int Concatena_Numeros(int variavel1, int variavel2)
{
int resultado;
resultado = ((variavel1-'0')*10)+(variavel2-'0');
return resultado;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment