Sei sulla pagina 1di 6

Controle TRIAC com Arduino (Dimmer)

Publicado em outubro 2, 2011por efloyola

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 #include <TimerOne.h> // inclui biblioteca Timer1

3 #define triacApin 4 // Define que o Dimmer ser comandado pelo pino 4


4 int frequencia = 60;

5 int stateTriacA = 0;

int power = 0; //inicializa variavel que controla potencia na lampada com 0 (


6

void setup()
8
{
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 casa

13
// Initialize the interruption time Timer1

14
Timer1.initialize(); // Initialize TimerOne library for the freq we need

15 // Attach the interrupt 0 to pin 2 for the detection of zero crossing (Zero Cr

16 attachInterrupt(0, zero_cross_detect, FALLING); // Attach an Interrupt to Pin

17 }

18

19 void loop()

20 {

int i = 0;
21

int read_data[2];
22
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
long dimtime = int(map(power,0,100,8000,150)); // calcula o tempo de delay pa

36 Timer1.attachInterrupt(gateTRIAC, dimtime); //associa a funcao gateTRIAC com

37 Timer1.start(); // inicia contagem TIMER1

38 }else{

39 digitalWrite(triacApin, LOW); // mantem gate do TRIAC desativado.

40 Timer1.stop();

}
41

}
42

43
44 void gateTRIAC ()

45 { // trata interrupcao do TIMER1 gerando pulso no gate do TRIAC

digitalWrite(triacApin, HIGH); // dispara o Triac


46

delayMicroseconds(5); // aguarda 5 microsegundos para garantir disparo do TRI


47
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
resultado = ((variavel1-'0')*10)+(variavel2-'0');

55 return resultado;

56 }

57

58

59

60

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.

http://efloyola.wordpress.com/2011/10/02/controle-triac-com-arduino-dimmer/

Potrebbero piacerti anche