Controle TRIAC com Arduino (Dimmer) Publicado em outubro em outubro 2, 2011por 2011p or efloyola efloyola
Atualizado 12/11/2013. Trabalhar com circuito de corrente alternada e arduino não é tão simples assim, porém um pouco de persistência e pesquisa trará resultados interessantes. Encontrei um projeto com um Optoacoplador MOC3020 que é capaz de executar esta atividade. É importante saber que q ue não é 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 interrupção para que seja possível utilizar o sinal de um circuito de detecção de passagem pelo zero. CUIDADO CIRCUITO 127 VOLTS, RISCO DE CHOQUE ELÉTRICO!!! Circuito Básico
Componentes: CI MOC3020 TRIAC BTA12-600 CI H11AA1 Resistores 180, 2,4K, 10K, 33K Capacitor 0,01uF Vídeo de Resultado: Vídeo 2
Com este circuito é possível controlar a tensão em cargas de corrente alternada 127 Volts 60Hz com limitação de corrente do TRIAC BTA12-600 que é de 12A . (Ex.: Motores, Lâmpadas, Ventiladores) Código Arduino: 1
#include
// inclui biblioteca Timer1
2 3
#define triacApin 4 // Define que o Dimmer será comandado pelo pino 4
4
int frequencia = 60;
5
int stateTriacA = 0;
6
int power = 0;
//inicializa variavel que controla potencia na lampada com 0
7 8
void setup() {
9 Serial.begin(9600);
10 pinMode(triacApin, OUTPUT);
11 digitalWrite(triacApin, LOW);
12 Serial.println("Controle de TRIAC.\r\nDigite o Percentual de Brilho (duas cas
13 // Initialize the interruption time Timer1
14 15
Timer1.initialize(); // Initialize TimerOne library for the freq we need // Attach the interrupt 0 to pin 2 for the detection of zero crossing (Zero C
16
attachInterrupt(0, zero_cross_detect, FALLING); // Attach an Interrupt to Pin
17
}
18 19
void loop()
20
{
21 22
int i = 0; int read_data[2]; while(i<2){
23 while(Serial.available()){
24
read_data[i] = Serial.read();
25
i++;
26 27
} } power = Concatena_Numeros(read_data[0],read_data[1]);
28 Serial.println(power);
29 30 }
31 32 void zero_cross_detect()
33 {
34 if(power > 0){
35 36
long dimtime = int(map(power,0,100,8000,150)); Timer1.attachInterrupt(gateTRIAC, dimtime);
37
Timer1.start();
38
}else{
39
digitalWrite(triacApin, LOW);
40
Timer1.stop();
41 42 43
} }
// calcula o tempo de delay p
//associa a funcao gateTRIAC com
// inicia contagem TIMER1
// mantem gate do TRIAC desativado.
44
void gateTRIAC ()
45
{
46 47
// trata interrupcao do TIMER1 gerando pulso no gate do TRIAC
digitalWrite(triacApin, HIGH); delayMicroseconds(5);
// dispara o Triac
// aguarda 5 microsegundos para garantir disparo do TR
digitalWrite(triacApin, LOW);
// desabibilta gate do TRIAC
48 Timer1.stop();
49 }
50 51 int Concatena_Numeros(int variavel1, int variavel2)
52 {
53 int resultado;
54 55 56
resultado = ((variavel1-'0')*10)+(variavel2-'0'); return resultado; }
57 58 59 60
Links de Referência: 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-comarduino.html Dica Importante: Após tentar utilizar a biblioteca TimerOne mais recente (atualiza) percebi que o circuito não funcionou, está compartilha acima a biblioteca que está funcionando.
http://efloyola.wordpress.com/2011/10/02/controle-triac-com-arduino-dimmer/