Hacking Class ­ Controlando tomadas da sua casa via Internet 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 micro­controlador 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 Hacking Class Relê simples de contato duplo NA / NF 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 micro­controlador 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. Placa Tomad@ Hacking Class Componentes da placa R1 e R2 = resistor 1k – para os transistores R3 e R4 = resistor 330R – para os leds D1 e D2 = diodo IN4007 Led1 e Led2 = led on / off Fusível 1 e Fusível 2 = proteção T1 e T2 = transistor para acionar bobina do relê Relê 1 e Relê 2 Bornes para encaixe dos fios de acionamento da saída do contato do relê Conectando seu Program­Me na placa Tomad@ Hacking Class Ligando a placa no Arduino 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 RS­232. 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=UTF8"); 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 Program­me conectado em 2 placas Tomad@ que farão a interface com as lâmpadas e um shield WIFI que fonecerá a conectividade IP ao Program­Me. Circuito para controle de 4 lâmpadas 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é. Vamos praticar? • Laboratório de uso de Arduino e placa tomad@ • Informaremos a Url para download dos slides em sala de aula