Está en la página 1de 26

Universidad Nacional Autónoma de México

Facultad de Ingenierı́a

Proyecto: Monitoreo de la calidad del


agua con sensor TDS y ESP32

M.I. ULISES MARTIN PEÑUELAS RIVAS


Circuitos digitales
Grupo: 02

Integrantes
Domı́nguez Sánchez Oscar
Laureano Uribe Diego
Romero Fragoso Ignacio
Vázquez Santiago Ricardo

Semestre 2024-1
Índice

Índice 1

1 Objetivos 2

2 Introducción 2
2.1 Conductividad Eléctrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2 Niveles de sólidos totales disueltos (TDS con sus siglas en inglés) . . . . . . . . . 3
2.2.1 Rango aceptable de los solidos disueltos totales del agua . . . . . . . . . 3
2.3 Temperatura del agua . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

3 Material 4
3.1 Sensor TDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.2 Sensor de temperatura DS18B20 . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

4 Desarrollo 6
4.1 Reglas de funcionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4.2 Tabla de entradas y salidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

5 Diagrama del circuito 9


5.1 Diagramas para las bibliotecas locales . . . . . . . . . . . . . . . . . . . . . . . . 9
5.1.1 WiFi IRF.hpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.1.2 IMU6050.HPP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5.1.3 Var.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
5.2 Diagrama principal del programa . . . . . . . . . . . . . . . . . . . . . . . . . . 12

6 Página Web 13
6.1 Códigos para la página web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

7 Código 18
7.1 Bliblotecas locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
7.2 Código general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

8 Resultados 23

9 Conclusiones 24

10 Referencias 25

1
UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO

CIRCUITOS DIGITALES FACULTAD DE INGENERIA

1. Objetivos
Optimizar la adquisición de datos:
• Configurar los sensores de TDS y temperatura para obtener mediciones precisas.
• Implementar algoritmos de cálculo para determinar la electroconductividad del agua.
• Garantizar la estabilidad y confiabilidad de la conexión Wifi para la transmisión de
datos en tiempo real.
Desarrollar la interfaz de usuario web:
• Mostrar gráficos en tiempo real de los niveles de TDS, temperatura y electroconduc-
tividad.
• Procesar los datos obtenidos y mostrar la calidad del agua y el proceso recomendado
que deberia tener (filtrado).
Parámetros para la calidad del agua:
• Establecer umbrales de calidad del agua para cada parámetro medido.
• Establecer un especı́fico número de filtrados para procesar el agua, dependiendo de
su calidad.
Realizar muestreos representativos:
• Diseñar un plan de muestreo que abarque diferentes lugares de la facultad de inge-
nierı́a de la UNAM.
• Asegurar la recolección de muestras de agua potable, agua de sanitarios y agua con
tierra.
• Registrar la ubicación y el momento de cada muestreo para análisis posterior.
Conducir análisis comparativos:
• Evaluar las variaciones en la calidad del agua entre las diferentes fuentes muestreadas.
Fomentar la conciencia y la educación:
• Diseñar material educativo sobre la importancia de monitorear la calidad del agua.

2. Introducción
La calidad del agua es un factor crucial en diversas industrias y aplicaciones. Monitorear los
niveles de Sólidos Totales Disueltos (TDS) es esencial para garantizar la seguridad del agua
y su idoneidad para diferentes propósitos. En este proyecto, exploraremos el desarrollo de un
sistema de monitoreo de la calidad del agua a partir de un sensor TDS y ESP32, mostrando
los resultados a través de una página Web. Al utilizar esta herramienta y las capacidades del
microcontrolador ESP32, podemos monitorear los niveles de TDS, el valor de CE (conductividad
eléctrica) y la temperatura del agua en tiempo real. Además, estos valores se pueden observar
en tiempo real a través de una conexión WiFi para su respectivo análisis.

2
UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO

CIRCUITOS DIGITALES FACULTAD DE INGENERIA

2.1. Conductividad Eléctrica


La conductividad eléctrica es la capacidad de la materia para permitir el flujo de la corriente
eléctrica a través de sus partı́culas. Dicha capacidad depende directamente de la estructura
atómica y molecular del material, ası́ como de otros factores fı́sicos como la temperatura a la
que se encuentre o el estado en el que se encuentre.
El agua en lı́neas generales es un buen conductor eléctrico. Sin embargo, dicha capacidad
depende de su margen de Sólidos Disueltos Totales (TDS), ya que la presencia de sales y
minerales en el agua forma los iones electrolı́ticos que permiten el paso de la corriente eléctrica.
Según la Organización Mundial de la Salud (OMS), el valor de CE del agua no debe superar
los 400 µS/cm o 0,4 mS/cm. Es importante garantizar que el valor de CE se mantenga dentro
de este lı́mite para mantener una buena calidad del agua.

Figura 1: Cálculo de la conductividad eléctrica

2.2. Niveles de sólidos totales disueltos (TDS con sus siglas en inglés)
Los sólidos disueltos totales son el residuo que queda después de evaporar una muestra de agua
previamente filtrada a través de un elemento de fibra de vidrio con abertura de 1.5 micras. El
agua se evapora y el residuo se lleva hasta 180°C. El resultado se reporta en mg/L.
Los SDT incluyen las sales, los minerales, los metales y cualquier otro compuesto orgánico
o inorgánico que se encuentra disuelto en el agua, o que haya pasado a través del filtro con
abertura de 1.5 micras.
Los TDS o SDT en el agua proceden de aguas subterráneas, aguas superficiales, aguas residuales
humanas e industriales, efluentes urbanas y agrı́cola. Las sales del ambiente que arrastra la lluvia
o deshielo también pueden contribuir al aumento de SDT del suministros de agua.

2.2.1. Rango aceptable de los solidos disueltos totales del agua


En México se puede determinar por normas, por ejemplo la norma mexicana de agua potable
NOM-127 (NOM-127-SSA1-1994), menciona que el lı́mite son 1000 PPM (partes por millón).
Pero un estudio hecho por la Organización Mundial de la Salud OMS, menciona la recomenda-
ción de los niveles de sólidos disueltos totales TDS en el agua potable (en mg/l o PPM):

3
UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO

CIRCUITOS DIGITALES FACULTAD DE INGENERIA

0 – 300 Excelente
300 – 600 Nivel bueno
600 – 900 Nivel aceptable
900 – 1200 Nivel pobre o no recomendable
1,200 a más Inaceptable.

Figura 2: Análisis de solidos disueltos totales

2.3. Temperatura del agua


La temperatura es una medida de la energı́a cinética media de las moléculas de agua. Se mide
en una escala lineal de grados Centı́grados o grados Fahrenheit.
Es uno de los parámetros más importantes de la calidad de agua. La temperatura afecta la
quı́mica del agua y las funciones de los organismos acuáticos. La temperatura influye en:
La cantidad de oxı́geno que se puede disolver en el agua
La velocidad de fotosı́ntesis de las algas y otras plantas acuáticas
La velocidad metabólica de los organismos
La sensibilidad de organismos a desechos tóxicos, parásitos y enfermedades
Epocas de reproducción, migración y estivación de organismos acuáticos.
Básicamente, al combinar las lecturas del sensor TDS, que detecta el total de sólidos disueltos,
y el sensor de temperatura, el proyecto permite monitorear la calidad del agua. Los valores de
TDS, EC y temperatura se miden y se muestran a través de nuestra pagina Web, lo que propor-
ciona información sobre la pureza del agua y las variaciones de temperatura. Esta información
ayuda a evaluar la calidad del agua e informar sobre su uso en diversas aplicaciones

3. Material
Para crear un sistema de monitoreo de la calidad del agua basado en IoT con sensor TDS y
ESP32, necesitamos los siguientes componentes:

4
UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO

CIRCUITOS DIGITALES FACULTAD DE INGENERIA

1. ESP32 como µC de 30 pines

2. Sensor TDS

3. Sensor de temperatura DS18B20

4. Cables tipo jumpers

5. Protoboard

3.1. Sensor TDS


El sensor TDS/EC (Total de Sólidos Disueltos/Conductividad Eléctrica) mide la concentración
de sólidos disueltos y la conductividad eléctrica del agua. Ademas, proporciona información
valiosa sobre la calidad y pureza del agua mediante el análisis del nivel de sustancias disueltas.
Este sensor es crucial para evaluar la idoneidad del agua para diversas aplicaciones, como agua
potable, hidroponı́a o procesos industriales.

3.2. Sensor de temperatura DS18B20


El DS18B20 es un sensor de temperatura digital capaz de medir la temperatura del agua. Es
resistente al agua, por lo que es adecuado para ambientes sumergidos o húmedos, como tanques
de agua o piscinas. Este sensor de temperatura proporciona lecturas de temperatura precisas,
que son esenciales para compensar las variaciones de temperatura en las mediciones de TDS.

5
UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO

CIRCUITOS DIGITALES FACULTAD DE INGENERIA

4. Desarrollo
Para poder realizar el monitoreo de la calidad del agua, se requirieron varias librerı́as especı́fi-
cas para los sensores, tanto el TDS, como para el DS18B20. Estas librerı́as nos ayudaron a
simplificar la lectura y el tiempo de sensado para la muestras, sin embargo para tener unos
datos mucho más precisos, se incluyeron distintos filtros en el código de se muestreaban varias
veces en un tiempo determinado y se obtenı́a el promedio (véase con más detalle el análisis en
la sección de Çódigo”).

Figura 3: Librerı́a para los sensores TDS y DS18B20, respectivamente

Hecho el código, para poder realizar pruebas, se procedió a realizar el armado del circuito.
Los datos que se iban a sensar iban a ser procesados a través de la ESP32, además de enviar
dichos datos, por WiFi a un servidor implementado por nosotros a través de una pagina Web.
Estos datos se enviarı́an cada x tiempo establecido en la parte del filtrado del código. Como
un cálculo extra, se diseño un algortimo que calculará la electroconductividad del soluto que se
muestreará a partir de los sólidos disueltos totales y la temperatura; este dato también se envió
a que se mostrara en la pagina web. Véase mas a detalle la conexión en la parte de ”Diagrama
del circuito”.

Figura 4: Circuito realizado para el monitoreo del agua.

Obtenido el circuito ya calibrado y con pruebas exitosas, se obtuvieron diferentes muestras


dentro del anexo de la facultad de Ingenierı́a, especı́ficamente en el área de los sanitarios del
edificio I y del suministro de agua potable implementado en el anexo ”PumaAgua”. Dichas
muestras se consiguieron con la finalidad de comprobar si existı́a un cambio en la parte de los

6
UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO

CIRCUITOS DIGITALES FACULTAD DE INGENERIA

solidos disueltos totales que se tienen de una agua potable a una con fin de limpieza o normal.
De manera adicional y con fines educativos se muestrearon agua con tierra disuelta en la misma
”PumaAgua”, sal disuelta en agua y agua que se vende de los puestos de comida dentro del
anexo (vease los resultados en la sección de Resultados”).

Figura 5: Muestras realizadas durante el proyecto.

Finalmente los datos sensados previamente descritos se mandaron a la pagina web implemen-
tada por nosotros donde se muestran los solidos disueltos totales, la temperatura y la electro-
conductividad obtenida. Como adición al proyecto se realizó una infografı́a para mostrar en la
exposición del proyecto, la importancia que debe tener el monitoreo y el análisis del agua que
consumimos, añadiendo los parámetros establecidos por la ONU donde se establece si la calidad
del agua es excelente, buena, mala o muy mala.

Figura 6: Infografı́a del monitoreo de la calidad del agua.

7
UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO

CIRCUITOS DIGITALES FACULTAD DE INGENERIA

4.1. Reglas de funcionamiento


Para la parte de funcionamiento podemos describir que se maneja de la siguiente manera:
Se instancia la conexión WiFi entre la ESP32 y a donde se enviaran los datos:
JSON Datos
AsyncWebServer server
Para leer los datos de los sensores:
Se establece una variables para el sensor tds TdsSensorPin → pin 35
Se establece una variable para el sensor DS18B20 → pin 26
Se establecen diferentes variables para mejorar la lectura de los datos:
Referencia analógica de voltaje VREF→3.3
numero de muestras a promediar SCOUNT→30
Se calcula la electroconductividad a partir de la siguiente formula

ec = (0.5) ∗ tdsV alue ∗ (1 + 0.02 ∗ (tem − 25)

Se guardan los datos leidos en la matriz de datos y se envı́an regresando una var Json como
string→jsonString

4.2. Tabla de entradas y salidas


Descripción Ubicación Tipo (I/O) Alias
Sensor TDS Lectura de los solidos disueltos totales 35 I TdsSensorPin
Sensor de temperatura Lectura del voltaje del sensor de temperatura 26 I DS18B20

Tabla 1: Entradas utilizadas en el circuito (Notese que no hay salidas fı́sicas, todas son a traves
del server).

8
UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO

CIRCUITOS DIGITALES FACULTAD DE INGENERIA

5. Diagrama del circuito

Figura 7: Conexión entre los sensores DS18B20 y sensor TDS hacia la ESP32.

5.1. Diagramas para las bibliotecas locales


5.1.1. WiFi IRF.hpp

(a) Flujo principal (b) Función WiFi init().

Figura 8: WiFi IRF.hpp

9
UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO

CIRCUITOS DIGITALES FACULTAD DE INGENERIA

5.1.2. IMU6050.HPP

Figura 9: Flujo Principal

Figura 10: Función Lee Valores()

10
UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO

CIRCUITOS DIGITALES FACULTAD DE INGENERIA

Figura 11: Ciclo de filtrados

5.1.3. Var.h

Figura 12: Flujo Principal

11
UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO

CIRCUITOS DIGITALES FACULTAD DE INGENERIA

Figura 13: Función GetMediaNum

5.2. Diagrama principal del programa

Figura 14: Flujo Principal

12
UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO

CIRCUITOS DIGITALES FACULTAD DE INGENERIA

Figura 15: Función VoidSetup().

Figura 16: Función VoidLoop().

6. Página Web
La pagina se desarrolló de la siguiente manera: utilizando un código html para programar lo
que se va a mostrar en el servidor, un archivo en java (.js) para mandar los datos leidos a la
pagina a partir del código implementado (vease en la sección de código) y un código de estilo
donde le dimos formato y diseño a la pagina Web.

13
UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO

CIRCUITOS DIGITALES FACULTAD DE INGENERIA

6.1. Códigos para la página web


1 <! DOCTYPE HTML >
2 < html >
3 < head >
4 < meta charset = " utf -8 " >
5 < title > Sensor MPU6050 </ title >
6 < link rel = " icon " type = " image /x - icon " href = " / imu . png " >
7 < meta name = " viewport " content = " width = device - width , initial -
scale =1 " >
8 < link rel = " stylesheet " type = " text / css " href = " style . css " >
9 < link rel = " stylesheet " href = " https :// use . fontawesome . com /
releases / v5 .7.2/ css / all . css " integrity = " sha384 -
f n m O C q bT l WI lj 8 Ly T jo 7m O US tj s KC 4 pO pQ b qy i7 R rh N 7
10 udi9RwhKkMHpvLbHG9Sr " crossorigin = " anonymous " >
11 < script src = " https :// cdnjs . cloudflare . com / ajax / libs / three . js
/107/ three . min . js " > </ script >
12 </ head >
13 < body >
14 < div class = " topnav " >
15 < h1 > <i class = " far fa - compass " > </ i > Medicion de la calidad del
agua 2 <i class = " far fa - compass " > </ i > </ h1 >
16 </ div >
17

18 < div class = " gauge - container " >


19 < div id = " electroconductividad " class = " gauge " > </ div >
20 < div id = " temperatura " class = " gauge " > </ div >
21 < div id = " tds " class = " gauge " > </ div >
22 </ div >
23

24 < div id = " calidad - agua " > Calidad del agua : Buena - Ciclos de
Filtrado Recomendados : 1 </ div >
25

26 < script src = " https :// cdnjs . cloudflare . com / ajax / libs / raphael
/2.3.0/ raphael . min . js " > </ script >
27 < script src = " https :// cdn . jsdelivr . net / gh / toorshia / justgage@1
.4.0/ dist / justgage . min . js " > </ script >
28 < script src = " script . js " > </ script >
29 </ body >
30 </ html >
Listing 1: ’index.html’

1 document . addEventListener ( " DOMContentLoaded " , function () {


2 // Datos simulados para los medidores ( puedes reemplazarlos con
datos en tiempo real )
3 const data = {
4 electroconductividad : 50 ,
5 temperatura : 25 ,
6 tds : 500 ,
7 calidadAgua : " Buena " , // Valor Predeterminado
8 ciclosFiltrado : 1 ,

14
UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO

CIRCUITOS DIGITALES FACULTAD DE INGENERIA

9 };
10

11 // Configuracion de los medidores


12 const gaugeElectroconductividad = new JustGage ({
13 id : " electroconductividad " ,
14 value : data . electroconductividad ,
15 min : -100 ,
16 max : 100 ,
17 title : " Electroconductividad " ,
18 label : " uS / cm " ,
19 }) ;
20

21 const gaugeTemperatura = new JustGage ({


22 id : " temperatura " ,
23 value : data . temperatura ,
24 min : -200 ,
25 max : 200 ,
26 title : " Temperatura " ,
27 label : " C " ,
28 }) ;
29

30 const gaugeTDS = new JustGage ({


31 id : " tds " ,
32 value : data . tds ,
33 min : -1000 ,
34 max : 5000 ,
35 title : " TDS " ,
36 label : " ppm " ,
37 }) ;
38

39 // Funcion para determinar la calidad del agua


40 function determinarCalidadAgua ( tds ) {
41 if ( tds < 300) {
42 return " Excelente " ;
43 } else if ( tds < 600) {
44 return " Buena " ;
45 } else if ( tds < 900) {
46 return " Regular " ;
47 } else if ( tds < 1200) {
48 return " Mala " ;
49 } else {
50 return " Muy mala " ;
51 }
52 }
53 // Lee sensores y crea enventos
54 if (!! window . EventSource ) {
55 var source = new EventSource ( ’/ events ’) ;
56

57 source . addEventListener ( ’ open ’ , function ( e ) {


58 console . log ( " Conectado ! " ) ;

15
UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO

CIRCUITOS DIGITALES FACULTAD DE INGENERIA

59 } , false ) ;
60

61 source . addEventListener ( ’ error ’ , function ( e ) {


62 if ( e . target . readyState != EventSource . OPEN ) {
63 console . log ( " Desconectado ! " ) ;
64 }
65 } , false ) ;
66

67 source . addEventListener ( ’ valores ’ , function ( e ) {


68 // console . log (" gyro_lectura " , e . data ) ;
69 var obj = JSON . parse ( e . data ) ;
70

71 data . electroconductividad = obj . EC ;


72 data . tds = obj . TDS ;
73 data . temperatura = obj . TEMP ;
74

75 gaugeElectroconductividad . refresh ( data . electroconductividad ) ;


76 gaugeTemperatura . refresh ( data . temperatura ) ;
77 gaugeTDS . refresh ( data . tds ) ;
78

79 // Determina la calidad del agua y actualiza la interfaz


80 data . calidadAgua = determinarCalidadAgua ( data . tds ) ;
81 data . ciclosFiltrado = obj . CiclosFiltrado ;
82

83 document . getElementById ( " calidad - agua " ) . innerText = " Calidad


del agua : " + data . calidadAgua +
84 " - Ciclos de Filtrado Recomendados : " + data . ciclosFiltrado ;
85

86 console . log ( " hasta aca todo bien " ) ;


87 } , false ) ;}
88

89

90 }) ;
Listing 2: ’script.js

1 . gauge - container {
2 display : flex ;
3 justify - content : space - around ;
4 width : 90 %;
5 }
6

7 . gauge {
8 width : 600 px ;
9 height : 600 px ;
10 /* margin : 10 px ;*/
11 }
12

13 body {
14 margin : 0;
15 padding : 0;

16
UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO

CIRCUITOS DIGITALES FACULTAD DE INGENERIA

16 font - family : ’ Arial ’ , sans - serif ;


17 }
18

19 . topnav {
20 background - color : #333;
21 color : # fff ;
22 text - align : center ;
23 padding : 10 px ;
24 }
25

26 . topnav h1 {
27 margin : 0;
28 }
29

30 # calidad - agua {
31 text - align : center ;
32 font - size : 24 px ;
33 margin - top : 20 px ; /* Anade un espacio en la parte superior */
34 font - family : ’ Arial ’ , sans - serif ;
35 color : #333; /* Cambia el color del texto segun tu preferencia
*/
36 }
Listing 3: ’Style.css’

De esta manera obtenemos la siguiente pagina web:

Figura 17: Pagina Web para el monitoreo de la calidad del agua

La dirección se obtiene al momento de realizar la conexión mediante la ESP32.

17
UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO

CIRCUITOS DIGITALES FACULTAD DE INGENERIA

7. Código
7.1. Bliblotecas locales
31 # include < Arduino_JSON .h >
32 # include " var . h "
33 // Instancia JSON
34 JSONVar datos ;
35

36 String lee_valores () {
37

38

39 static unsigned long analogSampleTimepoint = millis () ;


40 if ( millis () - analogSampleTimepoint > 40 U ) { // cada 40
milisegundos , se lee el valor anaglogico del ADC
41 analogSampleTimepoint = millis () ;
42 analogBuffer [ analogBufferIndex ] = analogRead ( TdsSensorPin ) ;
// lee el valor analogico y se almacena
43 analogBufferIndex ++;
44 if ( analogBufferIndex == SCOUNT ) {
45 analogBufferIndex = 0;
46 }
47 }
48

49 static unsigned long printTimepoint = millis () ;


50 if ( millis () - printTimepoint > 800 U ) {
51 printTimepoint = millis () ;
52 for ( copyIndex =0; copyIndex < SCOUNT ; copyIndex ++) {
53 analogBufferTemp [ copyIndex ] = analogBuffer [ copyIndex ];
54

55 // se Lee el valor analogico mas estable mediante el


algoritmo de filtrado mediano y se convierte al valor de
voltaje .
56 averageVoltage = getMedianNum ( analogBufferTemp , SCOUNT ) * (
float ) VREF / 4096.0;
57

58 // formula de la temperatura de compensacion : fFinalResult


(25^ C ) = fFinalResult ( current ) /(1.0+0.02*( fTP -25.0) ) ;
59 float compensationCoefficient = 1.0+0.02*( temperature -25.0)
;
60 // temperatura de compensacion
61 float compensationVoltage = averageVoltage /
compensationCoefficient ;
62

63 // se convierte el valor de voltaje al valor tds


64 tdsValue =(133.42* compensationVoltage * compensationVoltage *
compensationVoltage - 255.86* compensationVoltage *
compensationVoltage + 857.39* compensationVoltage ) *0.5;
65

66

18
UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO

CIRCUITOS DIGITALES FACULTAD DE INGENERIA

67

68 }
69 }
70 DS18B20 . requestTemperatures () ; // Se envia el comando para leer
la temperatura
71 float tem = DS18B20 . getTempCByIndex (0) ; // Se obtiene la
temperatura en centigrados
72 ec =(0.5) * tdsValue *(1+0.02*( tem -25) ) ;
73

74 int ciclosFiltrado = determinarCiclosFiltrado ( tdsValue ) ;


75

76 Serial . print ( " TDS Value : " ) ;


77 Serial . print ( tdsValue ,0) ;
78 Serial . println ( " ppm " ) ;
79 Serial . print ( " Temperatura : " ) ;
80 Serial . print ( tem ) ;
81 Serial . println ( " C " ) ;
82 // Obtener valor de EC
83 Serial . print ( " Valor de EC : " ) ;
84 Serial . println ( ec ) ;
85 delay (500) ;
86

87 datos [ " EC " ] = String ( ec ) ;


88 datos [ " TDS " ] = String ( tdsValue ) ;
89 datos [ " TEMP " ] = String ( tem ) ;
90

91 String jsonString = JSON . stringify ( datos ) ;


92 return jsonString ;
93 }
Listing 4: Biblioteca ’imu6050.hpp’

94 AsyncWebServer server (80) ; // Instanica Server


95 AsyncEventSource events ( " / events " ) ; // Crea repositorio de Eventos
96 // Manejo de WebServer A s n c r o n o ( Handle Web Server )
97 void server_init () {
98

99 // Direccion SPIFFS
100 server . serveStatic ( " / " , SPIFFS , " / " ) ;
101

102 // Pagina de incio ( Home )


103 server . on (
104 " / " , HTTP_GET , []( AsyncWebServerRequest * request )
105 { request - > send ( SPIFFS , " / index . html " , " text / html " ) ;}
106 );
107 // Direccion SPIFFS
108 server . serveStatic ( " / " , SPIFFS , " / " ) ;
109

110 // Cuando se conecta un cliente


111 events . onConnect (
112 []( AsyncEventSourceClient * client ) {

19
UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO

CIRCUITOS DIGITALES FACULTAD DE INGENERIA

113 if ( client - > lastId () ) {


114 Serial . printf ( " Info -> Cliente %u conectado !\ n " , client - > lastId
() ) ;
115 }
116 // Envia " Hola !" en un mensaje , el id , y el tiempo actual en
millis ,
117 // reconecta en 1 s
118 client - > send ( " Hola ! " , NULL , millis () , 10000) ;
119 }) ;
120

121 server . addHandler (& events ) ;


122 server . begin () ;
123 }
Listing 5: Biblioteca ’server.hpp’

124 // SPIFFS -> Carga de Sistema de Archivos


125 void spiffs_init () {
126 Serial . printf ( " Cargando Sistema de Archivos SPIFFS " ) ;
127 if (! SPIFFS . begin () ) Serial . println ( " Error : Al cargar el SPIFFS
");
128 Serial . println ( " Cargado con exito " ) ;
129 }
Listing 6: Biblioteca ’spiffs.hpp’

130 void wifi_init ( char * _ssid , char * _pass ) {


131 delay (200) ;
132 Serial . println ( " Conectando a red " + String ( _ssid ) ) ;
133 WiFi . mode ( WIFI_STA ) ; // Modo estacion ( valor por defecto )
134 WiFi . begin ( _ssid , _pass ) ; // Inicia conexion con AP
135 int wifi_cta =0;
136

137 while ( WiFi . status () != WL_CONNECTED && wifi_cta <15) {


138 Serial . println ( " .. " ) ; delay (500) ; wifi_cta ++;
139 }
140 Serial . println () ;
141 if ( wifi_cta >=15) {
142 Serial . println ( " Error - > No se logro conectar . Reset en 5 s " ) ;
143 delay (5000) ;
144 ESP . restart () ;
145 }
146 Serial . println ( " WiFi conectado a direccion IP : " ) ;
147 Serial . println ( WiFi . localIP () ) ;
148 }
Listing 7: Biblioteca ’WiFi IRF.hpp’

149 // Datos de conexion WiFi


150 # define ssid " Victure -9 F17 "
151 # define pass " bbdf9f17 "
152

20
UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO

CIRCUITOS DIGITALES FACULTAD DE INGENERIA

153 # define TdsSensorPin 35


154 # define VREF 3.3 // referencia analpgica de voltaje
del ADC
155 # define SCOUNT 30 // suma de puntos de muestra
156

157 OneWire ourWire (26) ; // Se establece el pin 26 del ESP32 para la


lectura del sensor
158 DallasTemperature DS18B20 (& ourWire ) ; // Se declara una variable u
objeto para el sensor
159 int analogBuffer [ SCOUNT ]; // almacena el valor analogico en
la matriz , se lee desde el ADC
160 int analogBufferTemp [ SCOUNT ];
161 int analogBufferIndex = 0;
162 int copyIndex = 0;
163

164 float averageVoltage = 0;


165 float tdsValue = 0;
166 float temperature = 25; // temperatura actual de
compensacion
167 float ec =0;
168

169 // Timer variables


170 unsigned long Time_BAK = 0;
171

172 unsigned long EC_Del = 10;


173 unsigned long PPT_Del = 1000;
174 unsigned long TEMP_Del = 200;
175 # define led 2
176

177 int getMedianNum ( int bArray [] , int iFilterLen ) {


178 int bTab [ iFilterLen ];
179 for ( byte i = 0; i < iFilterLen ; i ++)
180 bTab [ i ] = bArray [ i ];
181 int i , j , bTemp ;
182 for ( j = 0; j < iFilterLen - 1; j ++) {
183 for ( i = 0; i < iFilterLen - j - 1; i ++) {
184 if ( bTab [ i ] > bTab [ i + 1]) {
185 bTemp = bTab [ i ];
186 bTab [ i ] = bTab [ i + 1];
187 bTab [ i + 1] = bTemp ;
188 }
189 }
190 }
191 if (( iFilterLen & 1) > 0) {
192 bTemp = bTab [( iFilterLen - 1) / 2];
193 }
194 else {
195 bTemp = ( bTab [ iFilterLen / 2] + bTab [ iFilterLen / 2 - 1]) /
2;
196 }

21
UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO

CIRCUITOS DIGITALES FACULTAD DE INGENERIA

197 return bTemp ;


198 }
Listing 8: Biblioteca ’Var.h’

7.2. Código general


1 // ESP32 - WiFi - WebServer con SPIFFS , MPU6050
2 // Carga de bibliotecas
3 # include < WiFi .h >
4 # include < ESPAsyncWebServer .h >
5 # include < OneWire .h >
6 # include < DallasTemperature .h >
7

8 # include < SPIFFS .h >


9 // # include " var . h "
10 # include " WiFi_IRF . hpp "
11 # include " spiffs . hpp "
12 # include " server . hpp "
13 # include " imu6050 . hpp "
14

15

16 void setup () {
17

18

19 // GPIO
20 pinMode ( led , OUTPUT ) ;
21 digitalWrite ( led ,0) ;
22 // Serial
23 Serial . begin (115200) ;
24 // sensor
25 DS18B20 . begin () ; // Se inicia el sensor
26 pinMode ( TdsSensorPin , INPUT ) ;
27 // WiFi
28 wifi_init ( ssid , pass ) ;
29 // Inicia server
30 server_init () ;
31 // SPIFFS
32 spiffs_init () ;
33

34 Serial . println ( analogRead ( TdsSensorPin ) ) ;


35

36 }
37 void loop () {
38

39 events . send ( lee_valores () . c_str () ," valores " , millis () ) ;


40

41 delay (500) ;
42 }
Listing 9: proyecto

22
UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO

CIRCUITOS DIGITALES FACULTAD DE INGENERIA

8. Resultados
A partir del desarrollo del proyecto, analizamos cada una de las muestras previamente esta-
blecidas y nos dimos cuenta de algo interesante en las muestras principales de agua potable y
agua de la llave.

(a) Muestra de agua de la llave del edificio I (b) Muestra de PumaAgua del edificio O en el
del anexo de la FI. anexo de la FI.

Figura 18: Comparación de muestras principales.

Como se puede mostrar en la figura 8, la cantidad de TDS (dadas en ppm) son casi idénticas
para ambos casos, la variación es menos del 5 %. Esto en realidad no deberı́a ser ası́ ya que
una se da al alumnado de manera gratuita para beber (muestra b) y la otra se utiliza para
fines sanitarias (muestra a). A pesar de ello el ı́ndice de TDS es bajo y cae dentro del rango
establecido por la ONU para una calidad de agua excelente. Podemos notar también que la
temperatura no varı́a y que la resolución de este no se ve afectada por las sales disueltas en el
agua.
Para comprobar que el sensor no arrojaba datos erroneos y para fines educativos, se optó por
disolver un poco de tierra seca en agua, esperando que el ı́ndice de TDS arrojará un numero
mucho mayor a las anteriores muestras; logrando ası́ nuestra hipótesis.

Figura 19: Muestra de agua con tierra seca.

Como se puede apreciar en la figura 9, el ı́ndice de TDS llego a 545 ppm, con una electrocon-
ductividad de 235 νS/cm. De acuerdo a los parámetros establecidos por la ONU, la calidad del
agua se debe de caracterizar con un nivel bueno. El resultado arrojado se debió a que la tierra
no se disolvió por completo en el agua y solo ”flotaba”sobre el tope del recipiente; este factor
nos pudo haber arrojado valores erróneos, sin embargo el agua de la lectura fue la misma que

23
UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO

CIRCUITOS DIGITALES FACULTAD DE INGENERIA

la dos anteriores muestras, por lo que es de esperarse un resultado no tan alejado. Para nuestro
fin, el sensor TDS marcó lecturas diferentes y se logró el objetivo.
Finalmente se verificó la muestra de agua con sal (misma agua usada en las primeras muestras),
observando que esta no tenia mucha variación respecto al agua con tierra y que su electrocon-
ductividad fue la misma. Esto es interesante ya que quiere decir que la tierra contiene casi la
misma cantidad de sales totales que la sal que se utiliza para fines de cocina (véase en figura
10).

Figura 20: Muestra de agua con sal.

9. Conclusiones
El proyecto de monitoreo de la calidad del agua, orientado por los objetivos detallados, emerge
como una iniciativa integral que fusiona la aplicación de tecnologı́a con los principios funda-
mentales de la ingenierı́a mecatrónica. La realización de este proyecto no solo se traduce en un
avance en términos de adquisición de datos y desarrollo de una interfaz de usuario web, sino
que también tiene un impacto directo en la comprensión y mejora de la calidad del agua en la
Facultad de Ingenierı́a de la UNAM.
Desde la perspectiva de la ingenierı́a mecatrónica, la optimización de la adquisición de datos
refleja una búsqueda constante de precisión y eficiencia en la medición de los niveles de TDS y
temperatura. La implementación de algoritmos de cálculo para determinar la electroconductivi-
dad del agua demuestra la capacidad de aplicar conocimientos teóricos en algoritmos prácticos,
esenciales para la interpretación precisa de las caracterı́sticas del agua.
La estabilidad y confiabilidad de la conexión Wifi para la transmisión de datos en tiempo real
no solo es un componente técnico sino también un indicador de la habilidad para desarrollar
soluciones robustas y confiables. Esto refleja la aplicación práctica de principios de ingenierı́a
mecatrónica en la creación de sistemas de monitoreo confiables.
El desarrollo de la interfaz de usuario web, con gráficos en tiempo real y procesamiento de
datos para mostrar la calidad del agua y el proceso de filtrado recomendado, va más allá de la
simple visualización de datos. Refleja una habilidad para integrar datos en información útil y
procesable, una destreza crucial en la resolución de problemas en la ingenierı́a mecatrónica.
Establecer umbrales de calidad del agua y un número especı́fico de filtrados para procesar el
agua demuestra la aplicación de criterios y normativas en la resolución de problemas del mundo
real. Este aspecto del proyecto no solo aborda la calidad del agua, sino que también promueve
la implementación práctica de estándares y regulaciones en la ingenierı́a mecatrónica.

24
UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO

CIRCUITOS DIGITALES FACULTAD DE INGENERIA

Este proyecto no solo cumple con los objetivos técnicos especı́ficos, sino que también se alinea
perfectamente con la misión de la ingenierı́a mecatrónica, integrando conocimientos, habilida-
des y responsabilidad social para abordar problemas del mundo real. La importancia y utilidad
de este proyecto enriquecen no solo nuestras habilidades técnicas, sino también nuestra com-
prensión de la aplicabilidad práctica de la ingenierı́a mecatrónica en la mejora del entorno y la
calidad de vida.

10. Referencias
[1] “Water Quality Monitoring with TDS Sensor & ESP32”. IoT Projects Ideas. Accedido el 4
de diciembre de 2023. [En lı́nea]. Disponible:
https://iotprojectsideas.com/iot-water-quality-monitoring-with-tds-sensor-esp32/
[2] Dianelys Ondarse Alvarez. “Conductividad Eléctrica -”. Concepto. Accedido el 4 de diciem-
bre de 2023. [En lı́nea]. Disponible: https://concepto.de/conductividad-electrica/
[3] “Significado de los sólidos disueltos totales en agua (TDS) - Carbotecnia”. Carbotecnia.
Accedido el 4 de diciembre de 2023. [En lı́nea]. Disponible:
https://www.carbotecnia.info/aprendizaje/quimica-del-agua/solidos-disueltos-totales-tds/
#:~:text=0%20%20300%20Excelente,Nivel%20pobre%20o%20no%20recomendable
[4] “¿Cuál es la calidad perfecta del agua?” Fundación Aquae. Accedido el 4 de diciembre de
2023. [En lı́nea]. Disponible: https://www.fundacionaquae.org/wiki/calidad-agua/

25

También podría gustarte