hacking class - controlando tomadas da sua casa via internet · servidor java recebe request http...
TRANSCRIPT
O que precisamos para controlar uma tomada via Web
• Microcontrolador
• Relê, transistor, diodo e resistor
• PC ou um shield Ethernet ou wifi para seu microcontrolador
Aqui vamos usar...
• Arduino
• Placa Tomad@
• PC e shield wifi para Arduino
Porque é necessário utilizar relés ?
• As portas de saída do microcontrolador (ATmega), utilizado nas placas Arduino, tem uma capacidade máxima de corrente de 40mA por porta. Essa corrente é suficiente apenas para alimentar uns 4 Leds comuns, portanto para acionar dispositivos que consomem correntes acima de 40mA em 5Volts, dispositivos de voltagens maiores e dispositivos alimentados com tensão AC, é necessário colocar um transistor e um relé entre o microcontrolador e a carga .
O que é um relé ?
Os relés são basicamente interruptores acionados elétricamente.
Os relés podem possuir um ou mais contatos (“interruptores”) sendo que esses contatos podem ser:
• NA (normalmente aberto) / NO (normal open) ou
• NF (normalmente fechados) / NC (normal closed) .
Como funciona um Relé• O acionamento dos contatos de um relé ocorre quando a sua bobina é energizada.
Nesse momento é criado um campo magnético que atrai uma alavanca responsável pelo acionamento dos contatos
• Para acionar um relé precisamos de transistor e diodo de proteção
relé simples relé duplo
Porque é necessário utilizar o transistor ?
• Existem relés bem pequenos que poderiam ser acionados diretamente por um microcontrolador, porém na maioria dos casos utilizamos um transistor entre a porta do microcontrolador e o relé devido a corrente necessária para ativar a bobina do relé ser maior que 40mA.
Tensão reversa nos relés• Ao desenergizar a bobina de um relé, ocorre um fenômeno que faz com
que seja gerada uma tensão reversa pela bobina. Devemos proteger o circuito responsável pelo acionamento, instalando um diodo em paralelo com a bobina.
Hacking Class Componentes da placa
R1 e R2 = resistor 1k – para os transistoresR3 e R4 = resistor 330R – para os ledsD1 e D2 = diodo IN4007Led1 e Led2 = led on / offFusível 1 e Fusível 2 = proteção T1 e T2 = transistor para acionar bobina do relêRelê 1 e Relê 2Bornes para encaixe dos fios de acionamento da saída do contato do relê
Hacking Class Ligando a placa na tomada
Devemos romper o fio de uma das fases;Cortamos o fio e vamos ligar cada uma das pontas em um dos bornes da placa
Hacking Class Código para ligar e desligar relê
void setup() { pinMode(2, OUTPUT); pinMode(3, OUTPUT);}
void loop() { digitalWrite(3, LOW); digitalWrite(2, HIGH); delay(1000); digitalWrite(2, LOW); digitalWrite(3, HIGH); delay(1000);}
Hacking Class Tomada com servidor Web no PC
1. Computador conectado na Web com servidor Java recebe request HTTP com solicitação para acionar a tomada
2. Este servidor web terá uma placa Arduino ligada permanentemente. O servlet (ou equiv) vai acionar a placa via comunicação serial RS232.
3. Para controlar as tomadas, vamos ligar a placa Tomad@ no Arduino. Essa placa possui um par de relês que podem ser ligados em uma tomada e acionados on / off através de sinal digital 0 ou 1
4. Vamos ligar uma tomada no relê da nossa placa ou então um aparelho qualquer.
Hacking Class Código Arduino
void setup() { Serial.begin(9600); pinMode(2, OUTPUT); pinMode(3, OUTPUT);}
void loop() { if(Serial.available() >0) { int incoming=Serial.read(); Serial.println("Recebendo dados"); Serial.println(incoming, DEC); acionarRele(incoming);// seu protocolo }}
Hacking Class Código Arduino
void acionarRele(int codigo) { if(codigo=65) { Serial.println("HIGH no rele 1"); digitalWrite(3, HIGH); } else if(codigo=66) { Serial.println("LOW no rele 1"); digitalWrite(3, LOW); } else if(codigo=67) { Serial.println("HIGH no rele 2"); digitalWrite(2, HIGH); } else if(codigo=68) { Serial.println("LOW no rele 2"); digitalWrite(2, LOW); }}
Hacking Class Código Servlet
response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { byte[] dados = new byte[1]; dados[0] = Byte.parseByte(request.getParameter("rele")); try { Arduino.enviar(dados);
...
Hacking Class Código Arduino.enviar(bytes) lib RXTX
outputStream = serialPort.getOutputStream(); serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
serialPort.notifyOnOutputEmpty(true);
outputStream.write(bytes); serialPort.close();
Controlando tomadas via Web utilizando shield wifi
• Nesta demonstração, controlaremos 4 lâmpadas via WEB utilizando o Programme conectado em 2 placas Tomad@ que farão a interface com as lâmpadas e um shield WIFI que fonecerá a conectividade IP ao ProgramMe.
Funcionamento
• Temos rodando no Arduino um mini servidor WEB que apresenta uma página bem simples onde podemos selecionar qual é o relé que desejamos ativar. Uma vez que selecionamos um dos relés, a aplicação detecta qual foi e inverte o nível aplicado na porta associada aquele relé.