scieee AI-readable full text Open interactive document viewer

Sistema de control semiautomático de un acuario

Calvo Aguilera, Juan Carlos

Abstract

En la actualidad existe un gran número de personas aficionadas a la acuariofilia, que es la afición a la cría de peces y organismos acuáticos en un acuario, bajo unas condiciones controladas. La mayor parte de estas personas, realizan un control diario de los parámetros que influyen en este ecosistema, tales como la calidad de ésta, la temperatura, el pH, el alimento, las horas de iluminación etc. Existen sistemas comerciales que controlan todos estos parámetros sin la necesidad de un control manual, sin embargo el problema de estos sistemas es su precio elevado. Además, los sistemas actuales no abarcan todas las necesidades del usuario, lo que te obliga a adquirir diferentes controladores especializados en un grupo de parámetros o funciones. Para solventar estos problemas, en este proyecto se va a estudiar las necesidades técnicas del controlador para crear un sistema completo y económico, capaz de mantener el acuario sin supervisión el mayor tiempo posible en unas condiciones óptimas.

Full text

spo Equation Chapter 1 Section 1 Trabajo Fin de Grado Grado en Ingeniería de las Tecnologías Industriales Sistema de control semiautomático de un acuario Autor: Juan Carlos Calvo Aguilera Tutor: Sergio Vázquez Dpto. Teoría de la Señal y Comunicaciones Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2020 iii Trabajo Fin de Grado Ingeniería de las Tecnologías Industriales Sistema de control semiautomático de un acuario Autor: Juan Carlos Calvo Aguilera Tutor: Sergio Vázquez Pérez Profesor titular Departamento de Ingeniería Electrónica Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2020 v Trabajo Fin de Grado: Sistema de control semiautomático de un acuario Autor: Juan Carlos Calvo Aguilera Tutor: Sergio Vázquez Pérez El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros: Presidente: Vocales: Secretario: Acuerdan otorgarle la calificación de: Sevilla, 2020 El Secretario del Tribunal vii A mi familia A mis profesores. ix Resumen En la actualidad existe un gran número de personas aficionadas a la acuariofilia, que es la afición a la cría de peces y organismos acuáticos en un acuario, bajo unas condiciones controladas. La mayor parte de estas personas, realizan un control diario de los parámetros que influyen en este ecosistema, tales como la calidad de ésta, la temperatura, el pH, el alimento, las horas de iluminación etc. Existen sistemas comerciales que controlan todos estos parámetros sin la necesidad de un control manual, sin embargo el problema de estos sistemas es su precio elevado. Además, los sistemas actuales no abarcan todas las necesidades del usuario, lo que te obliga a adquirir diferentes controladores especializados en un grupo de parámetros o funciones. Para solventar estos problemas, en este proyecto se va a estudiar las necesidades técnicas del controlador para crear un sistema completo y económico, capaz de mantener el acuario sin supervisión el mayor tiempo posible en unas condiciones óptimas. xvii Í NDICE DE F IGURAS Figura 1 Sistema AT-Control 26 Figura 2 Controlador Profilux 4 26 Figura 3 Placa Ferduino 27 Figura 4 Placa Ferduino con periféricos 27 Figura 5 Grado de pH 29 Figura 6 Escala de pH 29 Figura 7 Ciclo nitrógeno 32 Figura 8 Motor Paso a Paso 36 Figura 9 Esquema general 37 Figura 10 Pinout Arduino Nano 42 Figura 11 Sensor de temperatura 43 Figura 12 Desviación sensor de temperatura 44 Figura 13 Boya de nivel 44 Figura 14 Funcionamiento boya nivel 45 Figura 15 Elementos de un relé 45 Figura 16 Esquema eléctrico. 46 Figura 17 Módulo 4 relés 46 Figura 18 Esquema eléctrico placa relés 47 Figura 19 Filtro limpiador Eheim 48 Figura 20 Lámpara LED G24 48 Figura 21 Motor paso a paso y alimentador 49 Figura 22 Transistor NPN y par Darlington 51 Figura 23 Circuito interno de uno de los drivers ULN2003 51 Figura 24 Ejemplo de conexión ULN2003 51 Figura 25 Dimensiones motor paso a paso ¡Erro r! Marcador no definido. Figura 26 Diagrama de conexión de las bobinas ¡Erro r! Marcador no definido. Figura 27 Conector de conexión de bobinas ¡Erro r! Marcador no definido. Figura 28 Ejemplos ventiladores para acuarios 52 Figura 29 Display de 16 segmentos 52 Figura 30 Módulo de conexión I2C 53 Figura 31 Módulo ESP8266 54 Figura 32 Módulo reloj RTC 54 Figura 33 Montaje prototipo 1 55 Figura 34 Montaje prototipo final 56 Figura 35 Esquema eléctrico 57 Figura 36 Enrutamiento pistas PCB 57 Figura 37 Placa de circuito impreso 58 Figura 38 Posición componentes PCB 59 Figura 39 Interfaz IDE Arduino 61 Figura 40 Llamada a las librerías 62 Figura 41 Declaración de variables globales 63 Figura 42 Void setup 63 Figura 43 Void loop Menú y Lectura 64 Figura 44 Void loop activación de salidas 65 Figura 45 Funciones auxiliares: Horas () 65 Figura 46 Funciones auxiliares: Menú 66 Figura 47 Función configurar hora 67 Figura 48 Función grabar hora 68 Figura 49 Función lectura puerto serie 68 Figura 50 Libraries Arduino 69 Figura 51 Canal ThingSpeak 74 Figura 52 Campos del canal 75 Figura 53 API Keys ThingSpeak 75 Figura 54 AppInventor: Diseñador 76 Figura 55 AppInventor: Bloques 77 Figura 56 AppInventor: Generación “.apk” 77 Figura 57 AquDuino.apk 78 Figura 58 Diseño y renderizado en SolidWorks 91 Figura 59 Captura software Cura 92 Figura 60 Alimentador creado mediante impresión 3D 92 Figura 61 Piezas en 3D 93 Figura 62 Conexionado bus I2C 93 Figura 63 Funcionamiento bus I2C 94 xix Notación pH Potencial de hidrógeno ºC Grados centígrados CO ₂ Dióxido de carbono mA Miliamperio V Voltios kB Kilobyte kΩ Kiloohmio Máx. Máximo Mín. Mínimo m/s Metros por segundo % Porcentaje W Vatio L Litro cc Centímetro cúbico mg/L Miligramos por litro O Oxígeno C Carbono 21 1 I NTRODUCCIÓN Para afrontar este proyecto, se exponen en primer lugar los motivos que han llevado al estudiante a desarrollar el proyecto y a continuación los objetivos que a los que se pretende llegar tras analizar la sociedad actual. 1.1 Motivación El principal objetivo de este proyecto es diseñar un sistema electrónico capaz de controlar los parámetros críticos de un acuario, para convertir el sistema de control manual en un sistema automático, que requiera la mínima supervisión de una persona. En la actualidad se está produciendo un crecimiento exponencial de las personas aficionadas a la acuariofilia, debido a los avances en la tecnología, la cercanía de los puntos de venta y la facilidad para encontrar información, sin embargo, cada vez más aficionados recurren a sistemas para automatizar las tareas del acuario por falta la de tiempo. Cuando un aficionado comienza un proyecto de acuariofilia, el primer problema que se encuentra es el control de la iluminación, se necesitan entre 6 y 10 horas de luz al día dependiendo del tipo de montaje, pero este problema tiene fácil solución, automatizar este proceso requiere únicamente de un temporizador comercial. Al llegar el frío, se encuentra que debe mantener el acuario en torno a 23 grados, variable dependiendo del tipo de peces, debe incorporar al sistema una resistencia térmica, apareciendo los primeros problemas de control. Diariamente, se debe alimentar la fauna, algo que debe hacerse manualmente. Ante esta situación, surge otro problema cuando se quiere pasar fuera de casa unos días, así que se recurre a comprar un comedero automático. Este es el motivo de crear un sistema que pueda mantener el control del ecosistema durante el mayor tiempo posible sin supervisión y dando la posibilidad al usuario de adaptar el sistema a las necesidades del mismo. 1.2 Objetivos El objetivo principal del presente trabajo es crear un sistema electrónico capaz de mantener el control de un ecosistema acuático a un bajo coste y sin la necesidad de intervención humana continua. Este estudio contempla el análisis y desarrollo de varios campos, necesarios para acotar el verdadero objetivo del proyecto. En primer lugar, se debe plantear qué se quiere conseguir y qué necesidades se tienen que satisfacer. El desencadenante del proyecto es llegar a un sistema electrónico capaz de monitorizar una serie de “Pero, ¿para qué puede valer eso?" -- Ingeniero en la división de sistemas informáticos avanzados de IBM, hablando sobre los microchips, en 1968 24 sensores para accionar, en función de la información obtenida, los actuadores que mantendrán al sistema en equilibrio, actuando sobre los parámetros. En segundo lugar, hay que ser conscientes del avance de la tecnología en la actualidad y realizar un estudio de mercado para tener un orden de magnitud tanto a nivel económico como a nivel de parámetros de control, estableciendo con ello unos costes máximos y unos parámetros mínimos que hagan al sistema competente para el público actual. En tercer lugar y una vez estudiado el mercado, se pasa al diseño del sistema, encontrándose en este punto con todos los datos que permitirán seleccionar el hardware necesario, diseñar los circuitos de control que posteriormente se podrán trasladar a un PCB y posteriormente el diseño físico y fabricación del sistema de control. En último lugar, debe comprobarse el sistema, simulando todos los estados posibles, depurar los posibles fallos, actualizar y montar el sistema y finalmente, comprobar su funcionamiento en un acuario real. 25 2 M ARCO T EÓRICO La acuariofilia es conocida como la afición a la cría de peces y organismos acuáticos en unas condiciones controladas. Desde la antigüedad ha interesado la cría de carpas doradas con fines ornamentales en recipientes o estanques, desde hace 2000 años. Los primeros indicios de acuariofilia, requería de especies resistentes, criados en vasijas cerámicas a temperatura ambiente y se requería de cambios constantes de agua. La evolución de estas vasijas, dio como resultado las urnas o acuarios que son conocidos hoy en día. En la actualidad, hay numerosos tipos de acuarios, según el tipo de especies que contienen. Se pueden clasificar como acuarios de agua dulce y acuarios marinos o de agua salada. A su vez, pueden ser clasificados como acuarios HIGH TECH o acuarios LOW TECH, cuya diferencia es la adición o no de CO2, y el aumento en lúmenes y abonado que ello conlleva para el crecimiento de plantas. Otra clasificación denotada por los aficionados es su designación por el tipo de organismo que contienen, destacando los caracolarios, que contienen únicamente caracoles y plantas, los gambarios, donde únicamente habitan gambas y plantas y los acuarios comunitarios, en los que pueden convivir peces, caracoles, gambas y plantas todos ellos compatibles en perfecta armonía. 2.1 Estudio de Mercado. A la hora de mantener un acuario, es necesario controlar unos parámetros para mantener el equilibrio y las condiciones óptimas del ecosistema. En el mercado, existen controladores pensados para el control de estos parámetros, ejemplo de ello son los controladores AT-Control de la empresa Aqua Medic [1] mostrado en la Figura 1, que permite llevar un control a través del PC, con numerosas posibilidades como la creación de gráficas y estadísticas o el controlador Profilux Controller 4 de la empresa Profilux [2] representado en la Figura 2, siendo ligeramente superior, al permitir al usuario la interacción desde un ordenador o un Smartphone. “Todo lo que puede ser inventado ha sido ya inventado" -- Charles H. Duell 32 2.2.3 Alimentación Alimentar a los peces de un acuario de forma natural y adecuada a sus necesidades no debería suponer un problema, siempre y cuando se sigan una serie de pautas. El alimento debe ser suministrado siempre por la misma persona, así se evita alimentar demasiado o muchas veces a los peces. Alimentar la cantidad justa, sin excesos, una alimentación correcta es el alimento que sean capaces de comer en un minuto. El exceso de alimento, puede desestabilizar los parámetros del acuario, atascar el filtro y desequilibrar el pequeño ecosistema. 2.2.4 Filtro limpiador El filtro del acuario se encarga de recircular el agua del tanque y de filtrar los componentes químicos potencialmente tóxicos que se van acumulando por la actividad biológica de peces y plantas. Cuando se alimenta a los peces, se inyecta nitrógeno en el pequeño ecosistema, este nitrógeno no es procesado inmediatamente, debe ser digerido por el sistema digestivo de los peces, para transformarlo en amoniaco a través de las heces. Estas heces, comenzarán a descomponerse lentamente, liberando el amoniaco al agua, que en pequeñas concentraciones resulta tóxico para el acuario. Las bacterias del filtro, descomponen este amoniaco convirtiéndolo en nitrito, el nitrito lo convierten en nitrato que puede ser utilizado por las plantas como fertilizante. A este proceso se le conoce como el ciclo del nitrógeno, representado a continuación en la Figura 7. Figura 7 Ciclo nitrógeno Otra de las funciones del filtro es capturar las posibles partículas sólidas en suspensión, para su posterior eliminación mediante la limpieza del mismo. 33 2.3 Requisitos del proyecto Una vez estudiado el mercado y conocidos los parámetros que afectan al sistema, se deben fijar unos requerimientos acordes al estudio previo, que serán los parámetros que mantendrán la estabilidad del proyecto. 1. Alimentación eléctrica del sistema. El sistema deberá tener una fuente de alimentación para conectarse a la red eléctrica y que sea capaz de comenzar a funcionar de manera automática. El sistema tendrá unos valores iniciales que cargará en el primer arranque: a. Temperatura. b. Horario iluminación. c. Horario alimentación. 2. Temperatura. Como se ha explicado en el apartado 2.2.1.1 Temperatura, el sistema debe ser capaz de mantener una temperatura estable, acorde al tipo de organismos que se quiere mantener en el acuario. Al ser un proyecto que posteriormente se le harán pruebas para garantizar la estabilidad, se va a elegir unos peces tropicales llamados Guppys que son muy tolerantes a diferentes condiciones de agua. La temperatura ideal para estos organismos es de 25 ºC, con este dato, ya se tiene fijado el parámetro de temperatura, con una precisión de ± 1 ºC. 3. Iluminación. El sistema necesita iluminación externa para mantener a los organismos en perfectas condiciones y las plantas puedan realizar la fotosíntesis. Según la elección del tipo de acuario, se necesita un sistema capaz de suministrar 27 a 30 lúmenes/litro durante 8 h. Se utilizarán los avances en iluminación y la tecnología LED [2] para hacer un sistema eficiente. 4. pH. Se sabe por experiencia, que cuando el sistema se mantiene estable, el valor del pH apenas varía. Debido al alto coste de estos sensores, se va a prescindir de esta medida, sin embargo, se realizará una medida manual cuando se efectúen cambios de agua. 5. Botonera y Display. Al surgir la necesidad de interactuar con el sistema, se dotará al sistema de un Display que muestre los valores medidos de cada parámetro y una botonera para poder controlar manualmente el sistema. 6. Alimentador automático. Uno de los principales problemas que aparecen cuando tenemos un acuario, es el poder alimentar a los peces en horarios diurnos, debido a los horarios de trabajo, hobbies, etc. En base a sistemas comerciales, se va a dotar al sistema de un comedero automático que será accionado de forma automática a la hora configurada. 7. Control wifi. Para poder controlar el sistema desde el Smartphone, se dotará al sistema de conexión wifi, mediante la cual se podrá mandar órdenes como encender o apagar la luz, o alimentar a los peces. 34 35 3 E STUDIOS P REVIOS Como análisis previo del proyecto, se ha adquirido una visión global del proyecto y se han recopilado los datos que se deben procesar para acometer el proyecto. Para poder controlar el sistema, se debe seleccionar qué tipos de sensores y actuadores se necesitarán, qué tipos de interfaces y comunicaciones va a requerir el sistema y en función del número y tipo de entradas y salidas analógicas o digitales, poder elegir el microcontrolador. Como se ha comentado en el apartado 2.2 Parámetros de control, se va a controlar los parámetros del agua, iluminación, comida, etc. Como punto inicial, se debe conocer el número de sensores y de actuadores que se necesitarán y cómo van a comunicarse con el microcontrolador. Los parámetros de control del sistema serán: la temperatura, la iluminación, la comida, el filtro limpiador y el nivel de agua. Para poder controlar los parámetros descritos, se debe buscar qué sensores existen en el mercado con los que se pueden controlar estos parámetros, investigar el tipo de comunicación que requiere con el microcontrolador, si es analógico o digital, y cómo mostrar la información al usuario. Para poder medir la temperatura, se necesita un sensor de temperatura. En el mercado se puede encontrar multitud de sensores con esta función, tanto analógicos como digitales. Entre los sensores analógicos destacan los termistores NTC, son sensores resistivos que varían con la temperatura de forma negativa. Se puede calcular la curva que relaciona la resistencia con la temperatura con la siguiente fórmula matemática:   =  ·    Siendo R T el valor de la resistencia a la temperatura T (en kelvin. 0 ºC = 273,15 K). A = una constante que depende del termistor NTC, y representa el valor de la resistencia del termistor NTC cuando la temperatura es supuestamente infinita. B = es la resistencia característica del material de que está hecho el termistor NTC. Su valor está comprendido entre 2000 K y 4000 K. Los fabricantes no suelen proporcionar los valores de A y B, por lo que debe calcularse con el valor de la resistencia a diferentes temperaturas. La curva de estos termistores no es lineal, por lo que existen diferentes formas de linealizar la curva usando circuitos fáciles, al no ser objeto de este estudio, no se entrará en detalle. Los sensores digitales pueden tener diferentes encapsulados, diferentes formas de funcionamiento, diferentes resoluciones. Entre ellos, destacan los sensores de platino PT100 o PT1000 caracterizados porque proporcionan un valor lineal con la temperatura, muy utilizado en el ámbito industrial, y los sensores DS18B20 que será el utilizado en este proyecto, al poseer un encapsulado metálico que lo protege frente a inmersión. Este sensor posee otra ventaja adicional, se comunicará con el microprocesador a través del protocolo de comunicación “1-Wire”, solo necesita un cable para la comunicación y en el mismo pueden conectarse diferentes sensores. Además, cumple con el rango de temperatura que se necesita. Para regular la temperatura, se va a conectar una resistencia termocalentadora y un ventilador para el caso que la temperatura del agua sea superior a la temperatura de consigna. Por tanto, se necesita una entrada para el sensor, y dos salidas a relé, para el ventilador y la resistencia. Para medir la cantidad de luz, se puede encontrar en el mercado diversos sensores capaces de medir este parámetro. Entre ellos, destacan los sensores LDR o fotorresistor, cuya resistencia disminuye al aumentar la intensidad de luz incidente. 36 En este caso, no se tiene la necesidad de medir la cantidad de luz que recibe nuestro acuario, ya que al encontrarse en el interior, la única luz que va a recibir es la aportada por los focos LED, que se colocarán en el proyecto. Estos focos estarán encendidos 8 horas al día. Se van a colocar 2 focos de 7.5 W cada uno, esto es, una potencia total de 15 W. Esta necesidad se ha calculado a partir de las tablas del apartado 2.2, en las cuales se puede calcular, partiendo de un acuario de bajos requerimientos, que la necesidad en lúmenes por litro son de 20 lúmenes, y si se tiene un acuario de 60 litros, sale un total de 1200 lúmenes, equivalentes a 15 W luz LED. Para mantener la luz 8 horas encendida, se dotará al sistema de un módulo RTC (Real Time Clock) DS1307 que permita encender y apagar la luz en el mismo horario cada día. El módulo elegido incluye una batería para mantener la hora en caso de pérdida energética y se comunica con el microprocesador a través de un puerto de comunicación I2C (pines SDA y SCL) [26]. Por tanto, se necesita una salida a relé para controlar la luz y puerto de comunicación I2C. Para mantener la correcta alimentación de los peces, se va a dotar a este proyecto de un sistema que administre la comida de manera automática. En el mercado existen multitud de equipos que realizan este propósito, sin embargo, tras estudiar el modo de actuación de estos equipos, se va a desarrollar un comedero automático propio, utilizando un motor paso a paso 28BYJ-48 + driver ULN2003 [8], mostrado en la Figura 8 y será el encargado según el número de vueltas, de administrar más o menos alimento a nuestro acuario. Figura 8 Motor Paso a Paso Mediante el uso de la impresión 3D, se ha creado el recipiente que será el encargado de almacenar la comida. El mismo irá acoplado al motor y mediante una abertura, dejará caer una porción de comida por cada vuelta. El elemento más importante del acuario es el filtro limpiador, el cual es el encargado de mantener el buen estado del agua del acuario gracias a la filtración. Mediante la filtración mecánica captura partículas en suspensión para mantener el agua cristalina, y mediante la filtración química, captura la materia orgánica para convertirla en abono o alimento para nuestras plantas. Los expertos recomiendan mantener el filtro funcionando de forma continua, para ello, se necesita una salida a relé del controlador, la cual estará siempre activada. Existen otros elementos que se incluyen en este proyecto los cuales se especificarán a continuación: Display o pantalla LCD, será la encargada de mostrar los datos de los sensores, así como el estado del acuario y los mensajes de advertencia que puedan existir. Se va a seleccionar la pantalla LCD1602 de 16x2 caracteres, lo que es lo mismo, 16 columnas y 2 filas. Para controlar este LCD, se va a utilizar un driver o adaptador PCF8574, el cual permite controlar la pantalla mediante comunicación I2C. Anteriormente, ya se utilizaba el puerto I2C para comunicar el módulo RTC, así que no se necesita ninguna salida adicional. Pulsadores y potenciómetro, son los encargados de traducir la orden del usuario al microprocesador. En este caso, se utilizarán 3 pulsadores para Menú/SET, Luz/+ y alimentar/salir y un potenciómetro para seleccionar las horas y tiempos. 37 Necesitamos por tanto, 3 entradas digitales y una entrada analógica. El sistema tendrá la opción de recibir órdenes del usuario a través de un Smartphone, mediante una sencilla aplicación, se conectará a la IP asignada por el router al módulo wifi, que recibirá la orden y la mandará directamente al microprocesador para actuar en consecuencia. El módulo ESP-01[10], basado en ESP8266 [7], es un módulo que mantendrá una comunicación serie con el microprocesador. El módulo puede trabajar en 2 modos: como estación Wifi (Wifi Station) o como Punto de Acceso (Access Point), al trabajar como estación el módulo se conecta a la red Wifi presente en el hogar. El modo Access Point se usa si se quiere crear una red propia en el chip y así conectarnos directamente. Para este proyecto, se va a configurar el modo Access Point + Station (AP+STA), que permite conectarse a la red doméstica y en caso de no estar configurada, utilizarlo como punto de acceso. En la Figura 9 se puede observar un esquema general para mostrar de forma gráfica los elementos descritos. Figura 9 Esquema general 38 39 4 D ESARROLLO H ARDWARE Si se investiga los sistemas que tenemos en el mercado, surge la duda de si se debería utilizar un sistema con microcontrolador o un sistema con microprocesador. Para salir de la duda, se analizarán ambos sistemas y así, poder elegir el más adecuado. La diferencia principal es que uno es un Autómata programable y el otro un ordenador, ahora se debe decidir cuál de ellos se usará para este proyecto. Para un proyecto de gran envergadura, el sistema a utilizar sería ambos, cada uno en la tarea que mejor hace. Por ejemplo, la lectura de sensores, activación de actuadores, envío de alarmas, activación motores, etc. se deja para el microcontrolador, mientras que el procesamiento de esos datos, el entorno gráfico, envío y recepción de información se deja para un ordenador. Los microcontroladores están diseñados para ser utilizados en aplicaciones puntuales, al menor coste posible, donde el microcontrolador tiene un número pequeño de tareas. Estas aplicaciones ejecutan un programa almacenado en la memoria interna que ejecuta siempre de forma cíclica interactuando con el exterior mediante entradas y salidas. 4.1 Elección del microcontrolador En el mercado actual existen multitud de microcontroladores capaces de soportar este proyecto, por ejemplo destacan la serie ARM Cortex M, de ARM, el microcontrolador 8051 de Intel, los microcontroladores PIC de Microchip o la línea del microcontrolador AVR de Atmel, siendo el más conocido por ser el cerebro de la mayoría de las versiones del Arduino. La intención es elegir una plataforma de código abierto, para facilitar el desarrollo debido al gran soporte que se puede encontrar. Se ha elegido la plataforma Arduino, debido a que ofrece algunas ventajas respecto al resto de microcontroladores, simplifica el proceso de trabajo y existe un gran desarrollo de proyectos entorno a esta plataforma. Algunas de las ventajas que ofrece la plataforma Arduino son: ● Su bajo coste. Estos microcontroladores tienen un coste bajo, con poco dinero se puede conseguir un kit de Arduino con los componentes necesarios para iniciarse en él. ● Fácil de utilizar. Cualquiera puede usarla, aun teniendo pocos conocimientos de programación. Existen multitud de plataformas de programación que te enseñan a programar incluso sin conocimientos previos, como por ejemplo Scratch. ● Plataforma abierta. Es de código abierto, por lo que se pueden construir gran cantidad de proyectos y posibilidades de desarrollo. "Hardware: las partes de un ordenador que pueden ser pateadas" -- Jeff Pesis 40 ● Alta flexibilidad. Se puede trabajar en todas las plataformas informáticas, o casi todas, como Windows, iOS o Linux. ● Existe gran variedad de placas, no hay sola una placa sino una gran familia que tienen ciertas similitudes y diferencias en función del proyecto que se quiera realizar. ● El hardware y software es ampliable y de código abierto, con grandes posibilidades de crear proyectos de todo tipo. ● Tiene muchas aplicaciones y usos, se puede crear con Arduino prácticamente lo que se desee, incluso proyectos profesionales. 4.1.1 Arduino Arduino es una plataforma de electrónica abierta para la creación y construcción de prototipos basados en software y hardware libre, flexible y fácil de usar. La creación de esta plataforma fue para aficionados a la electrónica y artistas en crear entornos u objetos interactivos. Arduino recibe información del entorno a través de sensores conectados a sus pines de entrada y manda órdenes a través de sus salidas, permitiendo controlar motores, servos, luces...etc. Para trabajar con Arduino se necesita tener conocimientos de electrónica y programación. El microcontrolador situado en la placa controla el lenguaje de programación Arduino, que está basado en lenguaje C, C++ y el entorno de desarrollo Arduino, que está basado en Processing. Los proyectos hechos con Arduino se pueden ejecutar sin necesidad de conectarlos a un PC. El hardware consiste en una placa con un microcontrolador Atmel AVR y puertos de entrada/salida. Los microcontroladores más utilizados son Atmega168, Atmega328 y Atmega1280 por su bajo coste y sencillez. Las placas se pueden comprar hechas o para montarlas. 4.1.2 Placas Arduino Arduino es una de las primeras plataformas de microcontroladores open source, comenzando por el Arduino UNO, y posteriormente ampliando la gama para satisfacer la demanda de los usuarios acorde a cada proyecto. Entre las más populares, encontramos la versión Arduino UNO, siendo la más conocida, versátil, cómodo de usar y de ampliar. También destacan las versiones compactas como Arduino Nano y Arduino Mini, y la versión extendida Arduino Mega. Partiendo de estas versiones se han desarrollado placas que incluyen sensores, puertos de comunicación, y diferentes interfaces capaces de adaptarse a cualquier proyecto, destacando Arduino Ethernet que incluye un puerto de comunicación Ethernet o Arduino Yun, que combina un microprocesador y un microcontrolador, incluye además wifi, siendo algunas de las razones de su elevado precio. A continuación se muestra la Tabla 4, comparando las características técnicas de diferentes modelos de placa Arduino. 41 Modelo Características Arduino UNO o Microcontrolador: ATmega328 o Voltaje de funcionamiento: 5 V o Pines I/O digitales: 14 (de los cuales 6 proveen salida PWM) o Pines de entradas análogas: 6 o Corriente DC por cada pin I/O: 40 mA o Corriente DC en el pin de 3.3 V: 50 mA o Memoria Flash: 32 KB (ATmega328) de los cuales 0.5 KB son utilizados por el bootloader o SRAM: 2 KB (ATmega328) o EEPROM: 1 KB (ATmega328) o Velocidad de reloj: 16 MHz Arduino Yún o Microcontrolador AVR Arduino: ATmega32u4 o Voltaje de funcionamiento: 5 V o Pines I/O digitales: 20 o Canales PWM: 7 o Pines de entradas análogas: 12 o Corriente DC por cada pin I/O: 40 mA o Corriente DC en el pin de 3.3 V: 50 mA o Memoria Flash: 32 KB (de los cuales 4 KB son utilizados por el bootloader o SRAM: 2.5 KB o EEPROM: 1 KB o Velocidad de reloj: 16 MHz o Procesador Linux: Atheros AR9331 o Arquitectura: MIPS 400 MHz o Ethernet: IEEE 802.3 10/100 Mbit/s o Wifi: IEEE 802.11 b/g/n o USB Tipo A: 2.0 o Lector de tarjeta: sólo Micro-SD o RAM: 64 MB DDR2 o Memoria Flash 16 MB Arduino Ethernet o Microcontrolador: ATmega328 o Voltaje de funcionamiento: 5 V o Pines I/O digitales: 14 (de los cuales 4 proveen salida PWM) o Pines de entradas análogas: 6 o Corriente DC por cada pin I/O: 40 mA o Corriente DC en el pin de 3.3 V: 50 mA o Memoria Flash: 32 KB (ATmega328) de los cuales 0.5 KB son el bootloader o SRAM: 2 KB (ATmega328) o EEPROM: 1 KB (ATmega328) o Velocidad de reloj: 16 MHz o Controlador embebido Ethernet W5100 TCP/IP o Tarjeta MicroSD, con adaptadores activos de voltaje Arduino Mega o Microcontrolador: ATmega328 o Voltaje de funcionamiento: 5 V o Pines I/O digitales: 54 (de los cuales 15 proveen salida PWM) o Pines de entradas análogas: 16 o Corriente DC por cada pin I/O: 40 mA o Corriente DC en el pin de 3.3 V: 50 mA o Memoria Flash: 256 KB de los cuales 8 KB son utilizados por el bootloader o SRAM: 8 KB (ATmega328) o EEPROM: 4 KB (ATmega328) o Velocidad del reloj: 16 MHz 48 Figura 19 Filtro limpiador Eheim 4.3.2 Iluminación Conociendo el tipo de acuario que se va a mantener, y habiendo calculado en el apartado de estudios previos la necesidad lumínica, se necesita controlar una lámpara de 15 W de consumo a 230 VAC. La lámpara LED será comandada por un relé que se accionará a través de una salida del microcontrolador. Para este proyecto, se ha utilizado 2 lámparas LED G24 [31] comerciales de 7.5 W cada una, representadas en la Figura 20, colocadas en paralelo. Se han realizado unas piezas de soporte mediante impresión 3D para adaptarlas al acuario, que se detalla en el Anexo 2.1 A del proyecto. Figura 20 Lámpara LED G24 49 4.3.3 Alimentador automático Para automatizar el sistema de alimentación de este proyecto y tras estudiar el modo de actuación de los equipos comerciales existentes para tal fin, se ha decidido desarrollar un comedero automático propio, utilizando un motor paso a paso 28BYJ-48 [8] + driver ULN2003 [12], que será el encargado según el número de vueltas, de administrar más o menos alimento al acuario. Figura 21 Motor paso a paso y alimentador Mediante el uso de la impresión 3D, se ha creado el recipiente encargado de almacenar y dosificar el alimento, representado en la Figura 21 junto al motor y el driver. Para accionar el sistema, se ha seleccionado un motor paso a paso para tener control del número de vueltas y tener control de la cantidad de comida. En la Figura 22 se puede observar este pequeño motor, siendo muy habitual en los proyectos con pequeños robots y posicionadores caseros sencillos, porque aunque no es demasiado potente, ni rápido tiene varias características que lo hacen muy llamativo, además de ser muy barato. Figura 22 Dimensiones motor paso a paso Es un motor unipolar con las siguientes características: Tensión nominal de entre 5 V y 12 V. 4 Fases. Resistencia 50 Ω. Par motor de 34 Newton por metro más o menos 0,34 Kg por cm. Consumo de unos 55 mA. 8 pasos por vuelta. 50 Reductora de 1 / 64. Esto quiere decir que como es de 4 pasos (Steps) por vuelta y usa una reductora de 1 /64, por lo que necesitamos dar 4 * 2 * 64 = 512 impulsos para completar un giro completo a medios pasos. Hay 4 bobinas, si las excitamos de una en una tenemos 4 pasos x 64=256 pasos por vuelta. Pero también se puede excitar la bobina mediante medios pasos, excitando dos bobinas a la vez para obtener el paso intermedio entre una y otra bobina, de esta combinación se obtiene que para dar una vuelta son 8 * 64 = 512 impulsos. En la Figura 23 se observa un esquemático para entender el funcionamiento interno de su bobinado y el conector asociado a cada bobina en la Figura 24. Figura 23 Diagrama de conexión de las bobinas Figura 24 Conector de conexión de bobinas Para no sobrecargar y quemar las salidas del microcontrolador, el motor precisa un driver ULN2003, es un circuito integrado muy versátil, compuesto internamente por 7 drivers idénticos e independientes entre sí. Cada driver está constituido por dos transistores en configuración Darlington, como los representados en la Figura 25. La configuración Darlington [32], ideada por Sidney Darlington en 1953, consiste en conectar dos transistores bipolares en cascada obteniendo así, una ganancia elevadísima porque se multiplica la ganancia de cada uno de los dos transistores. Gracias a ello, se puede controlar cargas de una cierta potencia con corrientes de entrada muy pequeñas. 51 Figura 25 Transistor NPN y par Darlington En la figura 23 se puede observar el circuito interno de uno de los driver del ULN2003. En serie con la entrada se puede ver una resistencia de 2,75 K y otras resistencias de polarización que mejoran las características del driver. La resistencia de entrada de cada driver ahorra de poner resistencias externas cuando conectamos el ULN2003 al microcontrolador. Figura 26 Circuito interno de uno de los drivers ULN2003 En la Figura 24, podemos observar un ejemplo de conexionado de diferentes actuadores mediante el uso de un integrado ULN2003. Figura 27 Ejemplo de conexión ULN2003 En este caso, cada una de las salidas del driver acciona una fase del motor paso a paso, al tener 4 fases, se necesitan 4 salidas del microcontrolador. 4.3.4 Ventilador En épocas del año calurosas, como pueden ser los meses de verano, debido a la alta temperatura ambiente, por ejemplo en Sevilla puede sobrepasar los 40 ºC en interiores, se produce un aumento excesivo de la temperatura del acuario. Hace algunos años, este aumento de la temperatura se debía a la radiación de las lámparas existentes en el mercado, sin embargo, hoy día y gracias a la tecnología LED, se puede decir que ha mejorado 52 enormemente este aspecto, evitando que la superficie del agua se caliente. La forma más económica para conseguir reducir la temperatura del acuario es el uso de un ventilador, que renueva constantemente la temperatura de la superficie del agua, evitando que se caliente en exceso. En el mercado se puede encontrar ventiladores especiales para acuarios, con varios ventiladores. También vemos aficionados que usan ventiladores comunes del hogar apuntando a la superficie. Para reducir costes, se podría utilizar un ventilador reciclado de un ordenador antiguo, el cual se accionará con uno de los relés instalados. Figura 28 Ejemplos ventiladores para acuarios 4.4 Otros elementos del montaje Además de los elementos descritos, el sistema contiene otros elementos que se explican a continuación. 4.4.1 LCD Una de las principales necesidades es mostrar la información al usuario de los parámetros que se están controlando, y que el usuario pueda actuar en el sistema. Para ello, se va a utilizar un Display LCD [23] de 16x2 segmentos, es decir, 16 caracteres y 2 líneas. En la Figura 29 se observa un esquemático de este periférico. Figura 29 Display de 16 segmentos Este Display cuenta con 16 pines de conexión, sin embargo vamos a utilizar un módulo de comunicación I2C [33] para simplificar esta conexión, pasando de los 16 pines a 4 pines, que son VCC, GND, SDA y SCL. 53 Figura 30 Módulo de conexión I2C El módulo mostrado en la Figura 30, es básicamente un módulo de ampliación de salidas controlado mediante I2C, cuyo diseño del PCB está adaptado al control de las este tipo de LCD. 4.4.2 Pulsantería Para poder actuar sobre el sistema, se ha dotado a éste de 3 pulsadores y un potenciómetro, con el que se puede ajustar los parámetros, entrar a los diferentes menús y configuraciones, encender y apagar los actuadores y ajustar los tiempos de actuación. Se ha decidido utilizar 3 pulsadores con las siguientes funciones: Pulsador 1 Blanco -> Menú/Confirmación. Con este pulsador, se accede al menú de configuración de tiempos y ajuste de hora, y una vez modificado el valor, lo guarda en memoria. Pulsador 2 Blanco -> Luz/Siguiente. Con este pulsador, se activa la iluminación del acuario durante el tiempo fijado en su configuración (por defecto 15 min). Si se está dentro del menú, sirve para saltar de parámetros de configuración. Pulsador 3 Azul -> Alimentación/Salir. Al accionar este botón, se da una orden al alimentador de actuar. Si se pulsa este botón visualizando el menú de configuración, éste toma la orden de salir del menú. Potenciómetro -> Con este elemento, se puede interactuar sobre los valores que tomarán los distintos parámetros. 4.4.3 Módulo ESP8266 Tras investigar en el mundo de Arduino, se localiza el microcontrolador ESP8266. Se trata de un chip integrado con conexión Wifi y compatible con el protocolo TCP/IP. El objetivo principal es dar acceso a cualquier microcontrolador a una red, caracterizado además por su bajo consumo y su bajo coste. Este módulo, es usado en electrodomésticos conectados, automatización del hogar, monitor de bebés, cámaras IP o IoT (Internet of Things). Las características básicas de este módulo son: · CPU Tensilica L106 32-bit · Voltaje de operación entre 3 V y 3,6 V · Corriente de operación 80 mA · Temperatura de operación -40 ºC y 125 ºC · Soporta los principales buses de comunicación (SPI, I2C, UART) · Voltaje de trabajo entre 3 V y 3,6 V. Para realizar la comunicación con este módulo, se va a utilizar el puerto Serial del Arduino, y la librería SoftwareSerial, para crear un nuevo puerto serie por software y poder tener 2 comunicaciones, una con el módulo y otra de depuración con el ordenador. Las posibilidades que ofrece este módulo son infinitas. En este caso, el proyecto se acota a controlar parámetros básicos como son la lectura de sensores de temperatura, y actuar sobre el comedero 54 automático, la luz, o la bomba. Para facilitar el modo de funcionamiento, el módulo ha sido programado con los parámetros de la red y los credenciales para acceder a la base de datos. Por lo tanto, solo se tiene que enviar el valor de los parámetros “Estado de la bomba”, “Estado de la iluminación”, “temperatura del agua” y “nivel de agua” y el módulo se encarga de enviarlos y devolver la orden que ha recibido de la aplicación móvil. En la Figura 31 se puede observar una imagen física de este módulo, pudiendo diferenciar claramente algunos componentes cono su procesador, ESP8266 [7], su antena wifi, o la memoria Flash. Figura 31 Módulo ESP8266 4.4.4 Módulo RTC (Real Time Clock) Un módulo RTC (Real Time Clock) o "Reloj de tiempo real" consiste en un circuito integrado alimentado por una batería el cual, en todo momento, registra la fecha, día de la semana y hora al igual que un reloj digital convencional. Sólo que estos datos únicamente podrán ser consultados mediante comunicación I2C Para comunicarse con el módulo [6], existen multitud de librerías que simplifican este proceso. Al ser un módulo I2C, únicamente se utilizará 4 pines de conexión, VCC, GND, SDA y SCL, siendo SDA y SCL comunes para todos los módulos I2C. Como se muestra en la Figura 32, el módulo RTC DS1307 incorpora además una batería para mantener la memoria energizada, y así no pierda la hora y fecha cuando hay una falta de alimentación. Figura 32 Módulo reloj RTC Los módulos RTC son muy baratos, se pueden encontrar a un precio aproximado de 1€ en vendedores como eBay o AliExpress. Gracias a este módulo, se tiene el control del tiempo de iluminación o de la hora a la que se programa el alimentador automático. 55 4.5 Montaje del sistema Para la realización de las pruebas, se ha montado el sistema físicamente en una protoboard, probando así los diferentes elementos y su conexionado. Para realizar unas pruebas iniciales, se ha prescindido de los relés, conectando a la salida un LED con su resistencia en serie que permita observar el estado de los actuadores. En la Figura 33, se puede ver arriba a la izquierda el Display LCD, a su derecha el reloj RTC. Si se mira debajo a la derecha podemos ver el módulo wifi ESP8266 y debajo del Arduino Nano. En la parte central del protoboard vemos la botonera y a su izquierda los LEDs correspondientes al estado de la bomba y de la luz. Figura 33 Montaje prototipo 1 En un posterior montaje, se ha encapsulado el sistema en una cajita, se ha provisto del driver del motor y de los relés necesarios, quedando el montaje como la imagen de la Figura 34. 56 Figura 34 Montaje prototipo final Este último montaje, está montado y funcionando en un acuario, ha sido testeado durante varios meses para comprobar su estabilidad, dando por exitoso el proyecto. 4.6 Diseño del PCB Tras haber probado el montaje en la placa de pruebas y comprobado las conexiones, se procederá al diseño del PCB (Printed Circuit Board) o placa de circuito impreso, creando un sistema compacto y manejable. Para el diseño, se ha utilizado el software gratuito Eagle [21], a continuación se puede observar en la Figura 35 el esquema eléctrico del prototipo. 57 Figura 35 Esquema eléctrico Primeramente se ha realizado el esquemático y conexionado de todos los componentes con sus respectivos encapsulados. Como los componentes que se están utilizando son módulos, crearemos una placa donde se inserten estos módulos, haciendo el proyecto modular, para que sea fácilmente adaptable a distintos tipos de usuarios. Una vez que se tiene el esquema eléctrico, se procede al enrutamiento en la placa de circuito impreso, que tras varias pruebas para hacer el circuito lo más compacto posible, se llega al diseño mostrado en la Figura 36. Figura 36 Enrutamiento pistas PCB 64 ● Void loop: Es la función principal del programa, tras ejecutar el setup, el programa entra en el loop que como su nombre indica es el bucle principal que se ejecuta una y otra vez mientras la placa esté encendida y dónde se llamará al resto de funciones del programa. En la Figura 43 se observa el interior del loop cuya estructura del programa se encuentra ordenada de la siguiente forma: Primeramente procede a la lectura de la hora, proporcionado por el módulo de reloj, actualiza las variables en función de la hora actual, imprime por pantalla la hora actualizada y actualiza el estado de las salidas si fuese necesario. Figura 43 Void loop Menú y Lectura En la Figura 44 se observa la parte final de la función Void loop, en la que se activan las salidas en función de los datos obtenidos previamente mediante la lectura de los sensores. 65 Figura 44 Void loop activación de salidas ● Funciones auxiliares: En la última parte del programa, se encuentran todas las funciones auxiliares, a las que se llama en el loop para realizar ciertas acciones. Se pueden encontrar funciones como el menú, mostrado en la Figura 46, desde el cual se pueden cambiar los tiempos de encendido y apagado de los actuadores, modificar la hora del módulo CLK, mostrado en la Figura 45, acceder al modo de cambio de agua o modificar el valor del temporizador de luz, entre otras. Figura 45 Funciones auxiliares: Horas () 66 Figura 46 Funciones auxiliares: Menú 5.2.2 Funciones creadas A continuación, se explica las funciones que han sido creadas para desvincular del programa principal ciertas tareas y permitir que el programa sea más fácil de entender. 5.2.2.1 ConfigurarHoras Para acceder al menú de configuración de hora, se llama a la función “ConfigurarHora ();”. Entrar en la función nos permite ajustar la hora del reloj, tanto la hora como los minutos, ajustar la hora de encendido y apagado de la iluminación, bomba, acceder al modo cambio de agua, y ajustar los tiempos de los temporizadores. 67 Figura 47 Función configurar hora Para acceder a la función mostrada en la Figura 47, se debe pulsar el pulsador 1 blanco, llamado menú, accediendo al menú de configuración de horas. Para cambiar de parámetro, se debe pulsar el pulsador 2, o “Next”, y si se quiere ajustar uno de los parámetros, se debe pulsar el botón 1, ajustar el parámetro con el potenciómetro y guardar y salir pulsando el botón azul. Al llegar al fin del menú, aparecen indicaciones de pulsar el botón azul para salir. Al pulsar cualquier botón, se activa la retroiluminación durante 1 minuto para permitir una buena visualización del LCD. 5.2.2.2 GrabarHora Esta función ha sido creada para almacenar la hora en el módulo CLK. Es llamada desde la función ConfigurarHora, que previamente ha actualizado las variables globales “H” con la hora y “M” con los minutos. Cómo se observa en la Figura 48, la función activa la retroiluminación, a continuación carga los nuevos valores de hora y minuto, y finalmente muestra por el LCD el texto “GRABANDO HORA, Espere…”. 68 Figura 48 Función grabar hora 5.2.2.3 TryGetSerialData Con la función TryGetSerialData, se leen los datos del puerto serie enviados por el módulo ESP. En la Figura 49 se puede observar el contenido de esta función. Figura 49 Función lectura puerto serie 69 5.2.3 Librerías En este apartado se detallarán y explicarán las librerías utilizadas, creadas por otros usuarios para facilitar el uso de algunas funciones que ayudan a hacer algo y simplificar el código. El IDE de Arduino trae una serie de librerías instaladas por defecto, como pueden ser: ● LiquidCrystal : para controlar pantallas de cristal líquido ( LCD ) ● SD : para leer y escribir tarjetas SD ● Servo : para controlar servomotores ● SPI : para comunicarse con dispositivos que utilizan el bus de interfaz periférica serie (SPI) ● SoftwareSerial : para comunicación en serie en cualquier pin digital. La versión 1.0 y posteriores de Arduino incorporan la biblioteca NewSoftSerial de Mikal Hart como SoftwareSerial ● stepper : para controlar motores paso a paso Además, en su página oficial, tenemos enlace a muchísimas librerías probadas y de desarrolladores de confianza, basta con ir a la sección “Libraries” de su página, como se muestra en la Figura 50. Figura 50 Libraries Arduino En este código, se han utilizado las librerías “Wire.h”, “LCD.h”, “LiquidCrystal_I2C.h”, “RTClib.h”, “Stepper.h” y “SoftwareSerial.h” que se explicará a continuación. 5.2.3.1 Wire.h Esta librería permite comunicarse con dispositivos que usan la comunicación I2C, mediante los pines del Arduino SDA y SCL. En la Tabla 6 se muestran algunas funciones de esta librería. Funciones Descripción void begin ( int ); Inicia el bus a la frecuencia seleccionada. void beginTransmission ( int ); Inicio de la transmisión por el bus I2C. 70 uint8_t endTransmission ( void ); Finaliza la transmisión de datos. uint8_t requestFrom ( int , int ); Comienza la lectura del bus, y no deja de leer hasta que encuentra el byte indicado. void onReceive ( void (*)( int ) ); Llama a una función cuando un dispositivo esclavo recibe una transmisión de un maestro. void onRequest ( void (*)( void ) ); Llama a una función cuando un maestro solicite datos de este dispositivo esclavo. Tabla 6 Funciones librería Wire 5.2.3.2 LCD.h Esta librería permite al programador usar fácilmente pantallas de cristal líquido con Arduino. Se pueden observar algunas de estas funciones en la Tabla 7. Funciones Descripción void setBacklight ( boolean on ); Activa o desactiva la iluminación de la pantalla. void setBrightness ( int brightness ); Ajusta el brillo del display LCD. void clearScreen (); Limpia la pantalla LCD. void drawPixel ( int x , int y ); void drawRect(int color, int x1, int y1, int x2, int y2); void fillRect(int color, int x1, int y1, int x2, int y2); void drawLine(int x1, int y1, int x2, int y2); void continueLine(int x, int y); void drawText(int x, int y, String text); Sirven todas para “dibujar” en el LCD, tanto píxeles, rectas, o texto. Tabla 7 Funciones librería LCD 5.2.3.3 LiquidCrystal_I2C.h Para simplificar el uso de pantallas LCD conectadas a través del Puerto I2C, han creado esta librería con las siguientes funciones principales, algunas de ellas se explican en la Tabla 8. 71 Funciones Descripción LiquidCrystal_I2C (uint8_t lcd_Addr, const int *dev); Define la dirección I2C del LCD y define los pines de conexión. clear(); Limpia la pantalla LCD home(); Posiciona el cursor en la esquina superior izquierda del LCD. cursor(); Muestra un guión bajo el siguiente carácter a imprimir. Blink(); Muestra un cursor parpadeante noBlink(); Deshabilita el estilo del bloque del cursor. write(); Esta función puede ser usada para escribir caracteres en el LCD. leftToRight(); or rightToLeft(); Esta función hace que el texto fluya de izquierda a derecha o derecha a izquierda. setCursor ( int x , int y ); Desplaza el puntero a la posición indicada. Tabla 8 Funciones librería LiquidCrystal_I2C 5.2.3.4 RTClib.h La librería RTClib.h de Adafruit contiene las funciones de la Tabla 9, entre otras, que permiten trabajar con un reloj por software (RTC_Millis) y algunos relojes físicos como RTC_DS1307. Funciones Descripción DateTime Tipo de dato fecha y hora. RTC_DS1307 Tipo de variable del módulo RTC. now.year(); now.month(); now.day(); now.hour(); now.minute(); now.second(); Devuelve el año, mes, día, hora, minuto o segundo actual. 72 now.dayOfTheWeek(); Devuelve el día de la semana. begin(); Inicia la comunicación serial. adjust(DateTime()); Almacena la fecha y hora en formato 24 h con min y segundos (aaaa, mm, dd, hh, mm, ss) Tabla 9 Funciones librería RTClib 5.2.3.5 Stepper.h Esta biblioteca mostrada en la Tabla 10, ha sido desarrollada para simplificar el control de motores paso a paso unipolares o bipolares. Funciones Descripción Stepper variable(int, int); Tipo de variable del módulo Motor paso a paso. Stepper Motor1(Pasos motor, conexión bobinas internas) step(); Ordena al motor dar el número de vueltas indicadas. setSpeed(); Fija la velocidad del motor paso a paso en RPM. Tabla 10 Funciones librería Stepper 5.2.3.6 SoftwareSerial.h La librería SoftwareSerial ha sido desarrollada para permitir la comunicación serie en otros pines digitales del Arduino, usando el software para replicar la funcionalidad. Es posible tener múltiples puertos serie de programas con velocidades de hasta 115200 bps. En la Tabla 11 se observan algunas de sus funciones principales. Funciones Descripción SoftwareSerial(rxPin, txPin) ; Crea una instancia de un objeto SoftwareSerial SoftwareSerial.begin (); Configura la velocidad de la comunicación serie. mySerial.available() ; Obtiene el número de bytes (caracteres) disponibles para la lectura de un puerto serie software 73 mySerial.isListening(); Prueba para ver si el puerto serie software solicitado está escuchando activamente. mySerial.read(); Devuelve un carácter que se recibió el pin RX del puerto serie de software. mySerial.readBytesUntil(); Devuelve los bytes recibidos por el pin RX del puerto serie hasta que encuentra el parámetro indicado. mySerial.print("\t"); Imprime datos al pin de transmisión del puerto serie software. Funciona igual que la función Serial.print (). mySerial.write(); Imprime datos al pin de transmisión del puerto serie software como bytes en bruto. Tabla 11 Funciones librería SoftwareSerial 5.2.3.7 ThingSpeak.h Esta biblioteca contiene funciones específicas que permiten a un Arduino u otro hardware compatible escriba o lea datos hacia o desde ThingSpeak, una plataforma de datos abierta para Internet de las Cosas con análisis y visualización en MATLAB. Se observa un ejemplo de las principales funciones en la Tabla 12 Funciones Descripción writeField() ; Escribe los valores seteados en el canal de ThingSpeak. setField (); Setea el valor a escribir en los campos del canal. readLongField(); Lee el campo del canal, y guarda el dato de tipo long. readStatus(); Devuelve un valor de confirmación de escritura en el canal. Tabla 12 Funciones librería ThinSpeak 5.2.3.8 ESP8266WiFi.h La librería ESP8266Wifi permite al usuario conectar el módulo a una red wifi para comenzar el envío y recepción de datos. En la Tabla 13 se pueden observar algunas de las funciones utilizadas en el proyecto. 80 6.3 Prueba 3: Activación de la Bomba Como se ha comentado en el apartado 4.3.1 Filtro limpiador, uno de los actuadores más importantes del sistema es la bomba, ya que es la encargada de mantener el ecosistema en buen estado. Se comprueba que se activa correctamente la salida a relé de la bomba, y se mantiene activada durante las horas configuradas en el programa. Se comprueba además, que el modo de cambio de agua funciona de la forma esperada, interrumpiendo el estado de esta cuando sea necesario hacer un cambio de agua. Se ha comprobado el correcto funcionamiento del actuador en función de la hora del día, dando por exitosa la prueba. 6.4 Prueba 4: Activación de la Iluminación Para comprobar el correcto encendido de la iluminación, se ha procedido a modificar los tiempos de encendido y apagado, para poder visualizar el funcionamiento en un corto periodo de tiempo. Hemos comprobado además, el modo de luz temporizada, la cual va asignada al botón físico “Luz” que mantiene la luz encendida por el tiempo configurado, pudiendo ser modificado desde el menú. Fijado el tiempo de encendido, hay que asegurarse que la luz se apaga pasado este tiempo, garantizando el éxito de la prueba. 6.5 Prueba 5: Alimentador automático Una vez conectado el motor paso a paso, se prueba que el sentido de giro es el correcto. Se prueba la orden del botón físico “Alimentar”, comprobando que el motor gira 1 vuelta completa en el sentido correcto. Se comprueba además, que el motor gira a la hora configurada, el número de vueltas configuradas. Tras visualizar el correcto funcionamiento de este actuador, se da por exitosa la prueba del alimentador. 6.6 Prueba 6: Display Tras el encendido del sistema, se ha podido observar que el Display funciona correctamente, sin embargo, no se ha comprobado que toda la información se muestra de forma adecuada. Para ello, se entra al menú, y se comprueba que todos los datos programados se muestran de forma correcta. Se comprueba la retroiluminación, su activación con la pulsación de algún botón físico, y su desactivación pasados 20 segundos tras haber pulsado cualquier botón. Una vez comprobado que el menú se visualiza de forma correcta y la retroiluminación obedece a las pulsaciones y tiempos programados, se puede pasar a la siguiente prueba. 6.7 Prueba 7: Botonera y potenciómetro Como se ha indicado anteriormente en el apartado 4.4.2 Pulsantería, para poder interactuar con el sistema, se ha dotado al sistema de 3 pulsadores físicos y un potenciómetro, que permiten navegar por el menú, accionar los actuadores o configurar los tiempos de actuación de los actuadores. Para comprobar el funcionamiento de los pulsadores, se pulsa cada uno de ellos comprobando que 81 realizan la acción programada. En el caso del potenciómetro, se puede observar en la pantalla principal su estado, siendo este el número de vueltas del motor de alimentación, pudiendo observar como varía al ser accionado. Tras comprobar que la botonera funciona de forma adecuada y el potenciómetro está en el rango indicado, se da por exitosa la prueba. 6.8 Prueba 8: Temperatura y ventilador de refrigeración Previamente, se ha conectado el sensor de temperatura y mostrado los datos leídos del sensor por la terminal del IDE de Arduino, tras realizar el cálculo de la temperatura, se comprueba que es correcta. Para hacer la conversión, miramos el datasheet del sensor, y observamos que la salida es lineal con la temperatura, incrementando el valor a razón de 10 mV por cada grado centígrado. El rango de medición es de -55 ºC (-550 mV) a 150 ºC (1500 mV). Su precisión a temperatura ambiente es de 0,5 ºC. La lectura se realiza mediante la entrada analógica del microcontrolador, que da un valor entre 0 y 1023, correspondiendo 0 a 0 V y 1023 a 5 V. Por lo tanto, el valor leído, se debe traducir mediante la fórmula:  (º) =   ∗ "###  $#%&∗$# /º =   ∗ "## $#%& Se vuelca el script en el programa principal y se comprueba que la salida asociada al ventilador funciona de forma correcta, comprobando que si la temperatura aumenta de un determinado valor, se enciende el ventilador, y si baja de un determinado valor, se detiene el ventilador. Para la realización de la prueba, se ha configurado una consigna de 25 ºC, y preparado un vaso con agua caliente y otro con agua fría. Tras acercar la sonda al vaso de agua fría, indica una temperatura de 17 ºC y se observa que el ventilador se detiene. Si se acerca el sensor al agua caliente indica una temperatura de 31 ºC y se observa que el ventilador comienza a funcionar, dando por exitosa la prueba. 6.9 Prueba 9: Nivel de agua Se conecta la boya de nivel de agua y se acciona manualmente, comprobando que el microcontrolador recibe la señal de forma correcta. Se puede observar cómo se activa el actuador asociado a la bomba al tener un nivel bajo y lo desactiva al llegar al nivel adecuado. Tras comprobar el funcionamiento varias veces, se da por exitosa la prueba de nivel de agua. 6.10 Prueba 10: Comunicación módulo ESP Para realizar las pruebas de comunicación con el módulo wifi, se carga y ejecuta los scripts relacionados con la comunicación de ambos microcontroladores, probando el envío y recepción de datos de forma recíproca. Para poder monitorizar desde la terminal el envío y recepción, se ha creado un doble bus de comunicación serial mediante software, permitiendo visualizar los datos recibidos y enviados por el Arduino desde la terminal del IDE. Como resultado, se puede observar como los datos enviados por el Arduino son recibidos por el ESP y éste a su vez devuelve los nuevos valores, dando por la prueba por finalizada. 82 6.11 Prueba 11: Envío y recepción de datos vía wifi El módulo ESP es el encargado de enviar y recibir los datos de nuestra base de datos en ThingSpeak, para ello, se ejecutan los script de conexión y configuración de la red wifi. Una vez que el módulo se conecta de forma exitosa, ejecuta los script de comunicación con la base de datos, enviando los parámetros del acuario, recibidos del Arduino, y leyendo el estado actualizado de la base de datos para enviarlo al Arduino. Para no sobrecargar la red y basándose en las limitaciones de la base de datos, se ha programado un retardo de 15 segundos entre cada comunicación con la base de datos. Se puede observar cómo al variar algún parámetro del acuario, se actualiza la base de datos. Así mismo, cuando se modifica algún parámetro de la base de datos, el Arduino ejecuta la orden de forma correcta, permitiendo interactuar con el sistema de forma no presencial. 6.12 Prueba 12: Comunicación entre Arduino y el Smartphone Una vez probado el envío y recepción de datos entre el Arduino y la base de datos, solo queda comprobar que la aplicación creada para el Smartphone actúa de forma correcta sobre el Arduino, ordenando la actuación sobre el acuario. Tras instalar la aplicación en un Smartphone con sistema operativo Android, se comprueba que se visualiza de forma correcta, y se procede a accionar los botones mostrados comprobando que se actualizan los valores en la base de datos de ThingSpeak. Si se pulsa sobre el botón cambio de agua, se puede observar cómo se modifica el valor del campo “CambioAgua” del canal “EscrituraAplic”. Si se comprueba el funcionamiento de los demás botones se puede observar cómo el accionamiento de estos botones afecta al estado de los diferentes actuadores del Arduino, dando por exitosa la prueba. 83 7 C OSTE FINAL 7.1 Coste Uno de las principales motivaciones que han llevado al desarrollo del proyecto ha sido el conseguir un sistema de bajo coste. En este apartado se analizará el coste total de los materiales necesarios para acometer el proyecto. En el mercado asiático, podemos encontrar tiendas como AliExpress que nos ofrecen todos los componentes necesarios a un coste muy bajo, algunos de ellos con gastos de envío incluidos. A continuación se muestra la Tabla 14 con el precio de los componentes que se han utilizado. Componentes Precio (€) ArduinoNano V3.0 ATmega328P CH340G 5 V 1.69 € Sensor de temperatura DS18B20 1.30 € Sensor de nivel de agua 1.21 € Módulo de relé de 4 vías para relés de 5 VDC 3.60 € Motor paso a paso ULN2003 28BYJ-48 5 V 1.52 € Módulo LCD 1602 pantalla verde 1.65 € PCF8574 módulo de interfaz LCD I2C 0.33 € Pulsador B3F tecla Omron 3 x 0.25 = 0.75 € Potenciómetro B20K eje de 15 mm 0.2 € ESP8266, modelo WIFI USB 1.05 € RTC DS1307 Módulo de reloj en tiempo Real 0.57 € Fuente de alimentación de 5 V 2 A 2.35 € TOTAL 16.22 € Tabla 14 Coste del proyecto El precio total de este proyecto sería de 16.22 €. Se puede observar como el coste es muy inferior al precio de los controladores comerciales. 84 85 8 C ONCLUSIONES Y MEJORAS 8.1 Conclusiones El desarrollo completo del proyecto ha supuesto un gran avance a nivel personal, debido a los conocimientos adquiridos hasta completar su desarrollo, consiguiendo alcanzar los objetivos propuestos y mantener un acuario en unas condiciones óptimas durante varias semanas. Durante el desarrollo del mismo, se ha aprendido que una parte muy importante son los requisitos que se quieren alcanzar, ya que durante el desarrollo, aparecen cientos de ideas de mejora que se pueden incluir, volviendo al proyecto interminable. Otra parte bastante importante es el desarrollo hardware, ya que a pesar de que se ha elegido desarrollar el proyecto con los mejores recursos, con el paso del tiempo y el conocimiento de la materia, se encuentran otras muchísimas alternativas menos conocidas pero perfectamente viables. En cuanto al desarrollo Software, se puede llegar a la conclusión que ha sido el mejor acierto elegir una plataforma de código abierto, ya que la comunidad que tiene a sus espaldas tiene infinidad de códigos para todo tipo de aplicaciones. A nivel personal, ha sido una experiencia muy satisfactoria porque a base de trabajo y dedicación, se ha podido llegar al desarrollo de un sistema más económico y muy similar a los existentes en el mercado y al conocimiento de las numerosas posibilidades de uso de la plataforma Arduino. 8.2 Mejoras Durante el desarrollo del proyecto, se ha podido observar que el sistema podría incluir para los usuarios más avanzados otro tipo de sensores o actuadores, fácilmente implementables. 1. Una posible mejora podría ser añadir un medidor de pH, para tener monitorizado su valor y que el sistema pueda regularlo si se descontrola. 2. CO2. Para realizar la fotosíntesis, las plantas necesitan dióxido de carbono y liberan oxígeno, se podría incluir un actuador que controle la adición de CO2 gas en el acuario. 3. Para el control de la iluminación, se podría añadir un módulo dimmer para que el encendido y apagado de la luz se haga de forma progresiva, se puede añadir una luz de efecto luna pudiendo llegar a crear los amaneceres y atardeceres. 4. Otra posible mejora a nivel de seguridad y aprovechando la comunicación wifi, el recibir un mensaje o email en el Smartphone si algún parámetro se ha descontrolado, por ejemplo si el ventilador deja de funcionar y el acuario empieza a subir excesivamente de temperatura. 86 87 1 R EFERENCIAS [1] Comunicación OneWire (17/02/2020) https://openwebinars.net/blog/tutorial-arduino-uso-de-sistema-onewire/ [2] Tecnología LED (22/03/2020) https://www.ledviled.es/blog/que-es-y-de-donde-viene-la-tecnologia-led/ [3] Sensor de temperatura DS18B20 (12/04/2020) https://cetroniconline.blogspot.com/2014/07/tutorial-arduino-iv-sensor-de.html [4] Arduino (27/01/2020) https://www.arduino.cc/en/Main/Products [5] Ferduino (01/02/2020) https://www.ferduino.com/ [6] RTC DS1307 (22/03/2020) https://www.geekfactory.mx/tutoriales/tutoriales-arduino/ds1307-en-tinyrtc-con-arduino/ [7] Control Wifi usando ESP8266 (15/06/2020) https://www.electronicshub.org/wifi-controlled-led-using-esp8266-and-arduino/ [8] Motor paso a paso 28BYJ-48 (13/04/2020) https://www.prometec.net/motor-28byj-48/ [9] ESP01, ThingSpeak y AppInventor (12/04/2020) https://www.hackster.io/mjrobot/iot-made-easy-w-uno-esp-01-thingspeak-mit-app-inventor- da6a50 [10] Configurar ESP01 (17/02/2020) https://programarfacil.com/podcast/como-configurar-esp01-wifi-esp8266/ [11] ESP y Arduino (09/03/2020) https://aprendiendoarduino.wordpress.com/2017/09/12/esp8266-y-arduino/ [12] ULN2003 (04/04/2020) https://www.inventable.eu/2018/02/09/uln2003-driver-salida-microcontroladores/ [13] Domótica con Arduino (12/04/2020) https://domotizando.files.wordpress.com/2016/11/domc3b3tica-con-arduino-wifi-y-android.pdf [14] Servidor WEB (01/02/2020) https://github.com/jaimelaborda/Planta-Twittera/wiki/3.-Servidor-Web-control-de-un-LED [15] Envío y recepción Puerto Serie (09/03/2020) https://www.luisllamas.es/cadenas-de-texto-puerto-serie-arduino/ 88 [16] Leer datos de ThingSpeak(18/06/2020) https://electronics-project-hub.com/how-to-read-data-from-thingspeak-arduino-esp8266- nodemcu/ [17] ThingSpeak (13/06/2020) https://thingspeak.com/channels [18] Temperatura y humedad ThingSpeak (19/05/2020) https://roboindia.com/tutorials/nodemcu-dht11-thingspeak-data-upload/ [19] IoT Arduino (10/04/2020) https://aprendiendoarduino.wordpress.com/tag/thingspeak/ [20] Usar ESP8266 con IDE Arduino (21/06/2020) https://naylampmechatronics.com/blog/56_usando-esp8266-con-el-ide-de-arduino.html [21] Eagle (27/03/2020) https://www.autodesk.com/products/eagle/overview [22] Wikipedia (13/04/2020) https://es.wikipedia.org/wiki/ [23] Display LCD (13/05/2020) https://www.arduino.cc/en/Tutorial/HelloWorld [24] Puerto Serie (17/02/2020) https://www.arduino.cc/reference/en/language/functions/communication/serial/ [25] IDE Arduino (10/04/2020) https://www.arduino.cc/en/main/software [26] Comunicación I2C (19/05/2020) https://www.luisllamas.es/arduino-i2c/ [27] Relé (20/05/2020) https://es.wikipedia.org/wiki/Rel%C3%A9 [28] FLUX (10/05/2020) https://www.movilone.es/blog/flux-para-soldar/ [29] Sensor nivel agua (03/04/2020) https://cdmxelectronica.com/producto/sensor-de-nivel-flotador-vertical-arduino/ [30] Filtro cascada Eheim (25/03/2020) https://www.mascotaplanet.com/comprar-filtro-de-mochila-eheim-liberty-75-litros.html [31] Bombilla LED G24 (12/04/2020) https://www.efectoled.com/ [32] Configuración Darlington de transistores bipolares (14/07/2020) http://www.cifpn1.com/electronica/?p=4280 89 [33] Control LCD por I2C (09/03/2020) https://www.geekfactory.mx/tutoriales/tutoriales-arduino/lcd-16x2-por-i2c-con-arduino/ [34] Creación PCB mediante fotolitografía (25/03/2020) http://www.dinel.us.es/ASIGN/CE_2T/pracs/2010-2011/p2/practica8.pdf [35] Software Ultimaker Cura (11/03/2020) https://ultimaker.com/es/software