Monitorar a medição de água via web Server com arduino

medição hidrometro do sistema via notebook, via smartphone, via tablet.


Nestes tempos de crise hídrica,e maiores cuidados na utilização dos recursos naturais e até possíveis racionamentos de água é sempre bom utilizar a tecnologia a favor de soluções limpas para melhorar as condições ambientais em que vivemos.

               Fiz um projeto neste sentido que consiste em medir o volume do hidrômetro da residência via webserver com arduino, assim podendo monitor através da rede local o consumo de água sem a necessidade de estar sempre indo ao local do hidrômetro, assim você pode vizualizar a leitura via computador, notebook, smartphone via rede local.

               Para a execução do equipamento é necessário um arduino Uno, um ethernet shield W5100, um modem (no caso estou utilizando o repetidor  DIR-505, que é muito bom pois não há necessidade de conexão física com o roteador podendo ser colocado em diferentes locais, e no caso de medir uma saída pulsada depende muito do tamanho do fio e do sinal a ser medido), um resistor de 1k Ohm e um hidrômetro equipado com saída pulsada.

               Quanto a questão do hidrômetro equipado com a saída pulsada, nada mais que um equipamento que utiliza algum meio físico para produzir estado de nível lógico binário equivalente ao que esta sendo medido no hidrômetro. Ou seja, no caso de uma saída pulsada programada para transformar 01(um) litro de água em um Pulso de coletor aberto, a cada 01(um) litro vai gerar um pulso, assim podendo contabilizar os dados de consumo no arduino. Essa saída pulsada pode ser um sensor indutivo, magnético, opto e até reed switch. No caso do projeto, utilizei um hidrômetro eletrônico que já vem com essa funcionalidade.

O programa feito para o arduino é uma complilacão de programa de leitura de pulsos com um servidor de web Server via Ajaxhttp://startingelectronics.com/tutorials/arduino/ethernet-shield-we... , ou seja não é um programa de extrema dificuldade, a parte mais difícil é conecta-lo na internet e utilizar o protocolo Ajax.


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

// MAC address from Ethernet shield sticker under board
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 0, 82); // IP address, may need to change depending on network
EthernetServer server(80); // create a server at port 80
#define CHAVE 2
int inicio, pulsos; 
boolean pulso; 
String HTTP_req; // stores the HTTP request

void setup()
{
pulso=HIGH; 
pinMode(CHAVE,INPUT);
// Open serial communications and wait for port to open:
pulsos=0;
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}

Ethernet.begin(mac, ip); // initialize Ethernet device
server.begin(); // start to listen for clients
// for diagnostics
pinMode(3, INPUT); // switch is attached to Arduino pin 3
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
Serial.println("\nEntre Volume:"); 
while(pulsos==0) { 
if (Serial.available() > 0) 

pulsos= Serial.parseInt(); 


Serial.println(pulsos); 
delay(1000);

}


void loop()
{
if (digitalRead (2) == HIGH)
{
if(pulso == HIGH)
{
pulsos++; 
}
pulso = LOW; 
}
else{
pulso= HIGH; 
}
EthernetClient client = server.available(); // try to get client

if (client) { // got client?
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) { // client data available to read
char c = client.read(); // read 1 byte (character) from client
HTTP_req += c; // save the HTTP request 1 char at a time
// last line of client request is blank and ends with \n
// respond to client only after last line received
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: keep-alive");
client.println();
// AJAX request for switch state
if (HTTP_req.indexOf("ajax_switch") > -1) {
// read switch state and send appropriate paragraph text
GetSwitchState(client);
}
else { // HTTP request for web page
// send web page - contains JavaScript with AJAX calls
client.println("<!DOCTYPE html>");
client.println("<html>");
client.println("<head>");
client.println("<title>pagina de medicao</title>");
client.println("<script>");
client.println("function GetSwitchState() {");
client.println("nocache = \"&nocache=\"\
+ Math.random() * 1000000;");
client.println("var request = new XMLHttpRequest();");
client.println("request.onreadystatechange = function() {");
client.println("if (this.readyState == 4) {");
client.println("if (this.status == 200) {");
client.println("if (this.responseText != null) {");
client.println("document.getElementById(\"switch_txt\")\
.innerHTML = this.responseText;");
client.println("}}}}");
client.println(
"request.open(\"GET\", \"ajax_switch\" + nocache, true);");
//client.println("request.open(\"GET\", \"ajax_switch\", true);");
client.println("request.send(null);");
client.println("}");
client.println("</script>");
client.println("</head>");
client.println("<body>");
client.println("<h1>sistema de medicao</h1>");
client.println(
"<p id=\"switch_txt\">Switch state: Not requested...</p>");
client.println("<button type=\"button\"\
onclick=\"GetSwitchState()\">botao de medicao</button>");
client.println("</body>");
client.println("</html>");
}
// display received HTTP request on serial port
Serial.print(HTTP_req);
HTTP_req = ""; // finished with request, empty string
break;
}
// every line of text received from the client ends with \r\n
if (c == '\n') {
// last character on line of received text
// starting new line with next character read
currentLineIsBlank = true;

else if (c != '\r') {
// a text character was received from client
currentLineIsBlank = false;
}
} // end if (client.available())
} // end while (client.connected())
delay(1); // give the web browser time to receive the data
client.stop(); // close the connection
} // end if (client)
}

// send the state of the switch to the web browser
void GetSwitchState(EthernetClient cl)
{
if (digitalRead(3)) {
cl.println("chave habilitada: ON");

cl.println("volume medido: ");
cl.println(pulsos);
cl.println(" litros ");
cl.println("<br />");

}
else {
cl.println("chave deshabilitada: OFF");
}
}

Depois de upado o programa para o arduino deve-se inserir a medição que está no hidrômetro, ou seja o volume mostrado no hidrometro, então digitar no browser o IP do arduino, e fazer a requisição pelo botão de medição.

Este é um projeto que gostaria de implementar outras variáveis como utilizar um SD card para realizar leitura, um RTC para armazenar a hora, dia, mês e ano, gerar um arquivo que possa ser lido num servidor FTP. Com esses recursos é possível realizar o monitoramento on-line em tempo real do consumo, evitando assim desperdícios como vazamentos e podendo realizar perfis de consumos, assim alertando para consumos altos ou imprevistos. 

links do video: https://www.youtube.com/watch?v=dAxOEYXh1m4  

https://www.youtube.com/watch?v=XwO_k8mTNic

fotos: 

hidrômetro marcando 4714 litros 

sistema marcando 4714 litros 

hidrômetro marcando 4758 litros 

sistema marcando 4758 litros via tablet após requisição de botão de medição

Tags: ajaxdeethernetshieldmedidorwebserver,água

Exibições: 4183

Responder esta

Respostas a este tópico

Legal o seu projeto ! Parabéns !

Nunca tinha visto um hidrometro desses...é muito caro?

Vi que ele suporta vários tipos de interface. Você usou a sáida de pulso, não é ?

Hydraus :

http://www.hidrometer.com.br/materiais/hidrometros-especificos/ultr...

http://www.diehl.com/fileadmin/diehl-metering/pdb/BR_PT_Web/familie...

Esse é um medidor ultrasonico diferente dos medidores mecânicos esse  não tem partes mecanicas e faz a medição via sensores, algumas companhias de saneamento já estão adotando este modelo para consumidores. É mais caro que o hidrometro convencional porem mais preciso e não sofre o desgaste com o tempo como o medidor convencional. já vem equipado com a saída pulsada que pode ser programada se tiver o software e o hardware necessário.Se não tem opções de usar um hidrometro convencional mecanico com a saída pulsada através de conversor como esse http://www.hidrovolt.com.br/hidrometros-medidores/3/hidrometros/14/....

Obrigado pela dica !

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2018   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço