Interruptor Touch - Diagrama e código fonte
Autor: Saulo | Publicado: 2012-04-09T22:39:00-03:00

















Depois de muitas perguntas no post anterior (leia o post anterior primeiro), fiz um diagrama do circuito do interruptor touch, estou postando também o 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 releconst int led = 10; //led indicador do interruptorconst 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;&nbsp; //varia de acordo com o resistor e tamanho da superficie capacitiva, mude para testar.CapSense&nbsp;&nbsp; cs = CapSense(cap1,cap2);&nbsp;&nbsp;&nbsp;&nbsp; bool ligado = 0;void setup()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp; cs.set_CS_AutocaL_Millis(
0xFFFFFFFF);&nbsp;&nbsp; 
&nbsp; pinMode(lampada, OUTPUT);&nbsp; &nbsp; pinMode(led, OUTPUT);&nbsp; analogWrite(led, ledL);}void loop()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp; long cap =&nbsp; cs.capSense(30); //chama a funcao que le a capacitancia...&nbsp; if (cap &gt; sensibil ) //...se for maior que o estipulado, acende ou apaga a luz,

&nbsp; {&nbsp;&nbsp;&nbsp; if (ligado)&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ligado = !ligado;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitalWrite(lampada, ligado);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 for (int i = 255; i &gt; ledL; i--)&nbsp; //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.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; analogWrite(led, i);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delay(5);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ligado = !ligado;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitalWrite(lampada, ligado);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = ledL; i &lt; 255; i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; analogWrite(led, i);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delay(5);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; }&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }

É isso, qualquer pergunta usem os comentários.