Atualizado 12/11/2013. Trabalhar com circuito de corrente alternada e arduino no to simples assim, porm um pouco de persistncia e pesquisa trar resultados interessantes. Encontrei um projeto com um Optoacoplador MOC3020 que capaz de executar esta atividade. importante saber que no simplesmente reduzir e aumentar a luminosidade ou a velocidade de um motor o circuito precisa controlar o ngulo de disparo do TRIAC (pesquisa como um TRIAC funciona). A arduino possui uma porta que deve ser utilizada como interrupo para que seja possvel utilizar o sinal de um circuito de deteco de passagem pelo zero. CUIDADO CIRCUITO 127 VOLTS, RISCO DE CHOQUE ELTRICO!!! Circuito Bsico
Componentes: CI MOC3020 TRIAC BTA12-600 CI H11AA1 Resistores 180, 2,4K, 10K, 33K Capacitor 0,01uF Vdeo de Resultado:
Vdeo 2
Com este circuito possvel controlar a tenso em cargas de corrente alternada 127 Volts 60Hz com limitao de corrente do TRIAC BTA12-600 que de 12A . (Ex.: Motores, Lmpadas, Ventiladores) Cdigo Arduino: 1 2 3 #include <TimerOne.h> // inclui biblioteca Timer1
#define triacApin 4 // Define que o Dimmer ser comandado pelo pino 4 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 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 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(); } }
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 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; } Links de Referncia: Fritzing Schema: https://drive.google.com/file/d/0B2AbCxM9Dr_wRlItNFplMzhoOWs /edit?usp=sharing Biblioteca TimeOne: https://drive.google.com/file/d/0B2AbCxM9Dr_wejNXdUJLemQzT k0/edit?usp=sharing a) http://arduino.cc/forum/index.php/topic,22512.0.html b) http://blog.eletronlivre.com.br/2011/02/dimmer-digital-futuristico-com- arduino.html Dica Importante: Aps tentar utilizar a biblioteca TimerOne mais recente (atualiza) percebi que o circuito no funcionou, est compartilha acima a biblioteca que est funcionando.