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
}

Exibições: 774

Responder esta

Respostas a este tópico

ele chega a detectar o solo seco e printar na pagina "Irrigando..."?

e porque tem um delay de "1000" ali?

sim ele detecta.

Eu simulo a umidade com um pano, o sensor funciona normal a cada 10 seg a pagina é atualizada.

O problema é o rele não esta atuado.

Em outro código sem o EthernetShield o rele atua.

vc tem um modulo relé pra arduino (aquele prontinho com os pinos e um transistor e diodo) ou esta ligando o rele direto no arduino?

sim

Estou usando os componentes abaixo

faz a mudança do pino 13 para o 2 e testa.

amigo, esse seu problema está relacionado ao fato de que o ethernet shield ocupa as portas 10, 11, 12 e 13 do seu arduino uno

E vc está ligando teu relê justamente no pino 13.

Por isso que sem o ethernet shield tudo funciona, pois sem o ethernet shield a porta 13 fica desocupada.

Então a solução é ligar o relê em outro pino do arduino, desde que não seja 4, 10, 11, 12 ou 13

Veja o que diz em https://www.arduino.cc/en/Main/ArduinoEthernetShield

Arduino communicates with both the W5100 and SD card using the SPI bus (through the ICSP header). This is on digital pins 10, 11, 12, and 13 on the Uno and pins 50, 51, and 52 on the Mega. On both boards, pin 10 is used to select the W5100 and pin 4 for the SD card. These pins cannot be used for general I/O. On the Mega, the hardware SS pin, 53, is not used to select either the W5100 or the SD card, but it must be kept as an output or the SPI interface won't work.

tinha pulado esta parte.realmente o seu rele nao ia ligar nunca mesmo.

so muda o rele de lugar e sucesso.

Boa tarde Napster

Funcionou, você me ajudou bastante.

Obrigado

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço