Interruptor Touch - Diagrama e código fonte
Para montar este projeto, você precisa de conhecimentos básicos de Arduino e conhecimento médio em eletrônica, além de muito cuidado com a corrente AC, por isso aqui vai uma aviso inicial:
Atenção: Esse projeto é perigoso, usa corrente AC, qualquer falta de cuidado pode matar. Se você nunca mexeu com corrente AC antes, solicite o acompanhamento de um profissional.
Agora podemos ir a lista de componentes:
- Arduino, pode ser qualquer um, mas se for colocado dentro da tomada, use um Arduino Pro Mini ou outro Arduino pequeno.
- Resistor de 330 ohms
- Resistor de 1k
- Led Branco de alto brilho (ou outra cor que desejar)
- Transistor BC548 ou 2N2222
- Diodo 1N4004
- Relé 5v
- 10 resistores de 1M
Para a montagem não é necessário placa, você pode soldar um componente ao outro e usar termoretrátil para isolar (veja no post anterior).
O relé tem que ser escolhido de acordo com a potência da lâmpada e da voltagem da região onde você mora, na dúvida pergunte a um técnico. Onde diz "fios da lâmpada" são os dois fios anteriormente ligados ao interruptor normal, essa parte foi baseada neste post: Using relays with Arduino - leia antes de continuar.
O pedaço de metal que funciona como sensor pode ser até aquele lacre de lata de nescau/neston. Papel alumínio não funciona muito bem.
O resitor do touch, varia de 1M a 10M por isso coloquei na lista para que se compre 10 de 1M, você vai precisar testar esse valor no seu circuito, ele varia de acordo com o tamanho do metal do sensor, espessura do vidro e outros. Conforme testei, valores acima de 10M tornam o sensor "lento" ele demora a detectar o toque, mas isso pode variar de projeto pra projeto. Mais explicações na página do CapSense
Código fonte:
O código é Arduino 0022, não sei se funciona na IDE nova. A lib está no link CapSense acima.
#include
const int lampada = 8; //circuito do rele
const int led = 10; //led indicador do interruptor
const int cap1 = 4;
const int cap2 = 2;
const int ledL = 1; // valor PWM minimo para o led quando a lampada estiver desligada
const int sensibil = 5000; //varia de acordo com o resistor e tamanho da superficie capacitiva, mude para testar.
CapSense cs = CapSense(cap1,cap2);
bool ligado = 0;
void setup()
{
cs.set_CS_AutocaL_Millis( 0xFFFFFFFF);
pinMode(lampada, OUTPUT);
pinMode(led, OUTPUT);
analogWrite(led, ledL);
}
void loop()
{
long cap = cs.capSense(30); //chama a funcao que le a capacitancia...
if (cap > sensibil ) //...se for maior que o estipulado, acende ou apaga a luz,
{
if (ligado)
{
ligado = !ligado;
digitalWrite(lampada, ligado);
for (int i = 255; i > ledL; i--) //laco for para diminuir a luminosidade do led gradativamente. Durante este período (2seg) a cap sense nao eh chamada, o que garante que a lampada nao piscara e apagara novamente. O mesmo vale para o outro for.
{
analogWrite(led, i);
delay(5);
}
}
else
{
ligado = !ligado;
digitalWrite(lampada, ligado);
for (int i = ledL; i < 255; i++)
{
analogWrite(led, i);
delay(5);
}
}
}
}
É isso, qualquer pergunta usem os comentários.