Apresentamos neste post um projeto de automação residencial com Arduino, permitindo o controle de relés pela rede local ou até mesmo pela internet. Com ele, você pode controlar lâmpadas, eletrodomésticos ou outros equipamentos eletrônicos por meio de uma página web.

Para testes montamos um circuito com um módulo relé de 2 canais 5V e 2 lâmpadas ligadas à rede elétrica de 220 V. A página web está hospedada no site da FILIPEFLOP e você pode alterar o código para incluir mais funções, mudar o layout da página ou até mesmo implementar alguma solução de segurança com senha, por exemplo.

CIRCUITO AUTOMAÇÃO RESIDENCIAL

No nosso circuito vamos utilizar o material abaixo, que você encontra no Kit Automação Residencial com Arduino, disponível na loja FILIPEFLOP:

kit_automacao

O controle do módulo relé será feito pelas portas digitais 3 e 4 do Arduino, e a alimentação do módulo é feita pelo pino 5V. No circuito abaixo, utilizamos 2 lâmpadas ligadas à rede elétrica de 220V, portanto tome cuidado na hora de efetuar esse tipo de ligação, desligando o quadro geral de energia ou os disjuntores correspondentes ao circuito elétrico que você está utilizando.

modulo_rele_2canais_ethernet-shield

Após a montagem do circuito, ligue o Ethernet Shield ao seu roteador utilizando um cabo de rede com conector RJ45.

img_2862

PROGRAMA AUTOMAÇÃO RESIDENCIAL COM ARDUINO

A programação do Arduino utiliza a biblioteca Ethernet que já vem embutida na IDE do Arduino. Com ela, vamos criar um Web Server que vai receber as informações pela rede e acionar as portas  3 (relé 1) e 4 (relé 2).

No início do programa, altere as configurações de IP, default gateway e máscara de rede (linhas 15, 16 e 17) para que estejam adequadas à sua rede. O programa aguarda pela conexão do cliente (browser), e em seguida monta a página web com informações dos arquivos automacao_residencial.css e automacao_residencial.js, hospedados no servidor da FILIPEFLOP.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
//Programa: Automacao Residencial com Arduino e Ethernet Shield
//Autor: FILIPEFLOP
#include <SPI.h>
#include <Ethernet.h>
String readString;
int pino_rele1 = 3;
int pino_rele2 = 4;
boolean ligado = true;
boolean ligado_2 = true;
//Informacoes de endereco IP, gateway, mascara de rede
byte mac[] = { 0xA4, 0x28, 0x72, 0xCA, 0x55, 0x2F };
byte ip[] = { 192, 168, 0, 110 };
byte gateway[] = { 192, 168, 0, 1 };
byte subnet[] = { 255, 255, 255, 0 };
EthernetServer server(80);
void setup()
{
  Serial.begin(9600);
  pinMode(pino_rele1, OUTPUT);
  pinMode(pino_rele2, OUTPUT);
  //Inicializa Ethernet Shield
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
  Serial.println("FILIPEFLOP - Automacao Residencial");
  //Desliga os dois reles
  digitalWrite(pino_rele1, HIGH);
  digitalWrite(pino_rele2, HIGH);
}
void loop()
{
  EthernetClient client = server.available();
  if (client) {
    while (client.connected())
    {
      if (client.available())
      {
        char c = client.read();
        if (readString.length() < 100) {
          readString += c;
        }
        if (c == '\n')
        {
          //Controle do rele1
          Serial.println(readString);
          //Liga o Rele 1
          if (readString.indexOf("?ligar") > 0)
          {
            digitalWrite(pino_rele1, LOW);
            Serial.println("Rele 1 Ligado");
            ligado = false;
          }
          else
          {
            //Desliga o Rele 1
            if (readString.indexOf("?desligar") > 0)
            {
              digitalWrite(pino_rele1, HIGH);
              Serial.println("Rele 1 Desligado");
              ligado = true;
            }
          }
          //Controle do rele2
          Serial.println(readString);
          //Liga o Rele 2
          if (readString.indexOf("?2_ligar") > 0)
          {
            digitalWrite(pino_rele2, LOW);
            Serial.println("Rele 2 Ligado");
            ligado_2 = false;
          }
          else
          {
            //Desliga o Rele 2
            if (readString.indexOf("?2_desligar") > 0)
            {
              digitalWrite(pino_rele2, HIGH);
              Serial.println("Rele 2 Desligado");
              ligado_2 = true;
            }
          }
          readString = "";
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          client.println("<html>");
          client.println("<head>");
          client.println("<title>FILIPEFLOP - Automacao Residencial</title>");
          client.println("<meta http-equiv='Content-Type' content='text/html; charset=ISO-8859-1'>");
          client.println("<meta name='viewport' content='width=720, initial-scale=0.5' />");
          client.println("<link rel='stylesheet' type='text/css' href='http://img.filipeflop.com/files/download/automacao/automacao_residencial.css' />");
          client.println("<script type='text/javascript' src='http://img.filipeflop.com/files/download/automacao/automacao_residencial.js'></script>");
          client.println("</head>");
          client.println("<body>");
          client.println("<div id='wrapper'><img alt='FILIPEFLOP' src='http://img.filipeflop.com/files/download/automacao/logoFF.jpg'/><br/>");
          client.println("<div id='div1'>Rele 1</div>");
          client.println("<div id='div2'>Rele 2</div>");
          client.print("<div id='rele'></div><div id='estado' style='visibility: hidden;'>");
          client.print(ligado);
          client.println("</div>");
          client.println("<div id='botao'></div>");
          client.println("<div id='botao_2'></div>");
          client.print("<div id='rele_2'></div><div id='estado_2' style='visibility: hidden;'>");
          client.print(ligado_2);
          client.println("</div>");
          client.println("</div>");
          client.println("<script>AlteraRele1()</script>");
          client.println("<script>AlteraRele2()</script>");
          client.println("</div>");
          client.println("</body>");
          client.println("</head>");
          delay(1);
          client.stop();
        }
      }
    }
  }
}

TESTES ETHERNET SHIELD E ACESSO PÁGINA WEB

Antes de acessar a página, verifique se o IP que você configurou no programa está respondendo adequadamente. Para isso, utilize o comando “ping” na janela de comando:

teste_ping

Se tudo estiver ok, acesse um browser (Chrome, Firefox, etc) colocando na barra de endereços o IP que você configurou no programa. No nosso caso, o IP 192.168.0.110:

tela_browser

Essa é apenas uma sugestão de uso, e você pode usar o mesmo circuito para ligar outros aparelhos eletrônicos, respeitando as especificações máximas de tensão e corrente dos relés.

Achou muito trabalhoso? Conheça nosso sistema e deixe o trabalho duro com a gente.

Fonte: Blog Flip-Flop