irrigação com Ethernet Shield sensor de umidade rele

Ola Amigos,

Estou precisando de uma ajuda com um sistema de irrigacao que estou montando, sou novo nesta area de eletronica/arduino e tenho um conhecimento bem basico ainda, mas vamos la… Os componentes que estou utilizando sao:

-Arduino UNO
-Modulo Rele
-Sensor de umidade do solo
-Ethernet shield w5100

Funcao: Se a umida for menor que o valor determinda (o solo seco) ligar o rele Rele ira ativar uma valvula solenoide. Isso tudo funcionando na Ethernet que será exibido a informação do estado de funcionamento do rele (irrigando…)

Problema: O (laço)codigo do sensor de umidade funciona, mas não atua o rele.

Segue o codigo:

#include <Ethernet.h>//Biblioteca EthernetShield 

#define SAMPLES 500 //Número de amostras de temperaturas
//-----------------------------Sensor--------------------------------------------------------------------- 
int umidade;
//-----------------------------Sensor--------------------------------------------------------------------- 
byte mac[]     = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //Define o endereço físico da placa
byte ip[]      = { 192, 168, 0, 101 };  // Ip da EthernetShield
byte gateway[] = { 192, 168, 1, 1 };   // Gateway (opcional)
byte subnet[]  = { 255, 255, 255, 0 }; // Mascara de subrede

EthernetServer server(80); //Cria o objeto na porta 80

void setup()
{
  //-----------------------------Sensor--------------------------------------------------------------------- 
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  //-----------------------------Sensor--------------------------------------------------------------------- 
  Ethernet.begin(mac, ip, gateway, subnet); //Inicializando a ethernet
  server.begin(); //Inicializando o servidor web
  
}

void loop()
{
     EthernetClient client = server.available(); //
  if (client) {
    // uma requisição http termina com uma linha em branco
    boolean current_line_is_blank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read(); // Recebe caractere do browser e guarda em "c"
        // Se chegamos ao fim da linha (recebeu uma nova linha
        // de caractere) e a linha está em branco, a requisição http termina
        // para que possamos enviar uma resposta!
        if (c == '\n' && current_line_is_blank) {
          // envia um cabeçalho padrão de resposta HTTP 
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          break;
        }
        if (c == '\n') {
          // Se começamos uma nova linha...
          current_line_is_blank = true;
        } 
        else if (c != '\r') {
          // Se ainda temos um caractere na linha atual...
          current_line_is_blank = false;
        }
      }
    }

    client.println("<html>"); //Início do código HTML
    client.println("<font face='arial' size='4' color='green' >TCC</font><hr>"); //Exibe texto com formatação    

  //-----------------------------Sensor--------------------------------------------------------------------- 
    umidade = analogRead(A0); // Leitura do pino analogico correspondente ao sensor 
    int Porcento = map(umidade, 1023, 0, 0, 100);    


    client.println("<h1>"); //Inicio do cabeçalho H1
    client.print(Porcento); //Exibe a Umidade 
    client.println("%");
  if(Porcento <=40)
  {
    client.println("Irrigando...");
    digitalWrite(13, HIGH);
  } 
  else
  {
    digitalWrite(13, LOW);
  }
  delay(1000); 
    
  //-----------------------------Sensor---------------------------------------------------------------------
    
    client.println("<HEAD><meta http-equiv=""refresh"" content=""10""><TITLE>Arduino EtherEncLib.h </TITLE></HEAD>");   //atualiza a pagina    
    client.println("</html>"); //Fim do código HTML          
  } 
  // Damos ao navegador um tempo para receber os dados
  delay(1);
  client.stop();// Fecha a conexão 
}

Easy. D13 is the SPI clock pin. If you are using the SPI bus, and the ethernet shield does, then you can't use that pin for anythng else.

And you should get the network settings correct. The gateway is not within the localnet range.

#include <Ethernet.h>//Biblioteca EthernetShield

#define pino_rele 4

#define SAMPLES 500 //Número de amostras de temperaturas
//-----------------------------Sensor---------------------------------------------------------------------
int umidade;
//-----------------------------Sensor---------------------------------------------------------------------
byte mac = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //Define o endereço físico da placa
byte ip = { 192, 168, 0, 101 }; // Ip da EthernetShield
byte gateway = { 192, 168, 1, 1 }; // Gateway (opcional)
byte subnet = { 255, 255, 255, 0 }; // Mascara de subrede

EthernetServer server(80); //Cria o objeto na porta 80

void setup()
{
//-----------------------------Sensor---------------------------------------------------------------------
Serial.begin(9600);
pinMode(pino_rele, OUTPUT);
//-----------------------------Sensor---------------------------------------------------------------------
Ethernet.begin(mac, ip, gateway, subnet); //Inicializando a ethernet
server.begin(); //Inicializando o servidor web

}

void loop()
{
EthernetClient client = server.available(); //
if (client) {
// uma requisição http termina com uma linha em branco
boolean current_line_is_blank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read(); // Recebe caractere do browser e guarda em “c”
// Se chegamos ao fim da linha (recebeu uma nova linha
// de caractere) e a linha está em branco, a requisição http termina
// para que possamos enviar uma resposta!
if (c == ‘\n’ && current_line_is_blank) {
// envia um cabeçalho padrão de resposta HTTP
client.println(“HTTP/1.1 200 OK”);
client.println(“Content-Type: text/html”);
client.println();
break;
}
if (c == ‘\n’) {
// Se começamos uma nova linha…
current_line_is_blank = true;
}
else if (c != ‘\r’) {
// Se ainda temos um caractere na linha atual…
current_line_is_blank = false;
}
}
}

client.println(""); //Início do código HTML
client.println(“TCC


”); //Exibe texto com formatação

//-----------------------------Sensor---------------------------------------------------------------------
umidade = analogRead(A0); // Leitura do pino analogico correspondente ao sensor
int Porcento = map(umidade, 1023, 0, 0, 100);

client.println("

"); //Inicio do cabeçalho H1
client.print(Porcento); //Exibe a Umidade
client.println("%");
if(Porcento <= 40)
{
client.println(“Irrigando…”);
digitalWrite(pino_rele, HIGH);
}
else
{
digitalWrite(pino_rele, LOW);
}
delay(1000);

//-----------------------------Sensor---------------------------------------------------------------------

client.println("<meta http-equiv="“refresh”" content="“10"”>Arduino EtherEncLib.h “); //atualiza a pagina
client.println(”"); //Fim do código HTML
}
// Damos ao navegador um tempo para receber os dados
delay(1);
client.stop();// Fecha a conexão
}

Obs: alterei a porta do relé para 4, pois a 13 está sendo usada pelo módulo ethernet. Se o relé não ligar com HIGH, altere HIGH para LOW, pois alguns módulos prontos trabalham com lógica inversa.