Sistema de Monitorización de Calidad de Agua en Tiempo Real con Arduino, GPRS y GPS
Componentes y Suministros
| Arduino UNO (en el texto original se menciona Arduino Genuino 101, pero la tabla lista UNO) | × | 1 |
| Módulo A7 GPRS/GPS | × | 1 |
| Sensores de Calidad de Agua (temperatura, pH, oxígeno disuelto, turbidez) | × | 1 set |
Herramientas y Máquinas Necesarias
- Soldador (genérico)
Aplicaciones y Servicios en Línea
- Microsoft Azure (hosting web gratuito para estudiantes)
- Arduino IDE
Sobre el Proyecto
Introducción
En septiembre de 2016, una planta de tratamiento de agua tuvo que cerrar porque agua contaminada entró en la planta. La compañía de suministro no pudo localizar la fuente de contaminación, causando una grave interrupción del servicio.
Mi curso universitario requería que los estudiantes construyeran un sistema para resolver problemas comunitarios. ¡Un sistema automatizado de monitorización de calidad de agua facilitaría encontrar la fuente de contaminación!
Visión General del Sistema

4 sensores interfazados con Arduino Genuino 101. Todos son sensores de salida de corriente, requiriendo circuito de acondicionamiento. El Arduino recoge medidas periódicamente, obtiene coordenadas GPS y sube el paquete de datos a una base de datos vía enlace de datos GPRS. Los usuarios pueden ver los resultados en la web como se muestra abajo.
Sondas de Sensores

Los tres sensores de salida de corriente son de Global Water, proporcionados por el tutor. Uso sensores de temperatura, pH y nivel de oxígeno disuelto. Desafortunadamente, el sensor de oxígeno disuelto está defectuoso.
El otro sensor es de turbidez, que entrega un nivel de voltaje proporcional a la cantidad de partículas sólidas en suspensión en el agua.
Interfaz Sensores y Arduino
Una resistencia convierte la salida de corriente en nivel de voltaje medible.
Módulo A7 GPRS y GPS

Elegí el módulo A7 por ser más barato que el SIM900 y combinar GPRS y GPS en un solo paquete.
Pero el precio menor tiene contrapartidas. Primero, la antena GPS que trae no es realmente una antena GPS; hay que comprar una aparte. Segundo, solo soporta 115200 bps UART por defecto, y aunque lo cambies por software, vuelve al default tras un ciclo de alimentación, y SoftwareSerial a 115200 bps es muy poco fiable. Perdí dos días con este problema. Tras eso implementé una función de cambio de baudrate en el código Arduino.
Al ser un módulo nuevo, tuve que crear mi propia librería. Los códigos fuente se recopilaron de varios sitios (SIM900, módulo GPS Adafruit). Es un lío, pero funciona, por favor no me condenen.
Se necesita un circuito para encender el módulo. Tiene dos pines: RESET y PWR_KEY. Se aplica voltaje a PWR_KEY al menos 2 s para arrancar. Para reset, se lleva RESET a GND; en reposo, RESET debe ir pull-up a 5 V. Primero reseteo el módulo y luego lo enciendo para asegurar arranque correcto.
Fuente de Alimentación
La alimentación merece mención especial por los sensores de salida de corriente. Requieren mínimo 10 V, superior a nuestros queridos 5 V. Para demostrar capacidad de trabajo remoto, opté por batería Li-Ion.

2 baterías Li-Ion en serie dan 7.4–8.4 V. Un convertidor buck lo baja a 5 V para Arduino y módulo A7; otro boost sube a 11 V para los sensores de agua. Con esto el sistema no durará mucho, pero no es la preocupación principal de este prototipo.
La Placa
El sistema está montado en placa de prototipado. La placa y el Arduino Genuino 101 encajan bien en la caja.

Caja
El tutor dio una caja vieja, con agujeros taladrados por alumnos anteriores para proyectos con sensores de agua. ¡Genial!

Fíjense en los conectores de los sensores. Venían soldados a los sensores, así que busqué conectores que encajaran. Los encontré con código GX16. Son muy versátiles y seguro servirán en futuros proyectos.
Página Web
Finalmente, la parte que me llevó semanas construir desde cero. Tenía cero conocimientos de servidores, web y en este proyecto aprendí PHP, consultas SQL, JavaScript, CSS y HTML.
Hosteé la web en Microsoft Azure por su servicio gratuito para estudiantes. Tiene limitaciones, pero basta para esta aplicación.
La base de datos la provee ClearDB, en colaboración con Azure. Otra vez limitaciones de memoria, pero suficiente.
Los códigos están en el repo, pero recuerden añadir sus credenciales en username_password.php.
log.php vuelca todos los datos recibidos del Arduino a la base de datos.
La web presenta un Google Map con marcadores en ubicaciones con datos de medición. Los otros archivos PHP son "herramientas" para acceder a la base de datos y recuperar datos.
La respuesta de la web es lenta, y como lo hice todo a lo rápido, quiero mejorarlo. ¡Sugerencias bienvenidas! :)
Código
Sistema de Monitorización de Calidad de Agua
Códigos web en /Website, sketches Arduino y librería módulo A7 en /Arduino
https://github.com/JohnHJ01/Water-Quality-Monitoring-System
Esquemas
Esquemas del sistema completo.
Proceso de manufactura
- Sistema de acuaponía controlado por Raspberry Pi: guía de construcción y código
- Medición de la Calidad del Aire con OpenSensors: Guía para Arduino y Python
- Sistema inteligente de monitorización de calidad del aire interior y residuos
- Sensor K30 CO₂: Monitorización en tiempo real de la calidad del aire interior
- SERENA: Sistema de Alarma Personalizado Arduino Mega 2560 con Pantalla TFT LCD Táctil
- Pistola de Agua Inteligente Activada por Movimiento con Arduino Nano
- Puerta de control de temperatura sin contacto para detección rápida y precisa
- Sistema de monitorización de incendios forestales en tiempo real con alertas SMS
- Sistema de Ventilación Inteligente para Sótanos: Control de Humedad con Arduino
- Sistema inteligente de monitorización de temperatura para escuelas: preciso, en tiempo real y seguro
- Monitorización de Calidad del Aire Ambiental con IoT: Seguridad, Productividad y Sostenibilidad