Construcción de un monitor de nivel de agua con Arduino Uno R3.
Está pensado para usarse con alimentación 220v y comunicación por red cableada.Toma una medición cada 10 minutos y muestra una gráfica usando las últimas 10 mediciones que puede accederse via web.
Fue pedido por el servicio de agua potable de Zapala (Neuquen) para controlar el nivel en uno de su tanques.
Nos basamos en un sensor de distancia ultrasónico capáz de medir la distancia entre 4cm y 4m.
Componentes
- Arduino uno rev 3
- Ethernet shield
- Sensor ultrasonico URM37 V3.2
- Caja estanco pequeña
- Pasacable
- Cable Ethernet
- Fuente 5V
- Taladro
- Mecha con diametro similar a cable Ethernet
- Pistola eléctrica de barra de silicona
Montaje de prueba
Código fuente:
#include <SoftwareSerial.h>
#include <URMSerial.h>
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,69,1); //Ip Fija. Modificala segun tu red
EthernetServer server(80);
URMSerial urm;
#define DISTANCE 1
#define TEMPERATURE 2
#define ERROR 3
#define NOTREADY 4
void setup() {
Serial.begin(9600);
urm.begin(2,3,9600);
while (!Serial) {
;
}
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}
int tacometro;
int distancia[10];
int dvalue;
void loop() {
delay(100);
tacometro++;
if (tacometro>=60000){ //60000 vueltas de 100ms, sería cada 10 minutos
urm.requestMeasurementOrTimeout(DISTANCE, dvalue);
dvalue=400-dvalue; //400 representa un tanque de 4 metros altura desde el fondo hasta el sensor.
for (int i=1; i<10; i++){
distancia[i-1]=distancia[i];
}
distancia[9]=dvalue;
tacometro = 0;
}
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
if (c == '\n' && currentLineIsBlank) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println("Refresh: 60");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head>");
client.println("<script type=\"text/javascript\" src=\"https://www.google.com/jsapi\"></script>");
client.println("<script type=\"text/javascript\">");
client.println("google.load(\"visualization\", \"1\", {packages:[\"corechart\"]});");
client.println("google.setOnLoadCallback(drawChart);");
client.println("function drawChart() {");
client.println("var data = google.visualization.arrayToDataTable([");
client.println("['Tiempo', 'Nivel de Agua en cm '],");
client.println("['0', "+String(distancia[0])+"],");
client.println("['10', "+String(distancia[1])+"],");
client.println("['20', "+String(distancia[2])+"],");
client.println("['30', "+String(distancia[3])+"],");
client.println("['40', "+String(distancia[4])+"],");
client.println("['50', "+String(distancia[5])+"],");
client.println("['60', "+String(distancia[6])+"],");
client.println("['70', "+String(distancia[7])+"],");
client.println("['80', "+String(distancia[8])+"],");
client.println("['90', "+String(distancia[9])+"]");
client.println("]);");
client.println("var options = {");
client.println("title: 'Grafico de nivel',");
client.println("hAxis: {title: 'Tiempo en minutos', titleTextStyle: {color: 'red'}}");
client.println("};");
client.println("var chart = new google.visualization.AreaChart(document.getElementById('chart_div'));");
client.println("chart.draw(data, options);");
client.println("}");
client.println("</script>");
client.println("</head>");
client.println("<body>");
client.println("<H1 style='margin-bottom: 0px;margin-top: 0px;'>Sistema de Monitoreo Ultrasonico Remoto</H1>");
client.println("<div id=\"chart_div\" style=\"width: 900px; height: 500px;\"></div>");
client.println("<H2>Medicion actual</H2>");
client.println("Valor de nivel :");
client.println(dvalue);
client.println("<br/>");
client.println("<hr/>");
client.println("Desarrollado por COTESMA - www.cotesma.com.ar");
client.println("</body>");
client.println("</html>");
break;
}
if (c == '\n') {
currentLineIsBlank = true;
}
else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
delay(1);
client.stop();
Serial.println("client disonnected");
}
}
El monitor se instaló dentro del tanque. Un metro por debajo de la puerta de acceso que se ve de color óxido al borde de la cúpula. |
Monitor instalado dentro del tanque. |
Puede ser Utilizado con un HC-SR04
ResponderEliminarSaludos, yo he realizado purebas de concepto, aun no he realizado el montaje definitivo y me ha servido perfectamente ese sensor
EliminarSaludos, Quisiera saber que proteccion le pusiste al sensor ultrasonico para que la humedad y la condensacion del ambiente dentro del tanque no dañe el sensor?
ResponderEliminar-quisiera saber si aun funciona el sistema, si ha tenido alguna insidencia, cada cuanto has tenido que cambiar el sensor.
ResponderEliminarme hago la misma pregunta, estoy implementando algo similar
ResponderEliminarmi correo eciciliani@hotmail.com
ResponderEliminarSi... todavía funciona. Recientemente cambiamos la programación para que envíe datos a ThingSpeek, proximamente lo colocaremos dentro del tanque nuevamente... https://thingspeak.com/channels/143846
ResponderEliminarEn cuanto al sensor, no tiene ninguna protección y ha funcionado continuamente durante 3 años.
https://thingspeak.com/channels/143846
Consulta, entre el UMR37 y el HC SR04 cual te parece mejor?. Saludos.
ResponderEliminarHola amigo, es un proyecto muy interesante, donde puedo descargar las librerías de este? Agradezco tu apoyo. Saludos desde Mexico.
ResponderEliminarMuy buen proyecto!! Gracias por compartir
ResponderEliminarGracias por compartir. Estoy implementando algo similar para las cisternas de mi casa.
ResponderEliminarBuenas tardes, mi pregunta es por la durabilidad del sensor de ultrasonidos por la propia corrosión que produce el agua... ¿Cómo lo proteges?.
ResponderEliminarGracias.
Este comentario ha sido eliminado por el autor.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarMuchas gracias x la respuesta, no la vi antes!, saludos
ResponderEliminar