quinta-feira, 4 de novembro de 2010

Dimmer futurístico & automação residencial open source

Nossos projetos de eletrônica e open source hardware baseados em Arduino / Atmega não param!

Antes de contar detalhes, vejam o resultado do projeto do dimmer futurístico neste pequeno vídeo do Youtube:



Com o grande apoio do Paulo Carlos dos Santos, da empresa BR-o-BOT, desenvolvemos um dimmer digital que pode ser facilmente acoplado no Arduino ou qualquer outra placa controladora. O resultado é que você consegue controlar a intensidade de brilho de uma lâmpada incandescente.  Dependendo dos circutos que você colocar neste esquema, você pode controlar um ventilador, chuveiro, ou fazer um ferro de solda com controle de potência!

Os desafios propostos neste desenvolvimento foram bem interessantes e pessoalmente foram verdadeiras aulas práticas de eletrônica e microcontroladores. 

A primeira tentativa que fizemos utilizamos um isolador ótico simples e tentamos usar a PWM para controlar a potência, mas o resultado com a lâmpada não deu certo: ela ficava piscando. Então Paulo pesquisou e me passou uma solução mais trabalhosa mas que funcionaria.

Neste novo esquema elétrico usamos dois isoladores óticos: 4N35 um MOC3021. O primeiro é utilizado para detectar a passagem da corrente alternada por zero e interromper o ATMega cada vez que isso acontecere, no caso do Brasil com 60hz, 120 vezes por segunda a corrente passa por 0. Neste momento é onde temporizamos  a abertura do TRIAC e simulamos o controle de potência. Veja o esquema elétrico:




Segue o código-fonte para Arduino. Você pode mudar a intensidade alterando o valor da variável dim entre 1 e 120, sendo que 1 é o mais forte e 120 praticamente desligada. Este programa permite alteração desta variável por I2C ou por Serial:

/*

#include 
int AC_pin = 3;
volatile long dim = 60;

void setup(){
pinMode(AC_pin, OUTPUT);
Serial.begin(9600);
attachInterrupt(0, light, CHANGE);
Wire.begin(66);
Wire.onReceive(receiveEvent);
}

void receiveEvent(int howMany){
char comando[16];
int counter=0;
while(1 < Wire.available())  {
char c = Wire.receive();
comando[counter++]=c;
Serial.print(c);
}  

int x = Wire.receive();
Serial.println(x);
Serial.println("Evento");
Serial.println(howMany);
//value, fromLow, fromHigh, toLow, toHigh)  
dim = map(comando[1], 48,57,10,120);
} 


void light(){
if(dim<125) {
long dimtime = (60*dim);  // eval the proper pause to fire the triac
delayMicroseconds(dimtime);  // delay the dim time
digitalWrite(AC_pin, HIGH);  // fire the Triac
delayMicroseconds(1);  // pause briefly to ensure the triac turned on
digitalWrite(AC_pin, LOW);   // turn off the Triac gate (triac will not turn off until next zero cross)
}  else {
digitalWrite(AC_pin, LOW);   // turn off the Triac gate (triac will not turn off until next zero cross)  
}
}

void loop(){
if (Serial.available() > 0) {
byte inByte = Serial.read();
dim = inByte;  }
}




E na etapa seguinte integramos este circuito com o ping da Parallax para ter o controle de intensidade "on the air". Bem, isso deixamos para um próximo post, por enquanto vai se divertindo com este circuito!

Ah, em tempo, a lista de materiais para você comprar e montar:

- 4 resistores de 47K (R1 a R4)
- 1 resistor de 10k (R5) (se não tiver 1k e 10k não é eletrônica!)
- 2 resistores 330 (R6 e R7)
- TRIAC BTA16
- 1 isolador 4N35
- 1 isolador MOC3021

Preço da lista: menos que R$ 10.

Vinicius Senger
http://twitter.com/vsenger
http://twitter.com/eletronlivre
http://loja.eletronlivre.com.br
http://www.globalcode.com.br/instrutores/ViniciusSenger