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
socket_connect($sock,"187.15.6.131", 8081);
ResponderExcluircomo conectar com servidor local???
Boa noite, ai coloca o ip fixo do servidor ou da sua máquina local, e depois a vírgula é a porta.
ExcluirOlá Henrique!
ResponderExcluirComo coloco o bloco PHP no servido ou nA WEB?
Edson
Em qualquer um dos dois é só você ir no bloco de notas colar o bloco e salvar como html, ou você hospeda na sua maquina local (Servidor) ou na web ...
ResponderExcluirEsta dando erro nessa linha
ResponderExcluirsocket_connect($sock,"187.15.6.131", 8081);
Esta dando erro nessa linha quado acesso no servidor.
ResponderExcluirsocket_connect($sock,"187.15.6.131", 8081);
Vc esta usando esse endereço de ip ou você substituiu pelo seu ? Todos os endereços de ip tem que ser compatíveis com a sua rede se no 192.168.2.22 se sua rede for 192.168.1.x coloque 192.168.1.22 por exemplo. Se sua máquina for local coloque 127.0.0.1 que é o localhost.
ExcluirVc tem que configurar o APACHE pra utilizar o socket.. tava com o mesmo problema só que meu professor de linguagem WEB resolveu isto pra mim
ExcluirFino d+ seu projeto. Consegui aki. Vc teria um tutorial de como vc fez esse projeto para eu ter um ideia mais profunda.
ResponderExcluirEu so desenhei não fiz o da minha casa ainda e o código fonte é do professor José Luiz, tem grandes projetos na área de automação. Quando for fazer o da minha casa posto o passo a passo direitinho.
ResponderExcluirPreciso fazer um projeto com jme para conversar com arduino. Parecido com o desse php aki. tem alguma referencia para que eu possa estudar, ou algum site com dias de como conectar um dispositivo móvel ao arduino por rede.
ResponderExcluirBoa noite,
ResponderExcluirEstou fazendo um projeto de conclusão de curso com o arduino e android. Teria algum site para indicar. Preciso fazer a comunicação dele com o celular para executar os mesmo procedimentos desse post, só que com android e não com php.
Tem muito material ai na net, achei esse aqui oh dê uma olhadinha para ver se lhe é útil grande abraço, http://www.slideshare.net/turicas/android-e-arduino-automacao-residencial
ExcluirNão entendi uma parte. Quando coloca o Ethernet Shield no arduino esse ocupa todoas entradas do dispositivo do arduino. Como faz então pra ligar o Reles?
ResponderExcluirBom dia amigo, o Ethernet Shield também tem os bornes igual o Arduino, você pode encaixar outro módulo em cima dele, ou ligar os reles...
ExcluirOi, gostaria de saber por que precisa de um servidor entre o usuário e o Arduino. Não é possível acessar o o shield Ethernet do Arduino diretamente por meio do celular ou do note?
ResponderExcluirbom dia arthur, preciso sua ajuda, vc tem apostilha pra eu instalar na minha casa. se estiver um link. obrigado
ResponderExcluirFala aew galera..
ResponderExcluirSo facinado por essas automações residenciais...
Só que so muito novo nisso e nao sei de praticamente nada...
Gostaria de saber qual o custo em equipamentos mais ou menos desse tutorial..
E se alguem me pudesse mandar um link com os equipamentos...
Muito obrigado.. e parabens pelo post
Não cheguei a implementar o projeto mais percebi que é um ótimo projeto. Parabéns. Arduino até que apareça algo de fato melhor de ser implementado, ele é e será uma ótima referencia para se praticar automação.
ResponderExcluirParabéns muito bom seu projeto.
ResponderExcluirObrigado, o código é crédito do José Luiz – Professor de Microcontrolador
Excluireu utilizo algum programa no celular pra ligar e desligar os equipamentos? caso sim, qual e como faço isso?
ResponderExcluireu utilizo algum programa no celular pra ligar e desligar os equipamentos? caso sim, qual e como faço isso?
ResponderExcluirOlá Arthur, parabéns pelo post, esta muito bem detalhado e otimo diagrama.
ResponderExcluirTenho aqui um problema e gostaria de sua ajuda.
Estou utilizando exatamente o esquema publicado aqui, porém estou utilizando além do Normalmente aberto do relê, o normalmente Fechado em conjunto com um interruptor paralelo de parede, isso para poder acender ou apagar (por exemplo. uma lampada) através do interruptor na parede.
Porém não consigo obter o status real da lampada (acesa ou apagada), pois posso ligar e desligar a lampada sem alterar o estado do relê (estando ele na posição NC ou NO).
Ou seja, mesmo que o rele esteja na posição Normalmente aberto (o que será LAMPADA DESLIGADA) ainda posso ligar a lampada pelo interruptor paralelo fisicamente na parede).
Sabe como posso fazer para obter o status real no browser ??
Obrigado, abs.
Alguém se habilita a me responder por que meu código só funciona quando salvo o arquivo como teste.PHP ??
ResponderExcluirPois quando salvo o arquivo como teste.HTML, ele não funciona, aparece erros... Tipo assim:
"; echo "
Lâmpada
"; echo "
Rádio
"; echo "
Ventilador
"; echo "
Sala
"; echo "
CONTROLE DO PORTÃO
"; echo "
Abrir
"; echo "
Fechar
"; echo ""; } // Caso ele não receba o status corretamente, avisa erro. else { echo "Falha ao receber status da casa."; } socket_close($sock); ?>
Amigo, o php, assim como asp/aspnet são linguagens de processamento em servidor. quando você salva em html ele vai ignorar o que está relacionado ao processamento do código e vai interpretar apenas a formatação HTML por isso você vê apenas o que a formatação consegue resolver.
Excluirpara processar o arquivo .PHP você precisa de um servidor web. vai ter que construir um no seu PC ou contratar algum serviço externo.
Amigo, verifica a linha 36. ;
ExcluirEla aponta para o arquivo "teste.php", basta troca por "teste.html"
Eu posso ligar mais de um rele shield ???
ResponderExcluirComo faço isso ???
Olá, primeiramente parabéns pela iniciativa, mesmo não sendo seu o código só o fato de querer compartilhar conhecimento já merece o parabéns.
ResponderExcluirAgora a duvida, conseguir fazer tudo, mas estou com um problema. Quando é pressionado um dos botões das luzes o arduino só executa um comando if, se tiver mais de um ele executa apenas o ultimo. Você ou alguém tem ideia de como resolver isso? Já tirei os switch case e usei apenas if e nada! sei que os comandos estão certos pois coloquei para exibir na pagina da internet o comando enviado e recebido e pq ele executa qqr if se eu comentar os outros.
Obrigado pela ajuda!
Olá, primeiramente parabéns pela iniciativa, mesmo não sendo seu o código só o fato de querer compartilhar conhecimento já merece o parabéns.
ResponderExcluirAgora a duvida, conseguir fazer tudo, mas estou com um problema. Quando é pressionado um dos botões das luzes o arduino só executa um comando if, se tiver mais de um ele executa apenas o ultimo. Você ou alguém tem ideia de como resolver isso? Já tirei os switch case e usei apenas if e nada! sei que os comandos estão certos pois coloquei para exibir na pagina da internet o comando enviado e recebido e pq ele executa qqr if se eu comentar os outros.
Obrigado pela ajuda!
ei alguem pode me explicar essa parte de "Bloco PHP, controla o arduino: Esse bloco deve ser hospedado localmente em um servidor ou na web." porque nao entendi como faz isso?
ResponderExcluirParabéns!
ResponderExcluirUm baita de um post, diga-se de passagem!
Boa noite, fantástico seu post, esta me ajudando bastante. Tenho duas dúvidas amigo. Você teria como me explicar o esquema elétrico para 2 relés ligando ele no arduino? Pois fazendo a ligação do seu esquema, percebo que os dois relés ficam com a luz vermelha da placa acesa, se clico na pagina php, ouço 1 relé funcionar ou outro nao. Ao inverter a ligação, o outro relé da mesma placa funciona e o anterior não. Ou seja o A0 ta conectado, já o A1 não entendi onde ligar. Abç
ResponderExcluirExiste alguma norma ABNT que proiba a utilização de relés para acionar lâmpadas?
ResponderExcluirEu posso colocar um circuito desses dentro de uma caixa da própria fiação?
Não tenho conhecimento João, mas creio que não pois todos os sistemas de automação usam relé para acionar as cargas, controladores de temperatura... Para uma melhor segurança é melhor colocar em uma caixinha separada para os fios não ficarem espremidos evitando futuros curtos.
ExcluirÉ possível incluir mais de um rele shield no mesmo arduíno?
ResponderExcluir