Vamos ver um esquema do Arduino utilizando um Ethernet Shield e um Rele Shield para acender uma lâmpada pela internet, controle remoto, Smartphone ou qualquer outro dispositivo com acesso a internet ou rede que os equipamentos estão inseridos.
No esquema abaixo o usuário dispara o comando através de um celular o comando segue pela internet, podemos ter um servidor para acessar nosso comando de qualquer lugar com internet, depois disso o comando é recebido pelo ethernet shield que é o dispositivo que liga na rede para receber os comandos e faz a comunicação com o Arduino, depois que os dados são transferidos para o Arduino o mesmo envia o pulso elétrico para o rele shield que por sua vez acionara os equipamentos escolhidos.
|
Esquema de ligação de equipamentos elétricos - automação |
Equipamentos necessários:
Rele shield que conectara nos equipamentos elétricos da rede, nele nos podemos ligar lâmpadas, motores elétricos de portões, ventiladores, ar condicionado, etc. No modelo de shield abaixo podemos ligar 4 equipamentos.
|
Rele Shield |
Para ligar nosso equipamentos ligaremos o fio de tensão vermelho 110v ou 220v no primeiro conector do rele que é o de posição 'normalmente aberto' que fica do lado das numerações e fio verde ligaremos no pino do meio que é o 'comum' faremos isso para cada equipamento que quisermos ligar e o equipamento conectar ao neutro da rede elétrica, sempre prestar atenção na hora das tenções de ligação com a capacidade de seu rele shield.
|
Esquema de ligação do Rele |
Arduino é a placa de controle I/O que serve de controle para diversos sistemas, o Arduino é um projeto que engloba software e hardware e tem como objetivo fornecer uma forma fácil para prototipar. O arduino é placa que reune todos os shields ele que faz a comunicação entre eles.
|
Arduino + Rele Shield |
Código para implementação
Essa primeira linha de código deve ser adicionada ao arduino, lembrando de alterar as linhas em laranja para os dados da sua rede.
1. #include <SPI.h>
2. #include <Ethernet.h>
3.
4. //Configurações
do Ethernet Shield
5.
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
6.
byte ip[] = { 192,168,2, 22 }; // ip que o arduino assumirá
7.
byte gateway[] = { 192,168,2, 1 }; // ip do roteador
8.
byte subnet[] = { 255, 255, 0, 0 };
9.
10. //
String que representa o estado dos dispositivos
11.
char Luz[7] = "0000L#";
12.
13.
Server server(8081); // Cria o servidor na porta 8081
14.
15. //
String onde é guardada as msgs recebidas
16. char msg[7] = "0000L#";
17.
18. void setup() {
19. Ethernet.begin(mac, ip, gateway, subnet);
20. server.begin();
21. pinMode(A0,OUTPUT);
22. pinMode(A1,OUTPUT);
23. pinMode(A2,OUTPUT);
24. pinMode(A3,OUTPUT);
25. pinMode(A4,OUTPUT);
26. pinMode(A5,OUTPUT);
27. }
28.
29. void loop() {
30.
Client client = server.available();
31. //
SE receber um caracter...
32.
if (client) {
33. //
guarda o caracter na string 'msg'
34.
msg[1]=msg[2]; msg[2]=msg[3]; msg[3]=msg[4]; msg[4]=msg[5];msg[5]=msg[6];
35. msg[6] = client.read();
36.
37. if (msg[6]=='#') {
38.
switch(msg[5]) {
39.
case 'R':
40. //
Se receber o comando 'R#' envia de volta o status dos
41. //
dispositivos. (Que é a string 'Luz')
42. client.write(Luz);
43. break;
44. case 'P':
45. //
Caso P#, aciona o pino do portão pequeno por 1s.
46. digitalWrite(A4,HIGH);
47. delay(1000);
48. digitalWrite(A4,LOW);
49. break;
50.
case 'G':
51. //
Caso G#, aciona o pino do portão pequeno por 1s.
52. digitalWrite(A5,HIGH);
53. delay(1000);
54. digitalWrite(A5,LOW);
55. break;
56.
case 'L':
57. //
Caso L#, ele copia os 4 bytes anteriores p/ a
58. //
string 'Luz' e cada byte representa um
59. //
dispositivo, onde '1'=ON e '0'=OFF
60.
Luz[0]=msg[1];
61.
Luz[1]=msg[2];
62.
Luz[2]=msg[3];
63. Luz[3]=msg[4];
64. if (Luz[0]=='1') digitalWrite(A0,HIGH);
elsedigitalWrite(A0,LOW);
65. if (Luz[1]=='1') digitalWrite(A1,HIGH);
elsedigitalWrite(A1,LOW);
66. if (Luz[2]=='1') digitalWrite(A2,HIGH);
elsedigitalWrite(A2,LOW);
67. if (Luz[3]=='1') digitalWrite(A3,HIGH);
elsedigitalWrite(A3,LOW);
68. break;
69.
70. }
71.
}
72.
}
73.
}
Bloco PHP, controla o arduino: Esse bloco deve ser hospedado localmente em um servidor ou na web.
1. <html>
2. <head></head>
3. <body>
4.
5. <?php
6. $sock = socket_create(AF_INET, SOCK_STREAM,
SOL_TCP);
7. //
Se conecta ao IP e Porta:
8.
socket_connect($sock,"187.15.6.131", 8081);
9.
10. //
Executa a ação correspondente ao botão apertado.
11. if(isset($_POST['bits'])) {
12. $msg = $_POST['bits'];
13. if(isset($_POST['Fora' ])){ if($msg[0]=='1')
{ $msg[0]='0'; } else {$msg[0]='1'; }}
14. if(isset($_POST['Quarto1'])){
if($msg[1]=='1') { $msg[1]='0'; } else {$msg[1]='1'; }}
15. if(isset($_POST['Quarto2'])){
if($msg[2]=='1') { $msg[2]='0'; } else {$msg[2]='1'; }}
16. if(isset($_POST['Sala' ])){ if($msg[3]=='1')
{ $msg[3]='0'; } else {$msg[3]='1'; }}
17. if(isset($_POST['Pequeno'])){ $msg = 'P#'; }
18. if(isset($_POST['Grande' ])){ $msg = 'G#'; }
19. socket_write($sock,$msg,strlen($msg));
20.
}
21.
22.
socket_write($sock,'R#',2); //Requisita o status do sistema.
23.
24. //
Espera e lê o status e define a cor dos botões de acordo.
25. $status = socket_read($sock,6);
26. if (($status[4]=='L')&&($status[5]=='#'))
{
27. if ($status[0]=='0') $cor1 = lightcoral;
28. else $cor1 = lightgreen;
29. if ($status[1]=='0') $cor2 = lightcoral;
30. else $cor2 = lightgreen;
31. if ($status[2]=='0') $cor3 = lightcoral;
32. else $cor3 = lightgreen;
33. if ($status[3]=='0') $cor4 = lightcoral;
34. else $cor4 = lightgreen;
35.
36. echo "<form method =\"post\"
action=\"teste.php\">";
37. echo "<input type=\"hidden\"
name=\"bits\" value=\"$status\">";
38. echo "<button style=\"width:70;
background-color: $cor1 ;font: bold 14px Arial\" type = \"Submit\"
Name = \"Fora\">Fora</button></br></br>";
39. echo "<button style=\"width:70;
background-color: $cor2 ;font: bold 14px Arial\" type = \"Submit\"
Name = \"Quarto1\">Quarto1</button></br></br>";
40. echo "<button style=\"width:70;
background-color: $cor3 ;font: bold 14px Arial\" type = \"Submit\"
Name = \"Quarto2\">Quarto2</button></br></br>";
41. echo "<button style=\"width:70;
background-color: $cor4 ;font: bold 14px Arial\" type = \"Submit\"
Name = \"Sala\">Sala</button></br></br></br>";
42. echo "<button style=\"width:90;font:
bold 14px Arial\" type = \"Submit\"Name = \"Pequeno\">Portao
Pequeno</button></br></br>";
43. echo "<button style=\"width:90;font:
bold 14px Arial\" type = \"Submit\"Name = \"Grande\">Portao
Grande</button></br></br>";
44.
echo "</form>";
45.
}
46. //
Caso ele não receba o status corretamente, avisa erro.
47.
else { echo "Falha ao receber status da casa."; }
48. socket_close($sock);
49. ?>
50.
51. </body>
52. </html>
53.
Fonte dos códigos: José Luiz – Professor de Microcontrolador