Download - Projeto Arduino - DIMMER
-
7/24/2019 Projeto Arduino - DIMMER
1/12
INSTITUTO FEDERAL DE EDUCAO, CINCIA E TECNOLOGIA DE GOIS
DIMMERCONTROLE DE FLUXO DE POTNCIA
Carlos Alexandre
Donata Assis
Jssica Oliveira
JataGO
2016
-
7/24/2019 Projeto Arduino - DIMMER
2/12
1. INTRODUO
Dimmer um dispositivo utilizado para variar a intensidade de corrente eltrica
mdia em uma carga. controlado a partir do Arduino, que utiliza detector de passagem
por zero e o disparo de um TRIAC, sendo possvel o controle da intensidade da luz
produzida pela lmpada. Um dimmer tem como objetivo fazer com que aumente ou
diminua a intensidade luminosa atravs de um potencimetro, boto, comandos pelo
Arduino, etc., que auxilia nessa operao.
Os Dimmers so amplamente utilizados na indstria eletroeletrnica, onde sua
funo controlar a intensidade de corrente e consequentemente a potncia da carga que
est sob o seu controle. O componente eletrnico principal de um Dimmer, ou seja, o
responsvel por este controle o TRIAC que atravs da corrente aplicada no seu GATE,
permite-o controlar a corrente de sada para a CARGA.
A grande vantagem dos TRIACs sob os SCRs que eles podem trabalhar em
circuito VAC e VCC. Os Dimmers podem controlar cargas com correntes que vo de mili
amperes (mA) at 500 Ampres, conforme o TRIAC ou MODULO TIRISTORIZADO
aplicado no projeto. Assim poderemos controlar Fornos Eltricos, Autoclaves, Estufas,
Chocadeiras, Furadeiras, Marteletes, Serras, Motores de Corrente Continua ou Alternada,
Velocidade de Carros Eltricos, Ventiladores, Eletrodomsticos, Lmpadas (exceto
fluorescentes), Bombas Hidrulicas quaisquer, e milhares de outros equipamentos,
respeitando-se e analisando-se previamente se a carga (equipamento ou ferramenta) se
adapta a controle de corrente
2. Diagrama Eltrico
O diagrama eltrico do projeto segue em anexo.
O circuito pode ser dividido em 3 partes, as quais so: Controle Composto pela plataforma Arduino, LCD, botes e potencimetro
responsveis por selecionar o modo de controle do DIMMER, se ser por botes
ou por potencimetro.
-
7/24/2019 Projeto Arduino - DIMMER
3/12
Figura 1: Circuito de controle
Fonte: Do Autor
Circuito de potncia Onde se encontra a carga (nesse diagrama demonstrada
pela lmpada), o TRIAC (BT137E 600R). Fato interessante e que deve ser
observado em todos os projetos sempre que possvel isolar o circuito de potncia
do circuito de controle, nesse diagrama os opto acopladores PC817 esto
desempenhando esse papel. O TRIAC recebe o pulso de disparo pelo opto
acoplador que por sua vez recebe o sinal advindo do PIN10 da plataforma
Arduino.
Figura 2: Circuito de Potncia
Fonte: Do Autor
Por fim, o circuito deteco de passagem por zero. Este circuito responsvel por
indicar ao controlador toda passagem pelo zero. por meio dele que cria se a base
de tempo para disparar no momento exato o TRIAC para obter a mxima, mdia,
mnima potencia, ou qualquer seja a potncia que se deseja pra carga no momento
10
TRIAC
A
K
C
E
1
2
4
3
PC817
1k
DGND
100R
+12VL1
VSINE
-
7/24/2019 Projeto Arduino - DIMMER
4/12
Figura 3:Circuito deteco passagem por zero.
Fonte: Do Autor
O circuito de deteco de passagem funciona da seguinte maneira.
Figura 4: Sinal de Sada optoacoplador
Fonte: Do Autor
Toda vez que a onda de entrada passa pelo zero o optoacoplador entra em corte,enviando sinal alto pro Arduino. No cdigo, que ser apresentado adiante, tem uma
interrupo externa que acionada por esse circuito (esse circuito est conectado no PIN2
da plataforma Arduino). Toda vez que o sinal enviado pelo optoacoplador muda de HIGH
para LOW (modo FALLING) ativa a interrupo executando a funo que trata dessa
interrupo.
3. HARDWARE
2 A
K
C
E
1
2
4
3
PC817
1k1k
+5V
DGND
1N4007
-
7/24/2019 Projeto Arduino - DIMMER
5/12
3.1. Controle
Constitudo pela Plataforma Arduino UNO R3, LCD 16x2, PushButtons, Sensor
de posio (potencimetro).
A alimentao da plataforma Arduino uma fonte chaveada de 9V 1A. A partir
dela na plataforma Arduino disponibiliza uma fonte de 5V que utilizada para alimentar
os elementos de controle.
3.2. Potncia
Constitudo pelo TRIAC BT137 600R, suporta at 8A e 600V. Trafo abaixador
de 220/12V 1A para reduzir a tenso para a ponte utilizada pelo circuito de deteco de
passagem pelo zero e tambm para uma fonte linear de 12V usada para alimentao do
optoacoplador responsvel pelo disparo do gate do TRIAC.
Utiliza-se tambm o optoacoplador PC387.
Os optoacopladores so elementos de proteo, isolam o circuito de controle do
de potncia.
Figura 5: Optoacoplador PC817
Fonte: Google Imagens modificado pelo autor
O PC817 possui um diodo emissor de luz interno, que ao aciona-lo satura o
fototransistor.
-
7/24/2019 Projeto Arduino - DIMMER
6/12
6
4. CDIGO
#include "LiquidCrystal.h"
#include "TimerOne.h"
#define bDiminui A2
#define bEnter A3
#define bAumenta A4
#define potenciometro A5
#define triacGatePin 10
#define display7
intvalorPotenciometro =0;
inti =0; //contador para o lao for
intPotenciaDimmer =0; //Potencia do Dimmer de 0 a 100%
intProgressoBarra =0; //Progresso da Barra no LCD de 0 a 16charstate =1; //varivel que guarda posio atual do menu
LiquidCrystallcd (12,11,6,5,4,3); //Declarao do objeto tipo lcd
//Cria Caracterer que preencher a barra de progresso
bytepBar[8] ={
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
};
//================================================================== SETUP
voidsetup()
{
lcd.begin(16,2); //Iniciando a biblioteca do LCD
pinMode(bDiminui,INPUT); //Botes
pinMode(bEnter,INPUT);
pinMode(bAumenta,INPUT);
pinMode(display,OUTPUT);
pinMode(potenciometro,INPUT);
pinMode(triacGatePin,OUTPUT);
digitalWrite(bDiminui,HIGH); //Aciona o pull-up interno dos botes
digitalWrite(bEnter,HIGH);
digitalWrite(bAumenta,HIGH);
digitalWrite(display,7);
//Cria o caracter da barra de progresso
lcd.createChar(0,pBar);
//Interrupes
attachInterrupt(0,PassagemPorZero,FALLING); //associa interrupcao INT0(PIN2) com funcao PassagemPorZero
}
-
7/24/2019 Projeto Arduino - DIMMER
7/12
7
//=================================================================== LOOP
/* * O programa constituido de apenas 3 telas: * TELA 1: (state == 1)
* Aparecer a seguinte mensagem no LCD: * PROJETO
ARDUINO * DIMMER * * O usurio tem a opo
de pressionar o botao: * bAumenta - Avana pra TELA 2* bDiminui - Retorna pra TELA 3 * bEnter -
No executa nenhuma funo * * TELA 2: (state == 2) * Aparecer a
seguinte mensagem no LCD: * CONTROLE BOTAO
* BARRA DE PROGRESSO * * O usurio tem a opo
de pressionar o botao: * bAumenta - Avana pra TELA 3
* bDiminui - Retorna pra TELA 1 * bEnter
- habilita a Funo da TELA 2 (CONTROLE POR
BOTOES) * * TELA 3: (state == 3)
* Aparecer a seguinte mensagem no LCD: * CONTR POTENC
* BARRA DE PROGRESSO * * O usurio tem a opo
de pressionar o botao: * bAumenta - Avana pra TELA 1
* bDiminui - Retorna pra TELA 2 * bEnter
- habilita a Funo da TELA 3 (CONTROLE PORPOTENCIOMETRO) * */
voidloop()
{
delay(300);
switch(state) { // Define/checa qual tela atual
est
//*************************************************************************
** TELA 1
case1: // executado quando na TELA 1
switch(VerificaBotao()) {
casebAumenta:
lcd.clear(); //Limpa telaMudaParaTela(2); //Avana para TELA 2
break;
casebDiminui:
lcd.clear(); //Limpa tela
MudaParaTela(3); //Retorna para TELA 3
break;
casebEnter:
MudaParaTela(1); //Caso apertar o bEnter no
acontecer nada
break; //Continua na TELA 1
default: // Caso nenhum boto tenha sido
apertado,
MudaParaTela(1); // Continua na TELA 1.
}
break;
//*************************************************************************
** FIM TELA 1
//*************************************************************************
** TELA 2
case2: // executado quando na TELA 2
switch(VerificaBotao()) {
casebAumenta:
lcd.clear(); //Limpa tela
MudaParaTela(3); //Muda para TELA 3
break;
casebDiminui:
lcd.clear(); //Limpa TELA
MudaParaTela(1); //Muda para TELA 1
-
7/24/2019 Projeto Arduino - DIMMER
8/12
8
break;
casebEnter:
ControlePorBotao(); //Executa Funo
ControlePorBotao();
break;
default:MudaParaTela(2); //Continua na TELA 2 mesmo no
pressionando nenhum botao
}
break;
//*************************************************************************
** FIM TELA 2
//*************************************************************************
** TELA 3
case3: // executado quando na TELA 3
switch(VerificaBotao()) {
casebAumenta:
lcd.clear(); //Limpa telaMudaParaTela(1); //Muda para TELA 1
break;
casebDiminui:
lcd.clear(); //Limpa tela
MudaParaTela(2); //Muda para TELA 2
break;
casebEnter:
ControlePorPotenciometro(); //Executa funo
ControlePorPotenciometro();
break;
default:
MudaParaTela(3); //Continua na TELA 3 memso no
pressionado nenhum botao}
break;
//*************************************************************************
** FIM TELA 3
default:;
}
}
//============================================== FIM da funo LOOP
//============================================== Verifica Boto
/* * Essa Funo verifica qual o botao foi pressionado e * retorna o botao
para onde foi chamada */
charVerificaBotao() {
if(digitalRead(bAumenta) ==0)
{
returnbAumenta;
}else
if(digitalRead(bDiminui) ==0)
{
returnbDiminui;
}else
if(digitalRead(bEnter) ==0)
{
returnbEnter;
} else
return0;
}
-
7/24/2019 Projeto Arduino - DIMMER
9/12
9
//============================================== Fim da funao Verifica
Boto
//============================================== Verifica Boto
/* * Essa Funo responsvel por escrever o conteudo * de cada tela *
* TELA 1: * PROJETO ARDUINO * DIMMER * TELA 2:* CONTROLE BOTAO * * TELA 3: * CONT POTENC
* * */
voidMudaParaTela(chartela)
{
state =tela;
if(tela ==1)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("PROJETO ARDUINO");
lcd.setCursor(0,1);
lcd.print("DIMMER");
}if(tela ==2)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("CONTROLE BOTAO");
lcd.setCursor(0,1);
lcd.print("Press bEnter");
}
if(tela ==3)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("CONT POTENC");lcd.setCursor(0,1);
lcd.print("Press bEnter");
}
return;
}
//============================================== Fim MudaParaTela
//============================================== ControlePorBotao
/* * Funo ControlePorBotao - Permite controlar o dimmer pelos botoes:
* Se pressionar o botao: * bAumenta - Aumenta a barra de
progresso e a potencia na lampada * bDiminui - Diminui a barra de
progresso e a potencia na lampada * bEnter - Interrompe a Funo e
retorna TELA 2 sem barra de progresso */
voidControlePorBotao()
{
delay(300); //tempo do botao para no sair assim que
entrar na funo
while(digitalRead(bEnter) ==1)
{
lcd.clear();
lcd.print("CONTROLE BOTAO");
//Verifica qual botao foi pressionado para aumentar ou diminuir a barra
de progresso e a Potencia da lampada
if(digitalRead(bAumenta) ==0 &&ProgressoBarra 0)
{
ProgressoBarra --;
-
7/24/2019 Projeto Arduino - DIMMER
10/12
10
}
PotenciaDimmer =int(map(ProgressoBarra,0,16,0,
100)); //Equivalencia entre as variaveis ProgressoBarra e PotenciaDimmer
//Print a barra de progressofor(i=0; i
-
7/24/2019 Projeto Arduino - DIMMER
11/12
11
voidPassagemPorZero()
{
if(PotenciaDimmer >0) {
longdimtime =int(map(PotenciaDimmer,0,100,8000,150)); // calcula
o tempo de delay para o disparo do TRIACTimer1.initialize (dimtime); // inicializa o TIMER1 com o delay
calculado
Timer1.attachInterrupt(gateTRIAC); //associa a funcao gateTRIAC
com Interrupcao do TIMER1
Timer1.start(); // inicia contagem TIMER1
} else{
digitalWrite(triacGatePin,LOW); // mantem gate do TRIAC desativado.
Timer1.stop();
}
}
//============================================== Fim da funao
PassagemPorZero
//============================================== gateTRIAC
/* * Trata a interrupo interna do TIMER1 gerando pulso no gate do TRIAC
*/
voidgateTRIAC () { // trata interrupcao do TIMER1 gerando pulso no gate
do TRIAC
digitalWrite(triacGatePin,HIGH); // dispara o Triac
delayMicroseconds(15); // aguarda 15 microsegundos para garantir disparo
do TRIAC
digitalWrite(triacGatePin,LOW); // desabibilta gate do TRIAC
Timer1.stop();
}
//============================================== Fim da funo gateTRIAC
-
7/24/2019 Projeto Arduino - DIMMER
12/12
12
ANEXO ADIAGRAMA ELTRICO
2
A5
A4
A3
A2
10
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9
D1
8
D0
7
E
6
RW
5
RS
4
VSS
1
VDD
2
VEE
3
+5V
TRIAC
A
K
C
E
1
2
4
3
PC817
1k1k
+5V
A
K
C
E
1
2
4
3
PC817
1k
DGND
DGND
100R
DGND
+12VL1
VSINE
VI1
VO 3
GND
2
7812
33uF
33uF
1N4007
1N40071k
LED
+12V
1k 1k 1k
DGND
+5V
100k
DIGITAL (PWM~)
ANALOG IN
AREF
1312~11~10
RX1
SIMULINOARDUINO
A0 A1 A2 A3 A4 A5RESET
5V GND
POWER
ATMEGA328P
ATMEL
www.arduino.cc
blogembarcado.blogspot.com
012345678910
11
12
13
A5
A4
A3
A2
A1
A0
SIM1SIMULINO UNO