INGENIERIA ELECTRONICA - frsn.utn.edu.ar

29
UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL SAN NICOLAS INGENIERIA ELECTRONICA PROBLEMA DE INGENIERÍA TECNICAS DIGITALES III Controlador de Parámetros de Acuario Integrantes: - Buratti, Gastón Damián - Lenzi, Marcos Gabriel - Rodriguez, Hernán Atilio Docentes: - Ing. Poblete, Felipe - Ing. Gonzalez, Mariano AÑO 2020

Transcript of INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Page 1: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 1 de 27

UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL SAN NICOLAS

INGENIERIA ELECTRONICA

PROBLEMA DE INGENIERÍA

TECNICAS DIGITALES III

Controlador de Parámetros de Acuario

Integrantes:

- Buratti, Gastón Damián - Lenzi, Marcos Gabriel - Rodriguez, Hernán Atilio

Docentes:

- Ing. Poblete, Felipe - Ing. Gonzalez, Mariano

AÑO 2020

Page 2: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 0 de 27

INDICE

OBJETIVOS DEL TRABAJO 1

MATERIAS INTEGRADAS ..................................................................................................................... 1

POSIBLES APLICACIONES .................................................................................................................... 1

PERSONAS ENTREVISTADAS ............................................................................................................... 1

BIBLIOGRAFÍA ..................................................................................................................................... 2

DESARROLLO 3

INTRODUCCIÓN .................................................................................................................................. 3

TEMPERATURA .................................................................................................................... 3

PH ......................................................................................................................................... 4

NIVEL DEL AGUA .................................................................................................................. 6

TEORIA DE FUNCIONAMIENTO ........................................................................................................... 7

RASPBERRY PY...................................................................................................................... 7

PROTOCOLO MQTT .............................................................................................................. 9

NODERED ............................................................................................................................ 10

NODEMCU........................................................................................................................... 12

SENSORES .......................................................................................................................................... 13

SENSOR DE TEMPERATURA DS18B20 ................................................................................. 13

SENSOR DE PH .................................................................................................................... 14

SENSOR DE PH .................................................................................................................... 14

CIRCUITO ............................................................................................................................................ 19

SERVIDOR ........................................................................................................................................... 20

MUESTREO DE DATOS ........................................................................................................ 21

CONCLUSIONES .................................................................................................................................. 22

ANEXOS: 23

PROGRAMA DEL NODEMCU .............................................................................................................. 23

FOTOS DEL SISTEMA COMPLETO ....................................................................................................... 26

PROGRAMAS UTILIZADOS.................................................................................................................. 27

ARDUINO............................................................................................................................. 27

FRITZING ............................................................................................................................. 27

Page 3: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 1 de 27

OBJETIVOS

El objetivo del presente trabajo es desarrollar un sistema electrónico de medición de los parámetros característicos de un acuario marino.

Se pretende obtener un dispositivo que, en base a diferentes sensores, monitorice y presente la información obtenida en una página web, la cual está montada en un servidor de red local con una Raspberry Pi.

El dispositivo pretende servir al usuario como una herramienta de bajo coste para facilitar el mantenimiento del acuario.

MATERIAS INTEGRADAS

• Técnicas Digitales III: Se utilizaron como base los contenidos vistos sobre redes y protocolos a la hora de montar el servidor en la Raspberry y realizar la comunicación con protocolo mqtt. A demás se evaluaron las características del procesador ESP8266 según lo visto en la materia.

• Informática I y II: Al momento de progrmar el módulo NodeMCU, este se hizo mediante Arduino. El lenguaje que utiliza este compilador es C++. En las materias mencionadas se dio lenguaje C, pero los conocimientos sobre la lógica, el manejo de variables, etc. fue otorgado principalmente por estas asignaturas.

• Dispositivos Electrónicos y Electrónica Aplicada I: Se utilizaron los conocimientos adquiridos en estas materias a la hora de llevar a cabo las conexiones electrónicas: conexión en protoboard, cálculo de resistencias, etc.

POSIBLES APLICACIONES

• Monitoreo constante y autómatico para peceras de vivienda.

• Monitoreo constante y automático para varias peceras en un mismo ambiente. Por ejemplo, en un PetShop.

PERSONAS ENTREVISTADAS

• Guido Marabini: Acuarista.

Page 4: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 2 de 27

BIBLIOGRAFÍA

Introducción a Node-RED y Raspberry Pi con un sistema de alarma con Arduino, por

Luis del Valle Hernández: https://programarfacil.com/blog/raspberry-pi/introduccion-

node-red-raspberry-pi/

Instalar IDE de Arduino y Soporte para ESP8266 y NodeMcu:

http://visystem.ddns.net:7442/instalar-ide-arduino-soporte-esp8266/

MQTT: un protocolo abierto de red y su importancia en el IoT, por Isaac:

https://www.hwlibre.com/mqtt/

Parámetros óptimos para un acuario marino de arrecife, por Randy Holmes-Farley:

https://www.luis-rossel.com/parametros/

La Dureza del Agua: https://www.pecesdeacuarios.net/acuarios/calidad-del-

agua/dureza/

What is a pH Meter and How Does it Work?, por Dr. Surat P:

https://www.azolifesciences.com/article/What-is-a-pH-Meter-and-How-Does-it-

Work.aspx#:~:text=Operation%20of%20pH%20meter,with%20the%20loss%20of%20

H%2B

Efecto del pH sobre el organismo, por Roberto Petracini:

http://www.elacuarista.com/secciones/pH.htm

Aprendiendo a manejar Arduino en profundidad:

https://aprendiendoarduino.wordpress.com/tag/debounce/

Page 5: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 3 de 27

DESARROLLO

INTRODUCCIÓN

Los organismos marinos son muy sensibles al cambio de ciertas variables. Un claro ejemplo de esto se ve observando la rapidez con la que desaparecen los arrecifes de corales debido al cambio climático. Llevado a una menor escala, en un acuario marino, algunas variables deben estar cuidadosamente controladas, ya que un pequeño cambio puede producir resultados terribles. Esto significa que los propietarios de un acuario deben estar muy atentos al valor de varios parámetros para que sus peces, algas y/o plantas no se vean afectados.

Los parámetros más importantes son temperatura, pH y nivel del agua.

Las respectivas mediciones de estos valores se realizan manualmente y de manera casi diaria, por lo que en el caso en que el propietario del acuario tenga que dejar el acuario sólo durante varios días puede ser peligroso para la vida de estos organismos.

Por este motivo se diseñó un dispositivo de medición automática de la temperatura, pH y nivel del agua de nuestro acuario. Este monitoriza la información y la presenta en una página web en tiempo real.

Para la medición continua de los parámetros destacados se utilizan distintos sensores, los cuales se detallan a continuación.

Temperatura:

La temperatura del acuario es un factor de gran importancia para el desarrollo correcto de los seres vivos que se encuentren en su interior, ya que sirve para mantener constante su metabolismo y alto su sistema inmunológico, el cual evita que los peces contraigan enfermedades bacterianas.

Además, un cambio brusco en la temperatura puede ocasionarles grandes daños irreversibles, por eso es de vital importancia medir constantemente este parámetro.

El dispositivo utilizado para la medición es el DS18B20.

Page 6: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 4 de 27

Figura 1: Sensor de temperatura (DS18B20).

En la siguiente tabla se muestran los rangos de temperatura medidos en diversos tipos de agua, que nos darán una idea del valor que debemos medir en nuestro acuario:

Tipos de agua Rango de temperatura Temperatura media

Tropical 20ºC - 30ºC 27ºC

Subtropical 16ºC - 27ºC 22ºC

Boreal 1ºC - 17ºC 11ºC

Ártica -1ºC - 9ºC 3ºC

Mediterránea 11ºC – 28ºC 19ºC

pH:

El pH es una medida de acidez o alcalinidad de una disolución. Indica la concentración de iones de hidrógeno H+ presentes en determinadas disoluciones.

En la mayoría de las sustancias presentes en la naturaleza, estas concentraciones son muy bajas y expresarlas en forma decimal o exponencial resulta engorroso, por lo que para indicar esta concentración se emplea una transformación logarítmica de la concentración molar de protones:

𝒑𝑯 = 𝒍𝒐𝒈𝟏

𝑯+= − 𝐥𝐨𝐠 𝑯+

Mientras mayor sea la concentración de H+, el valor del pH es menor.

Page 7: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 5 de 27

Este aspecto indica la importancia de regular correctamente el valor del pH del acuario, ya que una simple variación de 1 en la escala de pH, representa un cambio de diez veces en la concentración de iones del agua.

A pesar del tiempo transcurrido desde la aparición de esta forma de medida, hoy día sigue siendo el pH la forma más común de expresar la acidez y la alcalinidad.

La escala que se usa para la medición de este parámetro va de 1 a 14. El pH 7 equivale a un pH neutro y es el que tiene el agua químicamente pura. Valores menores a 7 indican acidez del agua y valores mayores indican alcalinidad, estos niveles serán mayores cuanto más se acerquen al extremo.

El grado de acidez o alcalinidad del medio afecta profundamente a ciertos organismos, tanto vegetales como animales.

Cuanto más baja es la posición en la escala biológica, mayor es la incidencia del pH en los organismos. Por lo tanto, las algas, bacterias y, en general, los organismos elementales, son extremadamente sensibles a las variaciones de este factor, mucho más que los organismos superiores o con mayor grado de desarrollo.

La mayoría de los peces de acuario requieren un pH que oscila entre 6,8 y 7,2. Valores por encima o debajo de esos valores son aceptados por muy pocas especies.

Sin embargo, para cada especie acuática (animal o vegetal) existe un valor de pH óptimo para su desarrollo.

Algunas especies en particular tienen la facultad de aceptar rangos de pH del agua muy amplios. Sin embargo, la mayoría no lo tolera, aunque gradualmente es posible que se adapten a un pH inadecuado. En este caso seguramente no enfermarán de inmediato, pero al vivir sometidos a un estrés permanente su biología se verá afectada. Tarde o temprano enfermará.

El sensor utilizado para medir este parámetro es el PH-4502C + E201-BNC:

Figura 2: Sensor de pH (PH-4502C + E201-BNC).

Page 8: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 6 de 27

Nivel del agua:

Mantener dentro de cierto rango el nivel de agua es muy importante para mantener constantes muchos parámetros con relación a los cm3 de distintos productos que se utilizan para la regulación.

El agua se evapora, por esta razón es importante sensar su nivel. Esto se hará con una boya de nivel:

Figura 3: Boya de nivel.

Page 9: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 7 de 27

TEORÍA DE FUNCIONAMIENTO

La estrategia utilizada para el desarrollo del dispositivo se describe con el siguiente diagrama:

Figura 4: Diagrama del sistema completo.

Los datos recogidos por los sensores son enviados a la central de manera inalámbrica (por WiFi) mediante un módulo Esp8266 NodeMCU. La computadora central utilizada es una Raspberry Pi 3, la cual recibe los datos y los muestra en una interfaz web a la que podemos acceder con cualquier una computadora o un Smartphone.

Raspberry Pi:

La Raspberry Pi es una computadora diseñada por “Pi Fundation”, de bajo costo y con un tamaño compacto. El modelo utilizado se denomina “Raspberry Pi 3 B+”, y entre sus principales características encontramos:

• Procesador: Cortex-A53 (ARMv8) de 64 bits, cuatro núcleos, a 1.4Ghz.

• Memoria RAM: 1 Gb de RAM LPDDR2.

• Conectividad: conexión Wifi de doble banda (2.4Ghz y 5 GHz), puerto Ethernet de alta velocidad y capacidad de conexión Bluetooth Low Energy (BLE) o Bluetooth.

Page 10: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 8 de 27

• Puertos: posee 40 puertos de propósito general: entradas y salidas, puertos USB, conexión HDMI y la posibilidad de conectar periféricos como pantallas LCD, cámaras, teclados, salida de audio, entre otras cosas.

• Alimentación: Se alimenta con un transformador de 220VAC - 5VCC de 12,5W con una salida de 2,5A.

Figura 5: Raspberry Pi 3 B+.

Figura 6: Partes de una Raspberry Pi 3 B+.

Page 11: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 9 de 27

Protocolo de comunicación MQTT: La comunicación entre el módulo NodeMCU y la Raspberry, y el envío de datos al servidor web, se hace por WiFi, utilizando un protocolo de comunicación denominado MQTT. Las siglas MQTT provienen de Message Queuing Telemetry Transport, un estándar abierto de OASIS (Organization for the Advancement of Structured Information Standards) e ISO para comunicaciones en red y que se ejecuta, generalmente, sobre TCP/IP. El protocolo MQTT es un protocolo de comunicación Message Queue, que sigue un patrón PubSub, y de tipo M2M (machine to machine). Se usa ampliamente en el IoT, y se basa en la pila TCP/IP usada en Internet. Message Queue es servicio de mensajería en donde se genera una sola cola de mensajes para todos los clientes que inician una subscripción en el broker. Este último mantendrá los mensajes almacenados hasta que son entregados al cliente. Si el cliente o destinatario no estuviera conectado, se mantiene hasta que se conecta. PubSub (Publish/Susbcribe) es un patrón de mensajería donde un dispositivo (Sub) informa al broker de que quiere recibir un mensaje, mientras otro dispositivo (Pub) publica mensajes para que el broker los distribuya al otro/s dispositivo/s que los espera. Algunas de las ventajas de este protocolo son:

• Escalabilidad, para conectar más y más clientes.

• Desacoplamiento entre clientes, para menor dependencia.

• Asincronismo.

• Sencillez.

• Ligereza para no consumir demasiados recursos.

• Eficiencia energética para dispositivos que dependen de batería o funcionan 24/7.

• No necesita de un gran ancho de banda (ideal para conexiones lentas, como algunas inalámbricas).

Page 12: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 10 de 27

• Seguridad y calidad, para mayor fiabilidad y robustez en comunicaciones. Funcionamiento MQTT El protocolo MQTT usa un filtro para los mensajes que son enviados a cada cliente, basado en topics o temas que se organizan de forma jerárquica. De ese modo, un cliente puede publicar un mensaje en un topic concreto. De ese modo, todos aquellos clientes o dispositivos conectados que se suscriban al topic, recibirán mensajes por medio del broker. Las conexiones se realizan por medio de TCP/IP, y el servidor o broker mantendrá un registro de los clientes conectados. Por defecto, los dispositivos emplearán puertos de comunicación número 1883. Esos mensajes o paquetes de tienen la siguiente estructura:

• Header o cabecera fija: es una parte fija que ocupa entre 2-5 bytes. Contiene un código de control, ID del tipo de mensaje enviado, y su longitud. Entre 1-4 bytes son usados para la codificación de la longitud, usando los 7 primeros bits de cada octeto como dato para la longitud y un bit adicional de continuidad para determinar que hay más de un byte que componen la longitud del mensaje.

• Cabecera variable: no es siempre obligatoria, sino opcional. Solo la contienen algunos paquetes en ciertas situaciones o mensajes concretos.

• Contenido o data: los datos del paquete son los que realmente contienen el mensaje que se pretende enviar. Puede tener desde unos cuantos kB hasta 256 MB de límite.

NodeRed: Para la visualización de los datos recolectados en tiempo real, se necesita hacerlo mediante una interfaz web. El desarrollo de la esta se hará mediante Node Red, el cual es una herramienta de código abierto que permite interconectar dispositivos en el marco de Internet de las Cosas.

Page 13: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 11 de 27

Este medio no solo sirve para la recopilación y análisis de los datos, sino que, además, proporciona el servidor mediante el cual se visualizan. Node Red, viene instalado por defecto en el sistema operativo Raspbian utilizado en la central, y es una herramienta muy potente de fácil programación (en bloques - nodos). Su ventaja más importante es que está optimizado para poder tratar múltiples conexiones concurrentes.

Figura 7: Interfaz de la programación por nodos en NodeRed.

Figura 8: Ejemplo de visualización de datos.

Page 14: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 12 de 27

NodeMCU - ESP 8266: Como se mencionó anteriormente, para que los datos recolectados por los sensores sean enviados de manera inalámbrica, se utilizó un módulo NodeMCU integrado con un chip ESP 8266. Es una tarjeta de desarrollo especialmente orientada al Internet de las cosas. Integra un potente procesador de 32 bits y conectividad Wifi. Para el desarrollo de aplicaciones utilizando este módulo se puede elegir entre los lenguajes C++ (mediante el IDE de Arduino) y Lua. Al trabajar dentro del entorno Arduino podremos utilizar un lenguaje conocido y con mucha información sobre proyectos y librerías disponibles en Internet, la comunidad de usuarios de Arduino es muy activa y da soporte a plataformas como el ESP8266.

Figura 9: NodeMCU ESP8266.

Figura 10: Pinout NodeMCU ESP8266.

Page 15: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 13 de 27

SENSORES

A continuación se explicarán con más detalles los sensores utilizados. Sensor de Temperatura DS18B20 El sensor digital DS18B20 es idóneo cuando se quiere medir la temperatura en ambientes húmedos o dentro del agua. Esto es debido a que viene en forma de sonda impermeable.

Figura 11: Sensor DS18B20.

• VDD: es Tensión de alimentación (desde 3V a 5,5V).

• GND: Tierra o masa.

• DQ: Pin de datos.

Este sensor nos permite medir temperaturas entre -55ºC y 125ºC. Es un rango muy amplio, sin embargo, no en todo el rango tenemos el mismo error.

Page 16: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 14 de 27

Figura 12: Error en la medición.

Para nuestra aplicación, tenemos un error de ±0,5 ºC, el cuál es un error con el que podemos usarlo sin grandes inconvenientes. Sensor de pH: El sensor de pH utilizado es el E201-BNC. Este consta con un conector BNC, por lo que se utiliza también el módulo PH-4502C, el cual adaptará nuestra conexión BNC a PCB para poder conectarlo sin inconvenientes al NodeMCU.

Figura 13: E201-BNC + PH-4502C.

Algunas de las características principales de esta sonda son:

• Voltaje de funcionamiento: 5V.

• Corriente de funcionamiento: 5-10 mA.

Page 17: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 15 de 27

• Rango de detección pH: 0-14.

• Tiempo de respuesta: 5seg Principio de funcionamiento El phmetro funciona midiendo el voltaje entre dos electrodos; siendo el electrodo un conductor eléctrico para partes no metálicas. Luego procede a mostrar el valor del voltaje transformado en niveles de ph. Este procedimiento lo realiza gracias a su composición, que consta de dos varillas con electrodos, uno hecho de calomel y otro de vidrio. El vidrio usado para hacer el sensor (electrodo) es uno polarizable, es decir, es sensible a la concentración de iones de hidrógeno. De esta forma un electrodo funciona de referencia mientras el otro cambia la carga de los iones que están en el sensor a positivo. Esto genera una diferencia de potencial entre ambos electrodos que es lo que posibilita la medición del pH. El valor de este sensor es de alrededor de $7000, por lo que para este prototipo se hará una simulación del sensor mediante un potenciómetro. La hoja de datos del sensor nos enseña la relación tensión - valor de pH:

Figura 14: relación tensión - valor de pH.

Page 18: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 16 de 27

Como la medición de la sonda presenta una relación lineal entre pH y tensión, para simular el funcionamiento de esta se utilizará un potenciómetro lineal de 1K alimentado con 5v.

Figura 15: Conexión del potenciómetro al NodeMCU.

El punto medio del potenciómetro se conecta al pin de entrada analógica del NodeMCU. Luego se hará énfasis en las particularidades de la simulación hechas en el programa.

Boya de nivel La boya de nivel actúa como interruptor dependiendo si el nivel de agua está por encima o por debajo de su colocación en el acuario. Debido a que el llenado de la pecera es manual, sólo será necesaria la colocación de una boya, indicando un nivel mínimo de agua. Al alcanzar el nivel mínimo de agua, el usuario visualiza esta información en la interfaz de usuario para que restaure el nivel correcto.

Page 19: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 17 de 27

Figura 16: Boya de nivel.

A continuación se observa una imagen que explica la colocación de la boya y su mecanismo de activación/desactivación.

Figura 17: Funcionamiento de la boya de nivel.

La boya de nivel fue simulada con un pulsador conectado de la siguiente manera:

Figura 18: Conexión de la boya de nivel.

Page 20: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 18 de 27

La rama formada por el capacitor C1 y la resistencia R2, tiene la función de eliminar los rebotes en el switcheo. Estos rebotes son las falsas pulsaciones que se producen al hacer falsos contactos al momento de presionar un pulsador mecánico.

Figura 19: Efecto rebote producido al pulsar un interruptor mecánico.

Determinar los valores de R2 y C1 es muy sencillo, las consideraciones que hay que tener en cuenta son la constante de tiempo del circuito RC y la corriente que se derivará por el pulsador al presionarlo cuando se descargue el capacitor. Para que no haya riesgo de daño del interruptor, se elige una corriente máxima por el switch de 0.5mA. Como la tensión de alimentación del NodeMCU es de 5V, el valor de la resistencia R2 será de:

𝑅2 =𝑉𝑐𝑐

𝐼𝑠𝑤= 10𝑘Ω

A partir de este valor, se elige el valor del capacitor según el valor deseado de la constante de tiempo de descarga del capacitor, que vale 𝜏 = 𝑅. 𝐶 . Como el sistema no requiere de una gran exactitud, ya que la velocidad con que varía el nivel del agua no es elevada, se puede elegir un valor relativamente arbitrario, siempre dentro de lo esperable. En nuestro caso se toma un 𝜏 de 10ms. Así, el valor del capacitor será:

𝐶1 =𝜏

𝑅= 1𝑢𝐹

Con estos valores de R y C, en la configuración indicada en la figura 18, el funcionamiento de la boya de nivel será satisfactorio, y no presentará ninguna dificultad la implementación del circuito. Sin embargo, existe otra forma de evitar el efecto rebote del pulsador, y es mediante software. Esto se logra sencillamente escribiendo un código que compara el estado de la entrada actual con el estado x tiempo antes. Si el estado es el mismo se confirma que se presionó el interruptor. En nuestro caso, esta solución se desestimó en un primer momento debido a que la lectura del sensor de nivel se realiza mediante interrupciones, en donde no es conveniente utilizar instrucciones que introduzcan retardos en el tiempo. Sin embargo, debido a los elevados tiempos de respuesta del sensor de nivel, se podría haber utilizado este método sin inconvenientes.

Page 21: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 19 de 27

CIRCUITO El circuito implementado para la etapa de sensores y NodeMCU se hizo en una placa de prueba (protoboard).

Figura 20: Esquema del circuito de conexión de sensores.

Figura 21: Circuito de conexión de sensores.

Page 22: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 20 de 27

El sensor DS18B20 tiene conectada una resistencia pull-up de 4.7 KΩ. Esta nos asegura un estado lógico 1 en el pin de conexión cuando se encuentra en reposo. Es decir, que el NodeMCU detectará un voltaje igual al de alimentación de manera constante, y en cuanto el sensor inicie la comunicación, detectará un cambio de estado a cero. Esto evita mediciones erróneas que se producen por el ruido generado en el circuito. En la sección de Anexos, se encuentra el programa en lenguaje C++ cargado en la placa NodeRed. Este cuenta con sus respectivos comentarios para comprender la lógica del mismo. SERVIDOR El servidor es montado en la Raspberry Pi con el uso de la herramienta NodeRed.

Figura 22: Consola de NodeRed en la Raspberry.

Page 23: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 21 de 27

En estas imágenes observamos la consola de NodeRed, en donde apreciamos el correcto montaje del servidor. Este es direccionado en la IP: 102.168.0.110. También se observa la correcta conexión a los tópicos utilizados para transmitir los datos de cada sensor: /casa/pecera/nivel; /casa/pecera/pote; /casa/pecera/temp. MUESTREO DE DATOS La lógica utilizada para la programación y el formato del dashboard, en donde se muestran los datos en tiempo real de los sensores, se muestra a continuación.

Figura 23: Programación realizada.

Como se mencionó anteriormente, esta lógica se realiza con una programación por nodos.

Page 24: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 22 de 27

La pantalla para la visualización de los datos que verá el usuario es la siguiente:

Figura 24: Dashboard visualizado por el usuario.

Aquí podrá ver si debe agregar agua a la pecera, el valor del pH y la temperatura del agua. CONCLUSIONES En este trabajo práctico, en el cual se buscaba resolver un problema de ingeniería, se consiguió diseñar un medidor de parámetros de acuario. El medidor logró monitorizar efectivamente los parámetros de temperatura, nivel del agua y pH, este último simulado para este primer prototipo. La realización de este proyecto permitió no sólo aplicar conocimientos adquiridos en muchas de las materias que conforman la carrera de Ingeniería Electrónica, sino también, la posibilidad de plantear la resolución de un problema de ingeniería real de una manera integral, procurando que sirva de experiencia a la hora de enfrentarse a un caso similar en el ámbito profesional en un futuro. En este caso, se buscó la forma más conveniente de solucionar el problema planteado con los recursos disponibles para acercarnos a la solución con un prototipo inicial, pensando a su vez en cuál sería la forma óptima de implementación si se tuviera un mayor tiempo de desarrollo y recursos. Por otro lado, este proyecto nos brindó la posibilidad de estudiar y aprender sobre conceptos que no se desarrollan en la carrera pero que están relacionados, y pueden llegar a ser útiles en el desarrollo profesional de cualquier ingeniero electrónico.

Page 25: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 23 de 27

ANEXOS PROGRAMA DEL NODEMCU //Librerías #include <ESP8266WiFi.h> #include <PubSubClient.h> #include <OneWire.h> #include <DallasTemperature.h> // Pines const byte intNivel = 2; volatile int b=0; const int pote=A0; OneWire onewire(D3); //pin para comunicación onewire DallasTemperature sensors(&onewire); //indica que ese pin va a trabajar con la librería Dallastemp // Variables interrupción de interruptor volatile boolean isrNivelCentinela = false; // Detectar interrupción volatile boolean isrNivelCentinelaOff=false; unsigned long previousMillis=0; unsigned long currentMillis; const long timer=5000; float ph=0; char phVal[4]; unsigned long previousMillisTemp=0; unsigned long currentMillisTemp; const long timerTemp=2500; float tempValue=0; char tempBuf[5]; // Configuración WiFi char* ssid = "Ceballos"; // SSID de la WiFi char* pass = "martinaykiara123123"; // Constraseña de la WiFi WiFiClient clienteWifi; // Configuración MQTT PubSubClient clientMqtt(clienteWifi); const char* servidorMqtt = "192.168.0.110"; const char* topicNivel = "/casa/pecera/nivel"; const char* topicPote = "/casa/pecera/pote"; const char* topicTemp = "/casa/pecera/temp"; void setup() Serial.begin(115200); delay(500); // Conexión con la red WiFi int intentosWiFi = 0; WiFi.begin(ssid, pass);

Page 26: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 24 de 27

Serial.print("[WIFI]Intentando conectar a: "); Serial.println(ssid); while (WiFi.status() != WL_CONNECTED || intentosWiFi > 30) Serial.print("."); delay(500); intentosWiFi++; Serial.println("."); // Si no ha conetado mostramos error if (WiFi.status() != WL_CONNECTED) while (1) digitalWrite(LED_BUILTIN, HIGH); delay(500); digitalWrite(LED_BUILTIN, LOW); delay(500); Serial.println("[WIFI]Conectado a WiFi"); // Configuración MQTT clientMqtt.setServer(servidorMqtt, 1883); Serial.println("[MQTT]Conectado al servidor MQTT"); // Configuración de interrupciones pinMode(intNivel, INPUT_PULLUP); // Interrupción interruptor magnético attachInterrupt(intNivel, isrNivel, CHANGE); //Interrupción interruptor magnético // attachInterrupt(intNivel, isrNivelOff, RISING); //Interrupción interruptor magnético // Apagado de LED digitalWrite(LED_BUILTIN, HIGH); sensors.begin(); //inicia la comunicación con el sensor de temp void loop() // Comprobamos conexión con broker MQTT if (!clientMqtt.connected()) reconnectMqtt(); clientMqtt.loop(); currentMillis=millis(); if(currentMillis-previousMillis>=timer) previousMillis=currentMillis;

Page 27: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 25 de 27

ph= fmap(analogRead(A0),0,1023,0.0,14.0); //fmap permite realizar una ponderación del valor medido en analogRead(A0), que va de 0-1023 hasta 0-14, obteniendo a la salida el valor correspondiente en pH dtostrf(ph,2,1,phVal); // dtostrf modifica el tipo de variable de ph, de un valor float a cadena de caracteres clientMqtt.publish(topicPote,phVal); Serial.print("Ph="); Serial.println(ph); currentMillisTemp=millis(); if(currentMillisTemp-previousMillisTemp>=timerTemp) previousMillisTemp=currentMillisTemp; sensors.requestTemperatures(); tempValue=sensors.getTempCByIndex(0); dtostrf(tempValue,2,1,tempBuf); clientMqtt.publish(topicTemp,tempBuf); Serial.print("Temp="); Serial.println(tempBuf); // Si detecta interrupción nivel if (isrNivelCentinela) isrNivelCentinela = false; b=1; clientMqtt.publish(topicNivel, "1"); Serial.println("1"); if(isrNivelCentinelaOff) //Si se "suelta" el pulsador isrNivelCentinelaOff=false; b=0; clientMqtt.publish(topicNivel,"0"); Serial.println("0"); ICACHE_RAM_ATTR void isrNivel() // Marca ha ejecutado interrupción /* if(b == 0) isrNivelCentinela = true; else isrNivelCentinelaOff=true; */ b==0?isrNivelCentinela=true:isrNivelCentinelaOff=true; /*ICACHE_RAM_ATTR void isrNivelOff() // Marca ha ejecutado interrupción isrNivelCentinelaOff = true; */

Page 28: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 26 de 27

float fmap(float x, float in_min, float in_max, float out_min, float out_max) return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; void reconnectMqtt() // Repetimos hasta conectar while (!clientMqtt.connected()) Serial.println("[MQTT]Esperando conexión con MQTT..."); // Intentamos conectar if (clientMqtt.connect("")) Serial.println("[MQTT]Conectado"); else Serial.print("[MQTT]Fallo, rc="); Serial.print(clientMqtt.state()); Serial.println(" se intentará o travez tras 5 segundos"); // Esperamos 5 segundos delay(5000);

SISTEMA COMPLETO

Figura 25: Sistema completo.

Page 29: INGENIERIA ELECTRONICA - frsn.utn.edu.ar

Página 27 de 27

PROGRAMAS UTILIZADOS ARDUINO Este software compilador se utilizó para cargar el programa al NodeMCU.

Figura 26: Logo del software Arduino.

FRITZING Este software se utilizó para representar esquemáticamente el circuito utilizado (Figura 20).

Figura 27: Logo del software Fritzing.