Amigos estou com esse projeto bem no inicio...

Com ele eu ja estou acionando a lampada da minha sala via internet e intranet, o projeto foi adapitado do projeto do tuto do site engenheirando.com, ai vem o meu problema....

Estou querendo adicionar ao projeto um LCD 5110 para me dar informações como IP, temperatura, luminosidade, etc... mais não estou conseguindo de forma nenhuma, quando eu passo o meu codigo altera no IDE esta tudo certo, mais quando eu subo o codigo para o Arduino acontece que ou funciona os reles ou funciona o LCD 

AJUDEM AI!!!!!!!!!!

O CODIGO

#include <SPI.h>
#include <Ethernet.h>
#include <LCD5110_Basic.h>

LCD5110 myGLCD(9,10,11,12,13);
extern uint8_t SmallFont[];

//Configurações do Ethernet Shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,25, 177 }; // ip que o arduino assumirá
byte gateway[] = { 192,168,25, 1 }; // ip do roteador
byte subnet[] = { 255, 255, 0, 0 };

// String que representa o estado dos dispositivos
char Luz[7] = "0000L#";

EthernetServer server(8090); // Cria o servidor na porta 8081

// String onde é guardada as msgs recebidas
char msg[7] = "0000L#";

void setup() {
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
myGLCD.InitLCD();
myGLCD.setFont(SmallFont);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
}

void loop() {

EthernetClient client = server.available();

myGLCD.clrScr();
myGLCD.print("Homeduino", CENTER, 0);
myGLCD.print("IP:192.168.25.17", RIGHT, 8);
myGLCD.print("Iluminacao", LEFT, 16);
myGLCD.print("Projeto ", LEFT, 24);
myGLCD.print("Por: ", LEFT, 32);
myGLCD.print("KARLOS PEREIRA", LEFT, 40);
delay (5000);

// SE receber um caracter...
if (client) {
// guarda o caracter na string 'msg'
msg[1]=msg[2]; msg[2]=msg[3]; msg[3]=msg[4]; msg[4]=msg[5]; msg[5]=msg[6];
msg[6] = client.read();

if (msg[6]=='#') {
switch(msg[5]) {
case 'R':
// Se receber o comando 'R#' envia de volta o status dos
// dispositivos. (Que é a string 'Luz')
client.write(Luz);
break;
case 'P':
// Caso P#, aciona o pino do portão pequeno por 1s.
digitalWrite(3,LOW);
delay(1000);
digitalWrite(3,HIGH);
break;
case 'G':
// Caso G#, aciona o pino do portão pequeno por 1s.
digitalWrite(4,LOW);
delay(1000);
digitalWrite(4,HIGH);
break;
case 'L':
// Caso L#, ele copia os 4 bytes anteriores p/ a
// string 'Luz' e cada byte representa um
// dispositivo, onde '1'=ON e '0'=OFF
Luz[0]=msg[1];
Luz[1]=msg[2];
Luz[2]=msg[3];
Luz[3]=msg[4];
if (Luz[0]=='1') digitalWrite(5,LOW); else digitalWrite(9,HIGH);
if (Luz[1]=='1') digitalWrite(6,LOW); else digitalWrite(10,HIGH);
if (Luz[2]=='1') digitalWrite(7,LOW); else digitalWrite(11,HIGH);
if (Luz[3]=='1') digitalWrite(8,LOW); else digitalWrite(12,HIGH);
break;

}
}
}
}

_________________________________________________________________________

_________________________________________________________________________

O CODIGO PHP

<html>
<head></head>
<body>

<?php
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// Se conecta ao IP e Porta:
socket_connect($sock,"192.168.25.177", 8090);

// Executa a ação correspondente ao botão apertado.
if(isset($_POST['bits'])) {
$msg = $_POST['bits'];
if(isset($_POST['Fora' ])){ if($msg[0]=='1') { $msg[0]='0'; } else { $msg[0]='1'; }}
if(isset($_POST['Quarto1'])){ if($msg[1]=='1') { $msg[1]='0'; } else { $msg[1]='1'; }}
if(isset($_POST['Quarto2'])){ if($msg[2]=='1') { $msg[2]='0'; } else { $msg[2]='1'; }}
if(isset($_POST['Sala' ])){ if($msg[3]=='1') { $msg[3]='0'; } else { $msg[3]='1'; }}
if(isset($_POST['Pequeno'])){ $msg = 'P#'; }
if(isset($_POST['Grande' ])){ $msg = 'G#'; }
socket_write($sock,$msg,strlen($msg));
}

socket_write($sock,'R#',2); //Requisita o status do sistema.

// Espera e lê o status e define a cor dos botões de acordo.
$status = socket_read($sock,6);
if (($status[4]=='L')&&($status[5]=='#')) {
if ($status[0]=='0') $cor1 = 'lightcoral';
else $cor1 = 'lightgreen';
if ($status[1]=='0') $cor2 = 'lightcoral';
else $cor2 = 'lightgreen';
if ($status[2]=='0') $cor3 = 'lightcoral';
else $cor3 = 'lightgreen';
if ($status[3]=='0') $cor4 = 'lightcoral';
else $cor4 = 'lightgreen';

echo "<form method =\"post\" action=\"PaginaPHP.php\">";
echo "<input type=\"hidden\" name=\"bits\" value=\"$status\">";
echo "<button style=\"width:200; background-color: $cor1 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Fora\">Sala</button></br></br>";
echo "<button style=\"width:70; background-color: $cor2 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Quarto1\">Quarto Casal</button></br></br>";
echo "<button style=\"width:70; background-color: $cor3 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Quarto2\">Quarto Solteiro</button></br></br>";
echo "<button style=\"width:70; background-color: $cor4 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Sala\">Cozinha</button></br></br></br>";
echo "<button style=\"width:90;font: bold 14px Arial\" type = \"Submit\" Name = \"Pequeno\">Portao Pequeno</button></br></br>";
echo "<button style=\"width:90;font: bold 14px Arial\" type = \"Submit\" Name = \"Grande\">Portao Grande</button></br></br>";
echo "</form>";
}
// Caso ele não receba o status corretamente, avisa erro.
else { echo "Falha ao receber status da casa."; }
socket_close($sock);
?>

</body>
</html>

______________________________________________________________________________

______________________________________________________________________________

Exibições: 1906

Anexos

Responder esta

Respostas a este tópico

Bom dia Karlos,

Eu terminei ontem um projeto que liga/desliga ar-condicionados por meio de contatores.

Acredito que eu tenha tido o mesmo problema que o seu, ou seja, quando eu ligava os reles que ligavam os contatores, o display LCD simplesmente apagava, mas o código do Arduino continuava rodando.

Eu fiz duas coisas:

1) Liguei em paralelo com as saidas dos reles um filtro composto de 1 capacitor de 0,1 uF x 400V em série com um resistor de 470ohm , o mesmo filtro fornecido com o releshield.

Liguei também esse filtro na saída dos contatores (também em paralelo.

Isso já diminuiu bastante o ruído mas mesmo assim o LCD apagava.

Para contornar o problema do LCD eu simplismente reinicio o LCD doda vez que eu mostro algum coisa.

No meu caso é o LCD 16x2 mas acredito que no seu caso deve ocorrer o mesmo problema.

Na minha rotina do Arduino para este LCD eu incluí a linha lcd.begin(16,2) toda vez que eu mostro as informações, ou seja:

lcd.begin(16,2);

lcd.clear();

lcd.setCursor(0,0);

lcd.print("TESTE LINHA 1");

lcd.setCursor(1,0);

lcd.print("TESTE LINHA 2");

Veja que no início da impressão eu coloquei o lcd.begin(16,2)

Acho que no caso de seu LCD seria o

myGLCD.InitLCD();
myGLCD.setFont(SmallFont);

 

Não tenho certeza, mas acho que é por aí.

Meu projeto está em produção h'30 horas ligando/desligando cargas grandes e até agora 100% sem falhas.

Boa sorte

Marcelo, estou com um problema semelhante... me diz uma coisa... esse filtro que você ligou, o resistor de 470ohm que você utilizou é resistor de fio 1/4W mesmo? E o capacitor de poliester?

Sim, resistor 1/4W 470 ohm e capacitor de poliester (o mesmo componente que vem no rele-shield)

Muito obrigado! Vou tentar a mesma coisa ver se resolve meu problemas. Muito obrigado!

Vou dar uma tentada aqui pra ver se isso resolve o meu problema!

quando eu coloco o codigo funciona mais so por 5 segundo creio que o tempo do delay que eu coloquei mais eu queria que ele ficasse permanente e outra quando adiciono os codigos para o LCD a pagina PHP fica muito lenta o nem funfa!!!!!

Agora eu to com o seguinte problema...

o meu lcd so aparece as mensagens que eu programei quando dou o comando no site PHP, mais eu quero ele ligado sempre AJUDA AI 

CODIGO ARDUINO:

#include <SPI.h>
#include <Ethernet.h>
#include <LCD5110_Basic.h>

LCD5110 myGLCD(8,9,10,11,12);
extern uint8_t SmallFont[];

//Configurações do Ethernet Shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,25, 177 }; // ip que o arduino assumirá
byte gateway[] = { 192,168,25, 1 }; // ip do roteador
byte subnet[] = { 255, 255, 0, 0 };

// String que representa o estado dos dispositivos
char Luz[7] = "0000L#";

EthernetServer server(8090); // Cria o servidor na porta 8081

// String onde é guardada as msgs recebidas
char msg[7] = "0000L#";

void setup() {
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
myGLCD.InitLCD();
myGLCD.setFont(SmallFont);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
myGLCD.clrScr();
myGLCD.print("Homeduino", CENTER, 0);
myGLCD.print("IP:192.168.25.17", RIGHT, 8);
myGLCD.print("Iluminacao", LEFT, 16);
myGLCD.print("Projeto ", LEFT, 24);
myGLCD.print("Por: ", LEFT, 32);
myGLCD.print("KARLOS PEREIRA", LEFT, 40);
delay(5000);
}

void loop() {


EthernetClient client = server.available();



// SE receber um caracter...
if (client) {
// guarda o caracter na string 'msg'
msg[1]=msg[2]; msg[2]=msg[3]; msg[3]=msg[4]; msg[4]=msg[5]; msg[5]=msg[6];
msg[6] = client.read();



if (msg[6]=='#') {
switch(msg[5]) {
case 'R':
// Se receber o comando 'R#' envia de volta o status dos
// dispositivos. (Que é a string 'Luz')
client.write(Luz);
break;
case 'P':
// Caso P#, aciona o pino do portão pequeno por 1s.
digitalWrite(2,LOW);
delay(1000);
digitalWrite(2,HIGH);
break;
case 'G':
// Caso G#, aciona o pino do portão pequeno por 1s.
digitalWrite(3,LOW);
delay(1000);
digitalWrite(3,HIGH);
break;

case 'L':
// Caso L#, ele copia os 4 bytes anteriores p/ a
// string 'Luz' e cada byte representa um
// dispositivo, onde '1'=ON e '0'=OFF
Luz[0]=msg[1];
Luz[1]=msg[2];
Luz[2]=msg[3];
Luz[3]=msg[4];
if (Luz[0]=='1') digitalWrite(4,LOW); else digitalWrite(4,HIGH);
if (Luz[1]=='1') digitalWrite(5,LOW); else digitalWrite(5,HIGH);
if (Luz[2]=='1') digitalWrite(6,LOW); else digitalWrite(6,HIGH);
if (Luz[3]=='1') digitalWrite(7,LOW); else digitalWrite(7,HIGH);
myGLCD.InitLCD();
myGLCD.setFont(SmallFont);
myGLCD.clrScr();
myGLCD.print("Homeduino", CENTER, 0);
myGLCD.print("IP:192.168.25.17", RIGHT, 8);
myGLCD.print("Iluminacao", LEFT, 16);
myGLCD.print("Projeto ", LEFT, 24);
myGLCD.print("Por: ", LEFT, 32);
myGLCD.print("KARLOS PEREIRA", LEFT, 40);
delay(5000);

break;

}
}
}
}

CODIGO PHP:

<html>
<head></head>
<body>

<?php
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// Se conecta ao IP e Porta:
socket_connect($sock,"192.168.25.177", 8090);

// Executa a ação correspondente ao botão apertado.
if(isset($_POST['bits'])) {
$msg = $_POST['bits'];
if(isset($_POST['Fora' ])){ if($msg[0]=='1') { $msg[0]='0'; } else { $msg[0]='1'; }}
if(isset($_POST['Quarto1'])){ if($msg[1]=='1') { $msg[1]='0'; } else { $msg[1]='1'; }}
if(isset($_POST['Quarto2'])){ if($msg[2]=='1') { $msg[2]='0'; } else { $msg[2]='1'; }}
if(isset($_POST['Sala' ])){ if($msg[3]=='1') { $msg[3]='0'; } else { $msg[3]='1'; }}
if(isset($_POST['Pequeno'])){ $msg = 'P#'; }
if(isset($_POST['Grande' ])){ $msg = 'G#'; }
socket_write($sock,$msg,strlen($msg));
}

socket_write($sock,'R#',2); //Requisita o status do sistema.

// Espera e lê o status e define a cor dos botões de acordo.
$status = socket_read($sock,25);
if (($status[4]=='L')&&($status[5]=='#')) {
if ($status[0]=='0') $cor1 = 'lightcoral';
else $cor1 = 'lightgreen';
if ($status[1]=='0') $cor2 = 'lightcoral';
else $cor2 = 'lightgreen';
if ($status[2]=='0') $cor3 = 'lightcoral';
else $cor3 = 'lightgreen';
if ($status[3]=='0') $cor4 = 'lightcoral';
else $cor4 = 'lightgreen';

echo "<form method =\"post\" action=\"PaginaPHP.php\">";
echo "<input type=\"hidden\" name=\"bits\" value=\"$status\">";
echo "<button style=\"width:200; background-color: $cor1 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Fora\">Sala</button></br></br>";
echo "<button style=\"width:70; background-color: $cor2 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Quarto1\">Quarto Casal</button></br></br>";
echo "<button style=\"width:70; background-color: $cor3 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Quarto2\">Quarto Solteiro</button></br></br>";
echo "<button style=\"width:70; background-color: $cor4 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Sala\">Cozinha</button></br></br></br>";
echo "<button style=\"width:90;font: bold 14px Arial\" type = \"Submit\" Name = \"Pequeno\">Portao Pequeno</button></br></br>";
echo "<button style=\"width:90;font: bold 14px Arial\" type = \"Submit\" Name = \"Grande\">Portao Grande</button></br></br>";
echo "</form>";
}
// Caso ele não receba o status corretamente, avisa erro.
else { echo "Falha ao receber status da casa."; }
socket_close($sock);
?>

</body>
</html>

POR FAVOR ME DEEM ESSA FORCINHA AI !

Encomendei um rele com acoplador ótico para poder controlar os contatores.

Deve chegar daqui a uns dois dias.

Assim que chegar eu faço testes para verificar se as interferencias param e informo em seguida.

Vou separar a alimentação do arduino do circuito dos reles.

Bom dia Karlos e Higor,

Eu já recebí os releshields com acopladores óticos.

Realizei os testes e como eu havia suspeitado, zeraram os problemas.

No circuito do rele vem um jumper ligando a alimentação do Arduino na alimentação do rele.

Eu retirei esse jumper e liguei uma fonte externa de 5 volts 2A apenas para o rele.

Assim eu me assegurei que o circuito lógico está totalmente separado do circuito de energia.

Com os testes de stress que eu fiz, o LCD não apagou nenhuma vez.

e aí....conseguiu resolver seu problema???

me passa a dica....tenho o mesmo projeto seu....

cara achei muito interessante seu projeto, vc ta usando apenas o arduino e o ethernet shield?

sim brother e um modulo relay de 8 ch 

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2019   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço