Dimmer - TRIMPOT.ino

Embed Size (px)

DESCRIPTION

Programação arduino do dimmer corrente alternada utilizando TRIAC, 4n25, MOC3010 e potenciômetro

Citation preview

//Pinos de Entrada/Saidaint sync = 22; //sinal para sincronismo (entrada)int trigger = 23; //pino que aciona o MOC3020 (saida)int analogPin = 0; //potenciometrono pino analogico 0//Variaveisfloat power = 0; //variavel que armazena a potencia na cargaunsigned int timeToWait = 8333; //tempo de espera apos a passagem pelo zero para disparar o TRIAC (em microssegundos)const int halfCycle = 8333; //tempo em microssegundos de um semiciclo da rede eletricaint pulseWidth; //tempo de duracao do pulso de disparoint state = 0; //recebe o estado do sinal de sincronismoint previousState = 0; //armazena o estado anterior do sinal de sincronismo para depois ser comparadovoid setup(){ pinMode(trigger, OUTPUT); pinMode(sync, INPUT); digitalWrite(trigger, LOW); //assegura que a saida ira iniciar em zero}void loop(){ boolean turnOff = 0; //flag para indicar quando deve-se desligar a lampada boolean maxPower = 0; //flag para indicar quando deve-se transmitir potencia maxima para a lampada power = (analogRead(analogPin) / 1023.0); //faz calculo da potencia na carga baseado na leitura do TRIMPOT timeToWait = (int)(halfCycle * power); //calcula o tempo para o disparo do TRIAC com base na potencia estabelecida /*Habilita flags de acordo com o valor de timeToWait*/ if(timeToWait = 6000) turnOff = 1; /*Calcula tempo de duracao do pulso de disparo se a lampada nao for ficar 100 acesa nem apagada*/ if( (!maxPower)&&(!turnOff) ){ pulseWidth = halfCycle - timeToWait - 1000; if(pulseWidth < 0) pulseWidth = 0; } /*Le estado do sinal de sincronismo*/ state = digitalRead(sync); /*Se a potencia for maxima, deixa o trigger acionado direto*/ if(maxPower) digitalWrite(trigger, HIGH); /*Se o estado do sinal de sincronismo mudou e a lampada nao deve ficar apagada*/ else if( (turnOff == 0)&&(state != previousState) ){ previousState = state; //armazena estado atual delayMicroseconds(timeToWait); //espera tempo para disparo digitalWrite(trigger, HIGH); //aciona sinal de disparo (trigger) delayMicroseconds(pulseWidth); //aguarda largura de pulso digitalWrite(trigger, LOW); //desliga pulso de disparo (trigger) }//end if}//end void loop