projeto arduino - dimmer

Upload: carlos-alexandre

Post on 22-Feb-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

  • 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