Controle TRIAC com Arduino (Dimmer)

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 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:

#include <TimerOne.h>   // inclui biblioteca Timer1

#define triacApin 4 // Define que o Dimmer será comandado pelo pino 4
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 loop()
{
int i = 0;
int read_data[2];
while(i<2){
while(Serial.available()){
read_data[i] = Serial.read();
i++;
}
}
power = Concatena_Numeros(read_data[0],read_data[1]);
Serial.println(power);

}

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();
}
}

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 Referência:

Fritzing Schema: https://drive.google.com/file/d/0B2AbCxM9Dr_wRlItNFplMzhoOWs/edit?usp=sharing

Biblioteca TimeOne: https://drive.google.com/file/d/0B2AbCxM9Dr_wejNXdUJLemQzTk0/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:
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.

Publicado em Arduino | Marcado com , , , , | 127 Comentários

Projeto – Alimentador

Conceito: Alimentar com água (um recipiente) e ração (dois recipientes) de forma automatizada evitando atrazos e esquecimentos na alimentação do animal de estimação.

Descrição: Sistema de Controle para abastecimento de Ração e Água automatizado por temporização. Os eventos serão registrados em Log e serão integrados via web.

Características técnicas:

  • Fonte de Alimentação 12 V (1A)
  • 2x Reles 5V
  • Mini Bomba 3Lt/min 1.2A @ 6V, 2.5A @ 12V
  • Motor Reduzido Torque: 200 N*cm 12V 15RPM
  • Arduino Diemilanove (ATmega 328)  7-12V – Memory: 16Kb / Current per Pin: 40mA / USB Cable
  • Placa Prototype 442 POINTS [EST58] 7 x 5 cm

O sistema é programado para ligar o relé da água 3 vezes ao dia (7:40, 12:40, 18:40) e o relé da ração 2 vezes ao dia (7:45, 18:45).

Esquema:

Programa do Arduino:
Alimentador_Cadelas_v2.pde
AjustaHora_PortaSerial.pde (Para ajustar o hora do sistema, utilizei o ‘Processing‘ que enviar a informações via serial para a placa)

Vídeo:

Detalhes do distribuidor em Y (Artifício Técnico)
Distribuidor_Racao1 Distribuidor_Racao2 Distribuidor_Racao3 Distribuidor_Racao4

Publicado em Arduino | Marcado com , , | 16 Comentários

Lançamento

Depois de mais de 10 anos aprendendo e trabalhando com tecnologia, entro no mundo da troca de informações através do Blog. Como tudo que faço deixo, busco sentido objetivo de minhas ações e atitudes, procurando algumas informações sobre troca de experiências.

Fica então a missão: Fornecer e encontrar informações que se acham disponíveis para conhecimento público, em condições de serem utilizadas para resolver problemas específicos e trazer benefícios. Gosto muito de temas ligados à tecnologia, logo pretendo disponibilzar meus projetos e assuntos de lido na minha carreira e na minha vida.

Sejam bem Vindos.

Achei um vídeo legal sobre Tecnologia…

Definição de Blog (by Wikipedia): Um blog (contração do termo Web log), também chamado de blogue em Portugal, é um site cuja estrutura permite a atualização rápida a partir de acréscimos dos chamados artigos, ou posts. Estes são, em geral, organizados de forma cronológica inversa, tendo como foco a temática proposta do blog, podendo ser escritos por um número variável de pessoas, de acordo com a política do blog.

Publicado em Uncategorized | Marcado com , , | Deixe um comentário