SISTEMA AUTÓNOMO DE RIEGO AUTONOMOUS IRRIGATION SYSTEM Miguel Jesús Peñalver Carvajal DOBLE GRADO EN INGENIERÍA INFORMÁTICA - MATEMÁTICAS FACULTAD DE INFORMÁTICA UNIVERSIDAD COMPLUTENSE DE MADRID Trabajo de Fin de Grado del Grado en Ingeniería Informática Curso 2022/2023 Dirigido por Juan Carlos Fabero Jiménez Doctor en Física Resumen El problema de la desertificación en España está a la orden del día y la situación empeora progresivamente. Por ello nos hacemos la siguiente pregunta: ¿cómo podemos aprovechar mejor los recursos hídricos en un país donde una gran parte de la superficie se dedica a la agricultura? Para dar respuesta a esta pregunta presentamos un sistema de riego automático, destinado para su utilización tanto en hogares como en agricultura, y que permite el cálculo automático de los tiempos de riego gracias a la observación de parámetros ambientales como la temperatura, la humedad y precipitaciones, así como la época del año y configurando manualmente el tipo de árbol regado. Complementamos este proyecto con un sistema de control para una depuradora de piscina empleando el mismo código, demostrando la modularidad y flexibilidad de uso. Con este sistema se ha reducido el consumo de agua en los meses de verano entre un 30 % y un 50 %, además de un aumento en la frecuencia de riego y una consecuente mejora en los cultivos. El software empleado para este cometido es de código abierto, Home Assistant y ESPHome, líderes en el sector de la automatización del hogar y proporcionan una interfaz amigable e intuitiva. La implicación en el futuro del proyecto puede ser muy amplia, pues proporciona un sistema automático y aplicable tanto a nivel profesional como para pequeños hogares y jardines. Palabras clave Automatización; Riego; Sostenibilidad; Ecología; Interfaz; Embedded System Processor ; ESPHome; Home Assistant. Abstract Desertification has become a pressing issue in Spain, with the situation deteriora- ting progressively. As a result, we’re left wondering: how can we better manage our water resources in a country where a significant portion of the land is dedicated to agriculture? To address this challenge, we’ve developed an innovative automatic irrigation system that can be used both in households and on farms. The system calculates the watering times automatically by taking into account environmental factors such as temperature, humidity, precipitation, and the type of tree being irrigated. We’ve also developed a control system for pool purification using the same code, which highlights the flexibility and modularity of our solution. The system has led to a 30 % to 50 % reduction in water consumption during summer, while also improving crop yields due to the increased frequency of watering. Our software, Home Assistant and ESPHome, are open-source and leaders in home automation, providing a user-friendly interface that is intuitive to navigate. Looking forward, we be- lieve that our automated system will be widely applicable across different settings, from professional agriculture to small-scale gardens and homes. Keywords Automation; Irrigation; Sustainability; Ecology; Interface; Embedded System Processor ; ESPHome; Home Assistant. Índice general Índice i Agradecimientos iii 1. Introducción 1 1.1. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Introduction 5 1.1. Goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2. Arquitectura del sistema 9 2.1. Sistema central . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.2. Nodo de las electroválvulas . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.3. Nodo de la piscina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3. Descripción a nivel de hardware 12 3.1. Dispositivos de conexión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.2. Home Assistant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.3. Nodo de las electroválvulas . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.4. Nodo de la piscina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 4. Herramientas empleadas en la instalación 18 5. Descripción del proyecto a nivel de software 20 5.1. Sistema principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 5.2. Nodos de control: ESPHome . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 5.3. Gestión de los eventos de tiempo . . . . . . . . . . . . . . . . . . . . . . . . 25 5.4. Llenado de la piscina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 6. Proyectos previos 27 i 6.1. DIY Irrigation Controller de Brian Hanifin . . . . . . . . . . . . . . . . . . 27 6.2. Sprinkler Controller de ESPHome . . . . . . . . . . . . . . . . . . . . . . . 29 6.3. Controladores de la marca Rain Bird . . . . . . . . . . . . . . . . . . . . . . 31 7. Montaje del sistema 33 7.1. Home Assistant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 7.2. Nodo de las electroválvulas . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 7.3. Nodo de la piscina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 7.3.1. Boyas magnéticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 7.3.2. Pluviómetro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 7.4. Termómetro exterior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 8. Interfaz y funcionamiento 41 8.1. Interfaz para el riego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 8.2. Interfaz para la piscina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 9. Conclusiones 48 9. Conclusions 50 Referencias 54 A. Esquema de la instalación 55 ii Agradecimientos A mi tutor, Juan Carlos, por animarme a realizar este trabajo y saber valorar el esfuerzo detrás de este proyecto, así como por haber afianzado mi interés por el cacharreo y las redes tanto dentro como fuera de las aulas. A mi familia, por haberme permitido económicamente llevar a cabo el proyecto y por apoyarme y ayudarme a lo largo de todos estos años. A la Universidad, por fomentarme la curiosidad y por su valiosa contribución en mi formación académica. iii Capítulo 1 Introducción En este proyecto se va a abordar uno de los grandes problemas del mundo de la agricultura actualmente, concretamente en los campos de regadío, donde en muchos casos la gestión de estos se realiza manualmente y sin ningún tipo de planificación. Según un reciente informe del Ministerio de Agricultura [1], publicado en mayo de 2021, se estima que la superficie de riego en España en 2020 se sitúa en 2.943.088 hectáreas, de las cuales el 23 % aún se riega de manera “ineficiente”, término empleado en el documento para referirse a aquel riego que se realiza por gravedad o inundación. En el 77 % que se riega de forma eficiente, se emplean sistemas como el riego localizado o por aspersión; sin embargo, el informe no desgrana si dichos sistemas se encuentran informatizados o disponen de algún tipo de control, o se trata de un riego puramente manual. Así pues, existe aún un claro atraso en la gestión del agua en España, un país donde llaman la atención lugares tales como la Región de Murcia donde más del 15 % de la super- ficie se encuentra destinada a cultivo de regadío. Sin embargo, dicha zona está catalogada como desertificada o en proceso de desertificación, aunque en el informe anterior no hace referencia a qué proporción de ese 15 % se riega de manera eficiente. Nuestra propuesta para solventar el gran problema de gestión de agua es emplear riego localizado o por aspersión junto al uso de electroválvulas. El sistema de riego localizado es ampliamente utilizado en la actualidad, pues garantiza un aprovechamiento mucho más eficiente del agua, al verter esta misma en los alrededores de los troncos de los árboles. Se diferencia así del riego por aspersión, donde se simula lluvia fina sobre el cultivo. Este 1 proyecto es aplicable a ambos casos sin cambiar la instalación actual de riego. Aunque aún hay superficies en España que no hacen uso de estos sistemas eficientes, los gobiernos regionales suelen convocar ayudas que permiten su rápida adopción, ya que es de interés común el máximo aprovechamiento de los recursos hidrológicos del país. Por ello, la implementación de este proyecto es posible en la mayoría de los casos. Como vemos en los primeros párrafos, la situación actual es mejorable en cuanto a aprovechamiento se refiere, por ello nuestro proyecto va dirigido a aquellos campos o lugares donde se tenga una instalación de regadío. En concreto, solo es necesario el cambio de las válvulas que dan paso al agua, cambiándolas por alguno de los modelos que permiten el control electrónico de las mismas. Figura 1.1: Vista superior de una Raspberry Pi 3 B+. Este proyecto nos va a permitir un control automático del riego de los árboles o de cultivos estacionales, con algunas ventajas adicionales que veremos más adelante. Consiste en un sistema que monitoriza la temperatura y la humedad del aire, así como la cantidad de precipitaciones diarias, y con esos datos realiza un cálculo matemático sencillo para obtener el tiempo de riego de cada sector o zona, controlado mediante distintas electroválvulas. El proyecto consta de un sistema principal, el cual actúa como servidor y nos per- mite controlar el resto de dispositivos ofreciendo una interfaz web. El ordenador empleado para este propósito es un Intel NUC 1.2, con un procesador Intel Core i5, el cual ejecuta una instancia de Home Assistant. Sin embargo, para este propósito puede emplearse una Raspberry Pi 3 B+ como la que se muestra en la imagen 1.1, la cual dispone de recursos suficientes para efectuar los cálculos y gestionar los programas necesarios. En el servidor, de forma remota, se pueden programar y actualizar una serie de mi- crocontroladores, los cuales describiremos a fondo más adelante, los cuales se encuentran 2 conectados a la red local y permiten actualizaciones OTA (Over-the-Air). Uno de los mi- crocontroladores será el encargado de la gestión del riego y el control de las electroválvulas. Figura 1.2: Vista frontal del Intel NUC usado en el proyecto. Para mostrar la flexibilidad del código y las posibilidades del proyecto, también lo emplearemos para programar otro nodo, el cual se encarga de la gestión de una depuradora de piscina y del llenado de la misma gracias a la comunicación entre los microcontroladores. 1.1. Objetivos El objetivo principal de este proyecto es conseguir un mejor aprovechamiento de los recursos hídricos disponibles, así como evitar errores humanos cometidos habitualmente en la gestión de los mismos. Con este sistema automatizado pretendemos, junto a una técnica de riego eficiente como es el riego por goteo, aprovechar al máximo el agua empleada y minimizar el gasto innecesario. Para alcanzar dicho objetivo, presentamos a continuación los criterios que debe cum- plir un sistema para considerar que realiza un buen aprovechamiento hídrico: Reducir los errores humanos más comunes en la gestión del riego. De todos ellos el de mayor relevancia práctica es el olvido, tanto si se deja demasiado tiempo como si se omite cuando es necesario. Modificar los tiempos de irrigación según la época del año. Esto es importante pues las necesidades hídricas son distintas en primavera y en otoño, aunque el rango térmico sea similar. Tener en cuenta a la hora de calcular los tiempos de riego el tipo de árbol o de cultivo para ajustar la cantidad de agua convenientemente. 3 Realizar ligeras variaciones en la cantidad de agua según la temperatura ambiente y la humedad relativa, de forma que se minimicen los efectos de olas de calor y haya un ahorro de agua en las olas de frío. Modificar los tiempos de riego según las precipitaciones acumuladas de los últimos días. Esto es de especial utilidad en plantaciones susceptibles de contraer enfermedades por encharcamiento. 4 Chapter 1 Introduction In this project, we will address one of the major problems in agriculture, specifically in irrigated fields. In many cases, the management is carried out manually and without any planning. According to a recent report from the Spanish Ministry of Agriculture [1], published in May 2021, the estimated irrigated area in Spain in 2020 was 2,943,088 hectares. Out of this total, 23 % is still irrigated in an “inefficient” way, referring to gravity or flood irrigation as mentioned in the document. The remaining 77 % is irrigated efficiently using systems such as localized or sprinkler irrigation. However, the report does not specify whether these systems are computerized or have any kind of control, or if the irrigation is purely manual. Therefore, there is still a clear deficiency in water management in Spain, particularly in regions like the Region of Murcia where over 15 % of the land is dedicated to irrigation crops. However, the report does not mention the proportion of that percentage that is irrigated efficiently. Our proposal to address this significant water management problem is to use localized or sprinkler irrigation along with the implementation of solenoid valves, as we will discuss later. The localized irrigation system is widely used today because it ensures much more efficient water utilization by delivering water directly to the area around the tree trunks. In contrast, sprinkler irrigation simulates fine rain over the crops. Our project is applicable to both systems without requiring changes to the existing irrigation setup. While some areas in Spain still do not utilize these efficient systems, regional govern- 5 ments typically provide grants to facilitate their rapid adoption, as maximizing the use of the country’s water resources is a common interest. Therefore, the implementation of this project is feasible in most cases. As evident from the previous paragraphs, the current situation can be improved in terms of water utilization. Therefore, our project is focused on fields or locations where an irrigation system is already in place. Specifically, only the valves that control the water flow need to be replaced with models that allow electronic control of the valves. Figura 1.1: Top view of a Raspberry Pi 3 B+. This project will allow us to achieve automatic control of irrigation for trees or seasonal crops, along with some additional advantages that we will discuss later. It consists of a system that monitors air temperature, humidity, and daily precipitation, and based on this data, performs a simple mathematical calculation to determine the irrigation time for each sector or zone. The irrigation is controlled through various solenoid valves. The project comprises a main system that acts as a server, providing a web interface to control the other devices. For this purpose, an Intel NUC 1.2 with an Intel Core i5 processor is used to run an instance of Home Assistant. However, a Raspberry Pi 3 B+ like the one shown in Figure 1.1 can be used for this purpose as well, as it has sufficient resources to perform the calculations and manage the necessary programs. On the server, a series of microcontrollers can be programmed and updated remotely, which will be described in detail later. These microcontrollers are connected to the local network and support Over-the-Air (OTA) updates. One of the microcontrollers will be responsible for irrigation management and controlling the solenoid valves. 6 Figura 1.2: Front view of the Intel NUC used in the project. To demonstrate the code’s flexibility and the project’s possibilities, we will also utilize it to program another node responsible for managing a pool filtration system and controlling its filling, facilitated by communication between the microcontrollers. 1.1. Goals The primary goal of this project is to achieve a better utilization of available water resources and mitigate common human errors frequently encountered in water management. Through this automated system, our aim is to maximize water usage and minimize unne- cessary expenses by implementing an efficient irrigation technique such as drip irrigation. To accomplish this goal, we outline below the criteria that a system must fulfill to be considered effective in water utilization: Reduce common human errors in irrigation management, with particular emphasis on addressing the practical issue of forgetting to irrigate, whether by allowing excessive intervals between irrigation sessions or omitting them when necessary. Adjust irrigation timing according to the season, as water requirements vary between spring and autumn, despite similar temperature ranges. Consider the specific tree or crop type when calculating irrigation timing to ensure appropriate water quantity adjustments. Incorporate slight variations in water amounts based on ambient temperature and relative humidity, thus minimizing the impact of heatwaves and conserving water during cold spells. 7 Modify irrigation timing based on accumulated precipitation in recent days, especially valuable for plantations susceptible to waterlogging-related diseases. 8 Capítulo 2 Arquitectura del sistema Antes de describir los elementos de hardware en profundidad, presentamos una visión general de los distintos componentes del proyecto. Podemos encontrar un esquema con dichos elementos en el anexo A. Disponemos de un servidor principal, en este caso un ordenador Intel NUC, el cual gestiona y monitoriza numerosos microcontroladores a través de la red local. Dicho orde- nador permite acceder a todas las funcionalidades a través de una interfaz web accesible desde el navegador tanto dentro como fuera de la red local, para una cómoda gestión del sistema. Los controladores empleados en este proyecto son microcontroladores ESP (acrónimo de “Embedded System Processor”), los cuales son una familia de microcontroladores de bajo costo y bajo consumo de energía mayormente empleados en proyectos de Internet de las cosas (IoT). Estos chips se basan en el procesador de la serie Xtensa LX6 de la compañía Tensilica, y es producido por la compañía china Espressif Systems. También disponen de conectividad inalámbrica, WiFi y Bluetooth, aunque hay algunas versiones (como las empleadas en el proyecto) que disponen de conectividad Ethernet. El sistema tratado en este trabajo se compone de numerosos nodos dirigidos por dispositivos ESP, los cuales se conectan a la red local. En este proyecto vamos a tratar dos de ellos. El primero del que vamos a hablar es el “nodo de las electroválvulas” dirigido por un ESP32, el cual internamente realiza cálculos para fijar unos tiempos de encendido y apagado del riego según distintos parámetros. El otro dispositivo que vamos a presentar es el “nodo 9 de la piscina”, dirigido también por un ESP32, el cual es el encargado de comunicar al nodo anterior que le hace falta agua a la piscina, además de gestionar el tiempo que se encuentra el motor de la depuradora encendido. En el capítulo 5 explicaremos más en profundidad la comunicación entre los nodos. El Home Assistant es el encargado de la comunicación entre ellos y de proveerles los valores y parámetros necesarios para realizar sus cálculos. 2.1. Sistema central En primer lugar, como elemento central de gestión y comunicación, se ha empleado un ordenador Intel NUC de octava generación, el cual únicamente ejecuta el sistema operativo Home Assistant, desarrollado con la automatización y gestión del hogar conectado como principal tarea. Este sistema operativo, entre otras cosas, nos permite la automatización de ciertas tareas y, en este caso particular, nos servirá para programar los ESP32 de manera remota, sin necesidad de acceder físicamente a ellos, así como el acceso a través de una dirección web a la configuración y el control del hogar. La elección del mencionado modelo de ordenador ha sido para agilizar las tareas de compilación además de otras ajenas al proyecto, como el procesamiento de imágenes de una cámara de seguridad. Sin embargo, anteriormente a este ordenador se disponía de una Raspberry Pi 3 Modelo B+, la cual realizaba todas las funciones a pesar de sus limitados recursos. El acceso a este ordenador se realiza a través de la red local o el dominio corres- pondiente, pero no tiene ninguna pantalla ni periféricos conectados directamente. Desde la instalación del Intel NUC hace más de un año, no se ha reportado ningún fallo ni caída del sistema. Todo el software empleado es libre y se puede encontrar en sus correspondientes repositorios de GitHub [2]. 2.2. Nodo de las electroválvulas Para la gestión de las electroválvulas, se ha empleado un ESP32 con conexión Ether- net, concretamente el modelo de la marca Wireless-Tag. Para la programación del ESP se ha hecho uso de la herramienta ESPHome [3], creada para la programación de los disposi- tivos ESP8266 y ESP32 y la mayoría de sus variantes. Además, para la interacción con el dispositivo se ha habilitado una página dentro de la interfaz del Home Assistant, conocida como Dashboard, donde podemos cambiar todos los parámetros expuestos por el ESP32. 10 El objetivo principal de este nodo es la apertura y cierre de las electroválvulas que dan paso al agua de riego, con una correspondiente división por zonas según la electroválvula que nos permita identificar el cultivo y disponer de un registro histórico de los recursos hídricos empleados. También se encarga de gestionar los tiempos de irrigación según las condiciones ambientales y deberá tener en cuenta el tipo de cultivo a la hora de calcular los tiempos y la frecuencia de riego. Por último, también debe permitir el control remoto del sistema, por si en caso de fuga o por cualquier emergencia se tuviese que cortar el agua. La razón de ser del proyecto es la inexistencia de soluciones actuales que cubriesen las necesidades por completo. Uno de los puntos más difíciles de abarcar por las soluciones actualmente en el mercado es el cálculo automático de los tiempos según las condiciones ambientales y el control remoto del sistema. 2.3. Nodo de la piscina Para el control de la depuradora de la piscina se ha usado una placa ESP32 de la marca Olimex con conexión Ethernet POE. Para la programación de la placa se ha empleado la misma herramienta nombrada anteriormente, ESPHome [3], al igual que la interacción con el dispositivo, la cual se realiza a través de la interfaz del Home Assistant. El objetivo principal de este nodo es el encendido y apagado del motor de la depura- dora, teniendo en cuenta la hora del día, pues se trata de un motor alimentado únicamente con paneles solares. También se encarga de mantener la piscina en un nivel óptimo, para evitar la entrada de aire en el motor. Como funciones secundarias, destacamos el control de la iluminación de la piscina, el control del sistema mediante botones físicos situados en la depuradora y el registro de la cantidad de agua de lluvia mediante un pluviómetro de balancín, aprovechando la privilegiada situación de este dispositivo, sin ningún objeto de gran tamaño cerca que pueda afectar las medidas. Por último, se debía tener en cuenta que, debido a la naturaleza solar del motor y ser una zona susceptible a inundaciones, la caseta de la depuradora únicamente dispone de energía eléctrica durante los meses de verano, que es cuando se encienden los focos de la piscina, por ello se optó por la solución POE. Aunque podría parecer un caso de sobreingeniería, ninguna de las soluciones comer- cializadas actualmente en un rango de precio razonable permiten la configuración necesaria para cumplir todos los objetivos junto a una alimentación POE. 11 Capítulo 3 Descripción a nivel de hardware En este capítulo vamos a desarrollar los distintos elementos de hardware empleados en el proyecto. Podemos dividir los dispositivos en dos secciones claramente diferenciadas: por una parte, aquellos dispositivos que permiten la interconexión, como el encaminador, y los que se encargan de la realización de cálculos y la monitorización de sensores, como el microcontrolador que controla las electroválvulas. Identificaremos cada uno de ellos a lo largo del capítulo. 3.1. Dispositivos de conexión Toda la instalación se encuentra conectada por cable Ethernet categoría 5E. Para la interconexión del cableado se ha instalado un conmutador gigabit con alimentación POE y un encaminador de la marca TP-Link que dispone también de conexión inalámbrica, entre otros elementos a los que no haremos referencia por no pertenecer al proyecto. En un inicio se valoró la posibilidad de conectar los nodos ESP a través de conexión inalámbrica, haciendo uso de la banda WiFi de 2.4GHz. A pesar de tratarse de una vivienda aislada y libre de interferencias en esa banda, la distancia de ambos nodos al encaminador hacía de la conexión inalámbrica una conexión no fiable. Además, cuando se diseñó origi- nalmente el proyecto a nivel de software, las librerías que gestionan la conexión WiFi de los dispositivos no permitían una conexión estable, resultando en numerosas caídas a lo largo del día, aunque el dispositivo no permanecía desconectado más de un minuto en ningún caso. Por ello se optó por una conexión cableada para toda la instalación y se eligió una versión del ESP32 algo más costosa, pero que evitaría problemas. 12 Figura 3.1: Conmutador POE modelo TP-Link TL-SG108PE. El modelo de encaminador usado en este proyecto es un Archer C6 [4] de la marca TP-Link, aunque se podría haber utilizado cualquier modelo con la funcionalidad mDNS o que nos permita la asignación de direcciones IP estáticas (para conectarnos con los ESP) y redireccionamiento de puertos (para acceder a la instalación de Home Assistant desde fuera de la red local). Tanto para alimentar el nodo de la depuradora como para conectar el nodo de las electroválvulas se ha empleado un conmutador administrado, también de la marca TP- Link, el cual dispone de 8 puertos Gigabit, con alimentación POE en 4 de ellos (IEEE 802.3 af). El nombre completo de este dispositivo es el TP-Link TL-SG108PE [5] (figura 3.1). Se ha considerado importante aportar esta información pues, a pesar de haber muchos conmutadores en el mercado que cumplen con la norma IEEE 802.3af, no todos han llegado a funcionar correctamente con el ESP32 alimentado por POE. El comportamiento en el arranque del ESP era errático con conmutadores de otras marcas populares como YuanLey, número uno en ventas en Amazon en el momento de la compra del dispositivo. 3.2. Home Assistant Este dispositivo es el nodo principal de comunicación. Se trata de un ordenador com- pleto ejecutando un sistema operativo específicamente diseñado para ejecutar una instancia de Home Assistant. Dicho ordenador se encuentra en el interior de la vivienda, conectado directamente al encaminador con cable Ethernet. El ordenador elegido es un Intel NUC NUC8i5BEH [6] (figura 1.2), el cual dispone de un procesador Intel i5 de octava generación y modelo U, de bajo consumo, 8GB de memoria RAM y un SSD NVME de 256GB. Las especificaciones de dicho computador están muy por encima de las necesidades del proyecto, pudiendo usarse otros procesadores más modestos como un Intel Celeron o, incluso, una Raspberry Pi 4, como ya hablamos anteriormente. Algunos de los requisitos para la elección 13 Figura 3.3: Microcontrolador WT32-ETH01, una versión del ESP32. era una suficiente cantidad de RAM (más de 4GB) y un bajo consumo, pues se encuentra conectado 24 horas al día, 365 días al año. Figura 3.2: Logo del proyecto Zig- bee2MQTT. Para establecer conexión con el sensor de temperatura exterior de la casa, situado en la fachada de la misma, se ha necesitado adquirir un adaptador USB para conexiones ZigBee, pues el sensor elegido es el sensor de temperatura y humedad de la marca Aqara [7], con conexión inalámbrica mediante el protocolo anteriormente mencionado. El adap- tador elegido [8] para dicho cometido dispone de un chip CC2652RB de Texas Instruments Inc., uno de los más potentes de su clase, preparado para cubrir largas distancias ofreciendo una gran compatibilidad. La elección de este dispositivo no fue casual, sino que se consultó la pági- na de recomendación de adaptadores [9] para el software libre utilizado en el Home Assistant para este cometido, Zigbee2MQTT [10] 3.2. 3.3. Nodo de las electroválvulas Para construir este dispositivo se han empleado componentes de más bajo nivel. Como elemento principal se ha usado un microcontrolador ESP32 con conexión Ethernet. Se ha empleado el modelo WT32-ETH01 3.3 de la marca Wireless-Tag [11], el cual dispone de un chip LAN8720 integrado en la placa, que permite al dispositivo disponer de conexión por cable de hasta 100Mbps. Sin embargo, esta característica no le priva de contar con conectividad WiFi y Bluetooth, aunque en este proyecto no se ha hecho uso de ello. 14 Las electroválvulas elegidas para este proyecto fueron dos modelos de la marca Rain Bird [12]. Esta marca fue escogida por su fiabilidad y resistencia ante condiciones adversas, pues debido al modo de funcionamiento de este tipo de válvulas al cerrarse, otros modelos tienen problemas al lidiar con la velocidad del agua si la temperatura ambiente es muy alta, algo muy común en la Región de Murcia, donde se ha realizado la instalación. Además, hay que añadir la dificultad de tener que lidiar con las altas presiones del agua de riego, las cuales pueden llegar a ser de hasta 12 bares de presión en la temporada de invierno. Por todo ello, se ha optado por la serie PGA de Rain Bird. Figura 3.4: Placa genérica relés de 4 canales y con funcionamiento a 5V DC. Para el control de las electroválvulas se ha usa- do una placa de 4 relés 3.4, las cuáles únicamente cortan las corriente al solenoide de las mismas, por lo que no permite la circulación del agua cerrando el diafragma interno. Además, para el transformador de corriente de las electroválvulas se ha usado otra placa con un único relé, para así evitar que el transforma- dor esté conectado continuamente, pues los primeros días de funcionamiento se detectó un calentamiento del mismo sin haber nada conectado a él. Para la alimentación tanto del microcontrola- dor como las placas de relés se ha empleado un trans- formador de corriente genérico a 5V DC (aunque también funcionan con lógica de 3’3V DC), mientras que para las electroválvulas se ha empleado un transformador AC-AC con salida de 24V. 3.4. Nodo de la piscina Como en el caso anterior, se ha empleado un ESP32 con conexión Ethernet para realizar los cálculos y controlar los dispositivos. Sin embargo, se ha elegido en este caso el modelo open source ESP32-POE de la marca Olimex [13], pues se precisaba de alimentación POE en este caso. La elección de la alimentación POE no fue un capricho de diseño, esto se hizo debido a distintos factores expuestos a continuación: en primer lugar, la caseta de la depuradora se encuentra bajo tierra, por lo que la conexión wifi no era una opción viable. En segundo lugar, 15 Figura 3.5: Microcontrolador ESP32-POE, una versión del ESP32 de la marca Olimex. debido a que la depuradora está alimentada con paneles solares sin baterías, la alimentación que recibe es corriente continua, con voltajes muy variables y no dispone de energía durante la noche. Por ello se necesitaba un sistema fiable para poder disponer de un control total de lo que ocurre, sin caídas de conexión ni fallos de alimentación. Por último, aunque hay cableado eléctrico a 240V AC en la caseta en cuestión, este no se encuentra con energía la mayoría del tiempo, pues debido a la localización, es susceptible a inundaciones. Por todo ello, se decidió que la mejor elección era usar un sistema POE, situado en una caja estanca. Antes de realizar las conexiones en el motor de la depuradora, el cual es una bomba de piscina de la marca Lorentz, se realizó un estudio de su controlador electrónico, de manera que pudimos observar distintas conexiones para controlar el funcionamiento del propio motor y para saber cuando se encuentra en funcionamiento, pues al ser solar no es tan sencillo como activar el relé para garantizar el movimiento del motor. Para el control del motor de la depuradora y las luces de la piscina se ha empleado una placa sencilla con dos relés, la cual es alimentada por el propio ESP32, ya que no disponemos de transformador de corriente. Además, se han añadido una serie de botones físicos al propio cuadro eléctrico de la depuradora para disponer de un control manual in situ de la depuradora y las luces. Esto último se ha realizado para evitar tener que usar la interfaz web para su control pues se vio que en ciertas situaciones no era práctico, como al limpiar el filtro de la depuradora, para lo cual hay que encender y apagar el motor un gran número de veces. En dicho caso de uso los botones nos permiten un control más directo y visual de lo que ocurre. Se ha instalado también un control del nivel de la piscina para evitar la entrada de agua al motor y, aprovechando la instalación de las electroválvulas, realizar un llenado automático de la misma. Para ello se han instalado dos boyas a distinta altura como las de la figura 3.6, de manera que la piscina siempre se encuentre entre el nivel superior e inferior y nos permita saber si el nivel está muy bajo o muy alto, de forma que nunca se 16 llene demasiado y acabe provocando un desbordamiento. Figura 3.6: Boyas empleadas para el control de nivel de la piscina. Por último, para medir la cantidad de lluvia, se ha conectado por cable un pluvióme- tro de balancín [14] (figura 3.7) a este contro- lador. Este elemento es de la marca MISOL Electric y está diseñado para funcionar con su propia estación meteorológica, aunque por la sencilla electrónica de la que dispone fue posi- ble conectarlo al microcontrolador directamen- te, empleando una resistencia y eliminación de rebotes mediante software. Figura 3.7: Vista del interior y carcasa del pluviómetro de balancín, internamente dispone de un interruptor REED y un imán en el balancín. 17 Capítulo 4 Herramientas empleadas en la instalación Para la instalación del sistema operativo Home Assistant se han usado herramientas similares a las que se emplearía para cualquier sistema operativo. En este caso se usaron dos memorias USB conectadas al ordenador en el que iba a ser instalado el sistema, una de ellas contenía una versión de Ubuntu Live, mientras que la otra disponía de una imagen del sistema operativo Home Assistant, el cual iba a ser instalado en el disco interno del ordenador. Este método fue elegido por sencillez y familiaridad con el proceso, aunque no es el único método disponible [15]. Para la instalación del sistema operativo y el código en los ESP32 se debe, en una primera instancia, conectar mediante USB el microcontrolador al dispositivo que ejecuta ESPHome, en este caso el Home Assistant. Si el ESP32 no dispone de interfaz USB, como el ESP32-POE, se puede emplear un adaptador USB2TTL para instalar el binario por primera vez. Las actualizaciones se realizarán vía OTA, según el medio físico que empleemos para conectar el ESP32 a la red local, bien por WiFi, bien por conexión Ethernet. El módulo o adaptador USB2TTL (figura 4.1) es una placa encargada de transformar las señales D+ y D- del interfaz USB a las señales RX y TX RS232, las cuales son interpre- tables por los microcontroladores ESP32. Por lo general, aunque depende del adaptador, también nos proveerá de alimentación a 5 voltios y 3’3 voltios para alimentar la placa de desarrollo. Finalmente, para probar las primeras versiones de los controladores y comprobar el 18 Figura 4.1: Ejemplo de adaptador USB-TTL que nos permite conectarnos a los microcon- troladores. correcto funcionamiento de los mismos, se emplearon unos transformadores de pared de 5 voltios, junto a unos cables USB con uno de los extremos acabado en pines, para poder conectarlo a la placa del ESP32. Sin embargo, para este uso puede emplearse el dispositivo USB2TTL anteriormente mencionado. El proyecto en general es bastante autocontenido, pues las herramientas utilizadas en la versión funcional apenas difieren de las empleadas en la instalación y en la versión final. 19 Capítulo 5 Descripción del proyecto a nivel de software En este capítulo mostraremos una explicación del software empleado en el proyecto. Mencionar especialmente que todo el software empleado es libre y puede ser descargado desde las webs de sus correspondientes desarrolladores, encontrándose el código público en GitHub. Se debe realizar una distinción entre el software empleado en el sistema principal, el cual nos permite programar y actualizar los nodos, y el empleado en los microcontroladores como tal, el cual nos permite configurar sus parámetros y leer la información que ofrecen a través del Home Assistant. 5.1. Sistema principal El sistema principal está formado por el Intel NUC del cual ya hemos hablado y se encuentra ejecutando el sistema operativo Home Assistant. Home Assistant es un software de automatización del hogar de código abierto que se ejecuta en un servidor local y permite a los usuarios controlar y automatizar dispositivos en su hogar. Este sistema está basado en Python y utiliza un enfoque de integración para conectarse con diferentes dispositivos y plataformas. Este sistema es compatible con una amplia variedad de dispositivos, incluyendo ter- mostatos, luces, cámaras de seguridad, sensores y mucho más, lo que permite a los usua- 20 rios controlar y automatizar fácilmente su hogar. Además, ofrece una interfaz de usuario amigable y altamente personalizable, lo que nos permite acceder a sus dispositivos y au- tomatizaciones desde una aplicación móvil o una interfaz web, bien en local o a través de internet. El sistema de automatización se basa en “entidades”, que son objetos individuales dentro del sistema que representan dispositivos o servicios específicos. Cada entidad puede tener sus propias características y atributos, y pueden ser controladas y automatizadas de diferentes maneras. Por ejemplo, una luz puede ser una entidad con características como el color, el brillo y el estado (encendido o apagado), mientras que un termostato puede ser otra entidad con características como la temperatura y el modo. Además de integrarse con diferentes dispositivos, puede integrarse con diferentes pla- taformas, como Amazon Alexa o Google Assistant, para ofrecer un control de voz completo. También puede integrarse con servicios de seguridad y monitoreo para protección del hogar. El sistema operativo consiste en una versión de Ubuntu que destaca por su sencillez y cuyo acceso a la configuración, o mediante una terminal, es bastante limitado. Únicamente dispone de los controladores estrictamente necesarios para controlar el hardware del orde- nador y poder hacer uso de contenedores de Docker. Para instalar un programa este debe tener un contenedor de Docker e instalarse mediante un Dockerfile, siendo necesario que se encuentre en GitHub, no siendo posible instalar programas o añadir características directa- mente al sistema operativo, el cual carece de interfaz gráfica y acceso directo mediante la terminal. Las limitaciones tan particulares que tiene este sistema hacen que la instalación y puesta en marcha sea un procedimiento fácil y rápido: basta con copiar el sistema al disco duro y conectarlo al ordenador donde se desea ejecutar, el resto de configuraciones son automáticas y el acceso al mismo se realizará mediante un navegador en otro dispositivo y accediendo a su IP local a través del puerto 8123. Las actualizaciones del sistema que añaden características e incluyen cambios incom- patibles con la versión anterior son lanzadas mensualmente, al inicio de cada mes natural. Sin embargo, también son realizadas algunas actualizaciones a lo largo del mes, las cuales permiten solucionar pequeños bugs que puedan ser encontrados en el sistema. La configuración de nuestra instancia expuesta en este trabajo puede encontrarse en GitHub [16]. Ahí se pueden encontrar los archivos de configuración que permiten crear 21 ciertas entidades necesarias para el control del sistema. Además, también se incluye el código para la programación de los nodos de control, de los cuales hablaremos más adelante. 5.2. Nodos de control: ESPHome Tanto el nodo de las electroválvulas como el nodo de la piscina han sido programados gracias a ESPHome y su integración con Home Assistant, pues permite realizar tanto la programación como la compilación y la instalación desde la interfaz web. ESPHome es una plataforma de software de código abierto diseñada para la automa- tización del hogar. Se ejecuta en dispositivos basados en los chips ESP8266 y ESP32, que son microcontroladores de bajo costo y alta eficiencia energética diseñados para el Internet de las cosas (IoT). ESPHome se enfoca en proporcionar una experiencia de programación fácil y accesible, permitiendo crear configuraciones de dispositivos IoT sin tener que escribir código desde cero. Figura 5.1: Logo del sistema ESPHome. Su funcionamiento se basa en la creación de un archivo de configuración para cada microcontrolador en formato YAML (aunque pueden incluirse funciones en C y C++ des- critas en otros archivos), en el cual se especifican los componentes y las funciones que se desean implementar en el dispositivo IoT. La plataforma ESPHome toma este archivo de configuración y lo traduce en un código eficiente en C++, que se carga en el microcontro- lador ESP para ejecutarse. Una vez cargado el firmware, el dispositivo ESP se conecta a la red local y envía información sobre su estado y datos sensoriales a Home Assistant. Una de las características clave de ESPHome es su capacidad para integrarse nati- vamente con Home Assistant, pudiendo recibir comandos y controlar entidades del propio sistema. Esto nos permite controlar los microcontroladores IoT desde una única interfaz, permitiendo también la automatización basada en reglas y escenas con el Home Assistant. Para realizar la programación de los ESP32 se ha usado el add-on (son básicamente contenedores de Docker que se ejecutan dentro del sistema operativo del Home Assistant) 22 llamado Studio Code Server. Este add-on ejecuta una instancia de Visual Studio Code y nos permite modificar los archivos, así como compilar el código e instalarlo en los dispo- sitivos ESP conectados. Se ha empleado esta herramienta, por encima de otras, debido a su simplicidad y practicidad, ya que con ella es posible programar desde la misma interfaz web del Home Assistant, llamada Frontend. Excepcionalmente, también se ha utilizado el add-on oficial de ESPHome para pro- gramar, sin embargo, la experiencia de usuario no es tan buena, pues no dispone de un coloreado sintáctico tan rico ni permite ver el código a la vez que se realiza la compilación, entre otros motivos. Para probar la solidez del código se han usado las herramientas de logging propias de la terminal del Visual Studio Code, el cual permite mostrar el historial del dispositivo en tiempo real. En el enlace del que hablamos anteriormente donde se encontraba la configuración del Home Assistant, también puede encontrarse el código YAML y C++ para la configura- ción de los nodos de control ESPHome en su correspondiente carpeta [17]. A continuación describiremos la estructura general del proyecto: En dicha carpeta nos encontramos con varios archivos de configuración en formato YAML para cada uno de los microcontroladores que son gestionados por el sistema. En este proyecto trataremos dos de ellos, el llamado “irrigation” y “pool”. Ambos disponen de un archivo de configuración principal, donde se definen sus nombres para los sensores y el resto de archivos de configuración necesarios para su funcionamiento. También nos encontramos con varios archivos hpp en dicha carpeta, como irriga- tion.hpp, entre otros. Estos archivos contienen definiciones de funciones, en contra de algu- nos principios de buena práctica de C++. Esto se debe a que en ESPHome se diferencian los archivos hpp de los cpp en cómo se incluyen en la compilación final. Los archivos hpp son incluidos en el archivo main.cpp, resultado de la generación de código a partir del YAML. De esta forma podemos acceder a las funciones desde el código lambda en los archivos de configuración YAML. El archivo time_control.hpp [18] contiene las funciones necesarias para el tratamiento de los hitos temporales para ciertos eventos, como comenzar el riego, entre otros. Debido a las limitaciones de la implementación, se deben guardar dichos hitos en formato entero, de manera que se debe traducir dicha información y compararla con el instante actual para 23 saber cuándo lanzar un evento. Para dichos cálculos se hace uso de la librería de C llamada ctime. Además, se proveen las funciones necesarias para tratar listas de tiempos y devolver un instante temporal en un formato entendible por el usuario final para mostrar dicha información en la interfaz, gracias a la función strftime(). El archivo pool.hpp [19] contiene las funciones necesarias para la gestión de la depu- radora de la piscina. Por ello, se han incluido funciones para saber la hora del amanecer y el atardecer, ya que la depuradora únicamente se encuentra alimentada por energía solar, así como funciones que devuelven listas de enteros (listas en formato string para poder ser guardadas en la memoria del dispositivo ESP) que representan los eventos de encendido y apagado de la depuradora. Diferenciamos así los tres modos de funcionamiento: automático, el cual según la temperatura ambiente enciende la depuradora un cierto número de minutos cada dos horas y media; día completo, para depurar desde el alba hasta el ocaso; y el modo invierno, el cual solo enciende la depuradora media hora en las horas centrales del día para evitar el gripado del motor durante los meses de invierno, pues la piscina suele estar tapada con una lona y no precisa depuración. El archivo irrigation.hpp [20] define las funciones que permiten el cálculo de los hitos temporales para el control del agua de riego. Las funciones son bastante similares respecto al archivo anterior, salvo que aquí no permitimos un control puramente manual del dispositivo controlado, pues siempre que se encienda debe haber un tiempo máximo de funcionamiento elegido por el usuario. De ahí la función manual_set(), que permite crear el evento de apagado y ponerlo en la lista de eventos. Además también dispone de algunas funciones que permiten el llenado de la piscina y el cálculo de los siguientes días que se va a regar, pues no es un proceso que se vaya a repetir diariamente, sino que depende de la temperatura y humedad exterior, la lluvia de los últimos días, así como el tipo de árbol regado, diferenciándose entre frutales, árboles de hoja caduca y árboles de hoja perenne. Los tiempos totales de riego han sido obtenidos de un informe de la Consejería de Agua, Agricultura, Ganadería y Pesca de la Región de Murcia [21]. En la carpeta common [22] se encuentran las plantillas para la configuración de los sensores más habituales o comunes entre dispositivos y los archivos base de los microcontro- ladores, donde se configura la contraseña para las actualizaciones o el modelo de la placa. Algunas de los archivos más utilizados son la configuración de la conexión Ethernet, pues hay que definir los pines de conexión del mismo, el sensor con el tiempo actual y el archivo basic_control.yaml, que nos permite crear botones para reiniciar el microcontrolador y saber 24 su conexión desde la interfaz del Home Assistant. En el proyecto usamos también los ar- chivos para las entidades controladas por eventos de tiempo, (time_controlled_entity.yaml [23]), los cuales permiten el control de los relés de la depuradora y las electroválvulas ha- ciendo uso de la abstracción. Los archivos propios del nodo de las electroválvulas pueden encontrarse en su carpeta específica irrigation [24], dentro de la raíz esphome. Aquí encontramos las configuraciones para el control del riego, el adaptador de corriente, el llenado de la piscina y la gestión de cada una de las válvulas. De la misma manera encontramos la configuración del nodo de la piscina en su carpeta dedicada pool [25], donde podemos diferenciar las configuraciones de los distintos sensores en este microcontrolador: el pluviómetro, que permite al controlador de riego calcular con mayor eficacia los tiempos de riego, los sensores de nivel de la piscina y un sensor que permite saber si la bomba de la piscina está encendida, ya que, dado que es solar, encender su relé no implica el movimiento de la bomba si no recibe suficiente energía. Dispone de dos relés, para controlar la bomba ya mencionada y las luces de la piscina. También dispone de un archivo específico de configuración pool_filling.yaml [26], donde se definen las automatizaciones y la comunicación con el nodo de las electroválvulas para gestionar el llenado de la piscina. 5.3. Gestión de los eventos de tiempo Como introducíamos anteriormente, el sistema trabaja internamente con números enteros o timestamps, que se corresponden con los segundos pasados desde el 1 de enero de 1970. De esta forma, podemos sumar tiempos con más facilidad y guardar los valores internamente como texto plano. Así, cada minuto se comprueba si hay algún evento para encender o apagar un dispositivo controlado por tiempo. Debido a limitaciones de la implementación de ESPHome únicamente podemos guar- dar ciertos tipos de variables en memoria, entre ellos los strings, pero no los vectores o arrays. Por ello, cuando se deba guardar una lista de tiempos se guardará en una variable de tipo string como una representación textual de la lista de enteros, separando los distintos datos por comas y ordenados temporalmente. 25 5.4. Llenado de la piscina El llenado de la piscina se lleva a cabo mediante una comunicación constante entre el nodo de la piscina y el de las electroválvulas, asegurándonos de que no se desborde y que no se encienda el motor de la depuradora al mismo tiempo, pues el llenado se lleva a cabo por la misma tubería por la que impulsa el agua el motor de la depuradora. En primer lugar, cuando se detecta que el nivel de la piscina está bajo, se comunica al nodo de las electroválvulas que es necesario un llenado y este ajusta la hora del mismo, pues no se dispone de agua a todas las horas del día. Si el nivel disminuye de un mínimo permitido, el motor de la piscina no se encenderá de forma automática para evitar la entrada de aire. Cuando el llenado comienza, el nodo de las electroválvulas se lo comunica al de la piscina a través del Home Assistant. Únicamente cuando el primero recibe una respuesta de la piscina, el nodo de las electroválvulas empieza el llenado, fijando el cierre tres minutos después del instante actual. De esta forma, cada minuto el nodo de la piscina comunicará al de las electroválvulas si precisa más agua o no. En caso afirmativo se alargará el tiempo de finalización y, en caso de que ya esté lo suficientemente llena, la válvula se cerrará cuando se lance el evento de cierre, tres minutos después desde la última comunicación. Cuando acaba el llenado, se produce una última comunicación entre los dispositivos, de manera que el nodo de la piscina puede volver a activar la depuradora. Estas comunicaciones se llevan a cabo mediante el sistema nativo de eventos y ser- vicios ofrecido por ESPHome, por el cual se comunica con el Home Assistant y no directa- mente con otros dispositivos ESP. Este sistema es mucho más eficiente que el otro sistema de comunicación planteado para el proyecto, el cual se basaba en una comunicación directa entre nodos mediante HTTP usando la red local y la dirección IP del otro nodo. Sin embar- go, este sistema alternativo de mensajes, que no necesita al Home Assistant para funcionar, consume una alta cantidad de memoria RAM adicional en el microcontrolador por lo que usar el servidor central para dicho propósito, con el cual ya está conectado, es la forma más natural y eficiente de efectuar la comunicación. 26 Capítulo 6 Proyectos previos En este capítulo se tratarán dos proyectos que se han desarrollado con anterioridad o bien al mismo tiempo que el descrito en este trabajo, así como las soluciones ofrecidas por una marca líder en el sector. También veremos las ventajas e inconvenientes de cada uno de ellos y se realizará una comparación con el proyecto descrito en este trabajo. 6.1. DIY Irrigation Controller de Brian Hanifin Este proyecto partió inicialmente del proyecto de Brian Hanifin [27]. Las ideas toma- das de dicho proyecto han sido únicamente para el nodo de las electroválvulas, en cuanto a la organización de las entidades temporales a nivel de código, pues ESPHome no ofrece ninguna solución nativa para este caso de uso. La elección del hardware del proyecto es muy distinta, pues en el caso de Hanifin se decanta por una solución ya fabricada como es el dispositivo Sonoff 4CH PRO [28], mientras que en nuestro caso nos hemos decantado por una solución de más bajo nivel, eligiendo los componentes individualmente e incorporando conexión Ethernet. Sin embargo, su código presentaba una solución incompleta para nuestro caso de uso y presentaba ciertas carencias que fueron abordadas a nivel de programación: El código de Hanifin está pensado para ejecutar todos los días el mismo ciclo de riego una y otra vez, no pudiendo desconectarlo determinados días, ni ejecutarlo días dis- tintos con horas distintas cada día. Esto, en nuestro caso, era un impedimento grande, pues como ya se ha comentado anteriormente, no se recibe el agua de riego a la misma 27 hora, sino que depende del mes en curso. No estábamos interesados en regar varias veces al día, sino en algo completamente automatizado y variable según los meses, pe- ro estas pequeñas variaciones debían hacerse manualmente. Además, resultaba difícil aplicar automatizaciones complejas, como que al detectar cierta cantidad de lluvia se saltase un día de riego, pues la programación no lo permitía. Al introducirle una hora manualmente que fuese incorrecta sintácticamente o al dejar el campo vacío, el dispositivo ESP dejaba de funcionar y se reiniciaba. Este incon- veniente puede parecer algo fácil de evitar, pero el problema se complica cuando el usuario final no es programador y no entiende qué está ocurriendo en el dispositivo. Además, dejar el campo vacío puede ser útil en determinados casos, por ejemplo, si se busca que un día no haya ningún riego programado. Una buena forma de esquivar esta limitación era poner una hora inexistente pero correcta sintácticamente, como las 25:00, de forma que jamás se ejecutase la automatización y no reiniciase el dispositivo de forma continuada. Una vez más, esto era algo que buscaba solucionar en nuestro proyecto. Parte de los sensores y datos se incluían en el Home Assistant, cuando lo ideal es que todo se realice de manera local en el nodo. Por ejemplo, los cuadros de texto donde se guardaban las horas eran entidades del Home Assistant de las cuales leía el microcontrolador. Sin embargo, la explicación de este aspecto puede ser por la antigüedad del proyecto, pues se han añadido numerosos sensores a ESPHome en los últimos dos años que permitirían centrar más la programación en el dispositivo. La gestión del tiempo restante era imprecisa y no muy clara. Este se guardaba en forma de entero en una variable interna. Cada 10 segundos se ejecutaba un fragmento de código que restaba 10 unidades a dicha variable, lo cual terminaba acumulando un gran error al cabo de varios minutos. Esto daba lugar a comportamientos impredeci- bles a la hora de manejar los tiempos. Como se venía augurando por los anteriores inconvenientes, el nivel de automatización era demasiado sencillo y poco elaborado, por lo que no permitía intercomunicación entre nodos ni reutilización del código, pues se hizo para que funcionase y no pensando en la reutilización y la modularidad. Esto llevaba a que si, como en nuestro caso, dispones de tres zonas distintas de riego, se tuviesen que copiar grandes fragmentos de código para agregar una única funcionalidad. Básicamente, la única automatización 28 Figura 6.1: Captura de la interfaz para el riego de Brian Hanifin. presente era la de ejecutar cierta acción a una hora determinada. A pesar de los inconvenientes, decidí usar este proyecto como punto de partida para nuestro código, pues los controles y sensores propuestos para cada zona de riego me parecía que daban suficiente información sobre el estado del sistema, aunque la programación no satisficiera las necesidades que teníamos. La interfaz propuesta en el Home Assistant es muy visual, clara y amigable con el usuario (figura 6.1). Por ello se decidió incorporar algunos elementos en nuestro proyecto, como los separadores de sección o el aspecto de los botones para el control manual. 6.2. Sprinkler Controller de ESPHome Esta componente nativo de ESPHome [29] fue lanzado a finales de 2022, cuando el proyecto ya se encontraba montado y funcionando desde hacía meses. Sin embargo, vamos a comparar las funcionalidades de ambos, pues la propuesta nativa dispone de muchas funciones, aunque, como veremos, no está enfocada en el ahorro, sino en una automatización básica. 29 Figura 6.2: Interfaz gráfica propuesta por ESPHome para un controlador con 5 zonas dis- tintas. El funcionamiento de este componente nativo está basado en simular al de los contro- ladores más básicos de riego disponibles en el mercado, con algunas funcionalidades extra como el control remoto y multiplicadores de tiempo, pero sin una excesiva automatización. Algunas de las funcionalidades más interesantes es el control de distintas zonas y los rie- gos secuenciales de las mismas, para asegurar la presión en las tuberías. Además, también dispone de un tiempo máximo de funcionamiento y funciones para las repeticiones y mul- tiplicadores, sin embargo, presenta algunas limitaciones respecto a nuestro proyecto que lo hacen imposible de implementar en nuestro caso de uso: No presenta automatización para la puesta en marcha, únicamente para el cierre de la válvula, por lo que su funcionamiento es equivalente al funcionamiento manual de nuestro sistema. La única posibilidad de automatización es a través del propio Home Assistant o añadiendo código en la configuración del dispositivo ESPHome, sin embargo, no es una funcionalidad disponible en el componente. No hay un control automático ante lluvia o heladas, por lo que debería realizarse una intervención manual si buscamos este comportamiento. 30 La comunicación con otros dispositivos sería posible añadiendo más código, pero no es una funcionalidad ya implementada ni contemplada en el componente. En nuestro proyecto, el dispositivo de la piscina comunica al de las electroválvulas cuándo debe mandarle agua. Sin embargo, ambos proyectos han identificado problemas comunes en materia de control y seguridad en este tipo de instalaciones, encontrando necesidades particulares que deben ser satisfechas. Por ello, tanto el proyecto descrito en este trabajo como su análo- go, el componente nativo de ESPHome, están preparados para ser usados en multitud de instalaciones. Algunos de estos aspectos comunes son: Contar con una válvula central o superior, la cual controla el suministro a todas las demás y la cual puede disponer de un funcionamiento retardado para evitar que las tuberías entre válvulas tengan presión con el circuito cerrado. La ausencia de control directo sobre los relés de las válvulas, de manera que la única forma de encender el riego sea a través de los ciclos y automatismos. Esto permite que siempre esté limitado el tiempo de encendido de las válvulas y un correcto control de las mismas. Como se menciona en la documentación: Esta configuración ayudará a prevenir errores (humanos, automatizaciones o de otro tipo) y puede ayudar a evitar desastres. 6.3. Controladores de la marca Rain Bird Estos controladores de riego son los más avanzados de su clase y en los que nos hemos basado para la obtención de ideas de implementación. Sin embargo, son únicamente comparables con el proyecto en cuando a la calidad del software de los controladores, pues su precio es desorbitado en comparación con el ahorro de agua que puede suponer o la comodidad de uso. Los modelos más caros, los cuales parten de los 800€ únicamente el controlador, disponen de ajustes del tiempo de riego por estaciones, control de múltiples zonas, sensores meteorológicos, y un control automático de los tiempos de riego, así como una aplicación para controlar el sistema desde el teléfono. A pesar de contar con la mayoría de funciones de las que dispone el proyecto de este trabajo, hemos identificado un problema común en la industria de productos electrónicos, 31 Figura 6.3: A la izquierda, controlador de Rain Bird modelo ESP-TM2, con algunas funcio- nalidades básicas y destinado al ámbito doméstico, con 8 zonas diferenciadas. A la derecha su aplicación, al configurar una zona específica. la ausencia del código fuente para su modificación y uso, por si este no se adapta a nuestras necesidades. Además, tampoco ofrecen controladores con conexión Ethernet y no es posible añadirla, ya que las conexiones y los módulos son tecnología propietaria de la marca. El hecho de no disponer del código fuente ni poder crear nuestros propios programas limita la capacidad para añadir sensores o mejorar la lógica para el control de tiempos de riego. Esto último podría ser una gran desventaja ante olas de calor o episodios de mucho frío, en los cuales las necesidades hídricas de los cultivos varían y esto no puede ser configurado en la aplicación. Sin embargo, sí dispone de parada automática ante la presencia de lluvia o heladas. Por otro lado, la conexión local y a Internet únicamente es posible a través de un módulo WiFi, vendido a parte. La conexión a Ethernet no está contemplada en ningún rango de precio. Esto llama la atención, pues la mayoría de sistemas de estas características están destinados a instalaciones aisladas de riego, en grandes superficies. 32 Capítulo 7 Montaje del sistema En este capítulo explicaremos el proceso de montaje del proyecto, haciendo un reco- rrido por cada uno de los sistemas de los que dispone. En primer lugar se tratará el montaje del servidor, posteriormente trataremos el nodo de las electroválvulas, donde se mostrará la caja de conexiones y las electroválvulas, en tercer lugar el nodo de la piscina junto a todos los elementos que gestiona, y finalmente dedicaremos unas líneas al termómetro ex- terior colocado en la fachada de la casa y conectado inalámbricamente al servidor. Puede encontrarse un esquema general de la instalación en el Anexo A. 7.1. Home Assistant La colocación del Intel NUC se realiza como cualquier ordenador tras la instalación del sistema operativo. En este caso, el dispositivo ha sido colocado a pocos centímetros del rúter y conectado por cable al mismo. Dado que no es necesario el acceso físico a este ordenador ni la conexión de ningún periférico, el lugar de colocación no es algo determinante, únicamente debe contar con conexión inalámbrica o por cable a la red. Para asegurar el funcionamiento del mismo y evitar caídas y daños en el sistema ante problemas en el sistema eléctrico, tanto para el Intel NUC como para el rúter se ha instalado un sistema de alimentación ininterrumpida con potencia suficiente para proporcionar energía durante al menos 7 horas y proteger los dispositivos contra sobretensiones. Este sistema también alimenta el nodo de la piscina, pues ante un corte eléctrico la piscina puede seguir funcionando con energía solar y este nodo debe ser capaz de controlarlo, otro de los motivos por los que se eligió el funcionamiento POE. 33 7.2. Nodo de las electroválvulas Este ESP32 se encuentra en una caja estanca, situada un metro y medio de altura en una pared exterior, protegida de las inclemencias del tiempo. Los cables se han introducido en la caja con prensaestopas, para garantizar la estanqueidad tanto de las entradas como de las salidas. Figura 7.1: Caja de conexiones donde se encuentra el controlador de las electroválvulas. Como podemos observar en la figura 7.1, la salida del cableado de las electroválvulas a 24V AC se realiza por el lado inferior izquierdo mediante cinco cables, cuatro de ellos son la fase y están conectados a los relés y accionan las electroválvulas, mientras que el restante es el neutro y está conectado al otro terminal del transformador AC sin ningún relé. En la parte superior izquierda encontramos el cable que lleva energía a la luz del garaje y va conectado al relé doble para ser accionado remotamente. Entre los componentes internos diferenciamos en primer lugar el ESP32, el modelo WT32-ETH01 de la marca Wireless-Tag, el cual es el encargado de controlar el resto de elementos. Este microcontrolador se encuentra en una placa que permite realizar las cone- xiones con tornillos, así como fijar el mismo a la placa de metacrilato posterior. De esta manera, en caso de que se necesite cambiar el controlador por algún motivo, basta con extraerlo de su socket y conectar otro ESP32, sin precisar la reconexión de todos los cables manualmente, por lo que esto puede ser realizado por prácticamente cualquier persona. En la caja también encontramos el adaptador de corriente de las electroválvulas, 34 la caja negra situada en el margen derecho, que transforma los 240V AC del hogar a los 24V AC que precisan las electroválvulas. Este adaptador dispone de un relé que permite encenderlo únicamente cuando es necesario, pues en los primeros días de la instalación se vio que el mismo liberaba calor tras horas de haber desconectado las electroválvulas, por lo que para evitar este consumo fantasma se procedió a la instalación de un relé adicional. Este mismo relé también permite controlar la luz del garaje de la cual ya hemos hablado. Siguiendo con la transformación de energía, se puede diferenciar el transformador metálico situado en borde inferior, el cual proporciona 5V en corriente continua al controlador y los dos módulos de relés situados en la caja. Para el control de las electroválvulas independientemente disponemos de la placa de relés con cuatro conexiones situada bajo los cables en la zona izquierda de la caja. Esta placa se encuentra conectada al microcontrolador con cuatro cables, lo que permite un control individualizado de cada relé. Figura 7.2: Caja de distribución de agua con las electroválvulas conectadas. Como vemos la instalación es sencilla, modular y fácilmente escalable siempre y cuando dispongamos de conexiones suficientes en la placa ESP32, pues cada electroválvula va directamente conectada a un relé, el cual precisa de un pin en la placa para ser accionado. Como proyecto futuro se piensan incluir botones físicos y controles en la caja de conexiones 7.1, de manera que sea posible accionar manualmente las electroválvulas sin acceder a la interfaz web. 35 En la figura 7.2 se muestra una foto de la instalación final de las electroválvulas, donde se diferencian los tres ramales o zonas, que se han diferenciado en la interfaz como “Zona Norte”, “Zona Sur” y “Llenado de la piscina”, encontrándose en la imagen de arriba a abajo respectivamente. Figura 7.3: Válvula principal, que dispone tanto de control de manual como de control automático. Anteriormente en el lugar donde se encuentran las electroválvulas, se encontra- ban una serie de válvulas manuales metá- licas, las cuales se retiraron todas salvo la principal, la cual se puede observar en la fi- gura 7.3. Esta se dejó por seguridad para que en caso de fallo electrónico o de necesi- tar algún tipo de mantenimiento en las elec- troválvulas, como eliminación de atascos o cambio de los solenoides, se pudiese desco- nectar completamente el suministro. Como se aprecia en las imágenes an- teriores, las conexiones eléctricas se han realizado mediante empalmes sencillos rodeados con cinta aislante, para protegerlos en caso de inundaciones y la humedad del ambiente en los meses de lluvias torrenciales. En este caso se usó la cinta por ausencia de otro material más eficaz en el momento del montaje. Sin embargo, ante una modificación a día de hoy, se emplearían otro tipo de elementos diseñados para este fin, como el plástico termorretráctil. Como ya hemos explicado anteriormente, hay una electroválvula principal y tres se- cundarias, una para cada ramal de agua. Debido a la configuración del sistema, debemos asegurarnos de que cada vez que se enciende uno de los ramales, lo haga también la electro- válvula principal y el transformador de corriente, y si se cierran todas las electroválvulas, el controlador debe apagar todos los relés, incluido el transformador de corriente. Esto se ha conseguido mediante software y se puede encontrar en los archivos explicados en el capítulo 5. El funcionamiento de esta lógica es sencilla y puede ser alcanzada mediante software: cada vez que se abre o cierra uno de los ramales se realiza una comprobación del resto y, en función de su estado, se encienden o apagan los relés que controlan la válvula principal y el transformador de corriente. 36 7.3. Nodo de la piscina En este nodo nos encontramos el ESP32-POE de la marca Olimex, del cual hemos hablado anteriormente, en el interior de una caja estanca, donde la entrada y salida de cables se realiza con prensaestopas para garantizar la estanqueidad, como en el caso anterior. En este caso es doblemente importante, pues no estaríamos protegiendo el dispositivo de la lluvia y la humedad, sino de las frecuentes inundaciones en el lugar donde se encuentra. Figura 7.4: Caja de conexiones del nodo de la piscina. Como se aprecia por la ausencia de transformador en la figura 7.4, el ESP32 en este caso se alimenta por POE gracias a un switch que se encuentra en el interior de la vivienda, como hemos descrito en el capítulo 3. Por tanto, no precisamos de transformador de corriente ni línea de 220V en la caja estanca, haciendo la manipulación de los componentes mucho más segura. El dispositivo situado a la derecha es el ESP32-POE, el cual ejecuta el código y se conecta con el Home Assistant. El relé situado en la zona central de la caja nos permite el control del motor de la depuradora (inferior) y de las luces de la piscina (superior). El hecho de tener un controlador independiente para el motor, proporcionado por la marca Lorentz como podemos observar en la figura 7.5 en el centro, nos permite la colocación de cables de pequeño diámetro, pues no van conectados directamente a la alimentación del motor. 37 Figura 7.5: De izquierda a derecha, caja original de conexiones con los botones físicos de control, controlador del motor solar de la marca Lorentz, y caja de conexiones del ESP32- POE. El resto de conexiones de la caja se corresponden con un sensor para detectar el funcionamiento del motor, pues al ser solar no nos podemos asegurar que al encenderlo comience a moverse; dos boyas magnéticas que nos ayudan a detectar el nivel de la piscina para controlar el llenado y desactivar la depuración en caso de que sea necesario; y un pluviómetro de balancín que ayuda a modificar los tiempos de riego según la cantidad de lluvia medida. La colocación del pluviómetro en este nodo se debe a la localización y la ausencia de objetos alrededor que puedan falsear las mediciones. También se han añadido dos botones en otra caja de conexiones que permiten el control manual de la depuradora y el encendido de los focos, pues tras la instalación de este sistema se identificó dicha necesidad, por lo que se aprovecharon los interruptores de la instalación anterior. 7.3.1. Boyas magnéticas La instalación de las boyas, anteriormente presentadas en el capítulo 3 y mostradas en la figura 7.6, se hizo en una zona aledaña al vaso de la piscina, realizando un taladro en uno de los skimmer para permitir un flujo de agua entre el tubo de PVC enterrado que contiene las boyas y el vaso de la piscina. La elección de dicha posición en vez de en la propia piscina fue para evitar problemas de golpes y oleaje que estropearan las mediciones. Tampoco se podía realizar en el interior del skimmer, pues no permitiría la extracción de la cesta que filtra las impurezas más grandes que arrastra el viento a la piscina. 38 Figura 7.6: Proceso de instalación de las boyas en la piscina. 7.3.2. Pluviómetro Para la instalación de este dispositivo únicamente fue necesario encontrar un lugar llano donde colocarlo y asegurar la ausencia de objetos en los alrededores que pudiesen afectar a las medidas. Hay que tener en cuenta que no se debe alejar en más de 5 metros del controlador, pues la señal de 3.3V empleada para detectar cada movimiento del balancín se degrada con la distancia. En las pruebas realizadas durante la instalación se comprobó que con un cable telefónico de dos hilos sin aislamiento el límite se encuentra en 6 metros de cable, a partir de esa distancia se perdían cierta cantidad de pulsos y en algunos ca- sos el mismo cable actuaba como antena y se detectaba una excesiva cantidad de ruido, imposibilitando la captación de datos. 7.4. Termómetro exterior Debido a la conexión ZigBee del termómetro exterior, este debe encontrarse dentro del rango de alguno de los rúters de este protocolo. Por ello se decidió instalarlo en la fachada de la casa, concretamente en la fachada norte, para evitar la radiación solar directa. Para alargar la vida útil del termómetro, se instaló en una caja plástica atornillada a la fachada a 1’2 metros de altura, intentando adecuarnos lo máximo posible a la normativa de la AEMET. La caja dispone de aberturas en la zona inferior para asegurar que el interior de la misma estuviese a la misma temperatura que el exterior. 39 Figura 7.7: Termómetro inalámbrico de la marca Aqara. Este es uno de los puntos débiles del proyecto, pues la batería del dispositivo es limitada y debe ser cambiada cada pocos meses, sobre todo en épocas de frío. Por ello no se descarta una futura mejora instalando un sensor de temperatura, como el sensor BME680 de la marca Bosch [30] en alguno de los microcontroladores presentados en este trabajo. 40 Capítulo 8 Interfaz y funcionamiento El control de todos los elementos del riego se realiza desde la interfaz del Home Assistant, no siendo posible, en este momento, el control de los mismos desde la propia caja donde está presente el controlador, salvo el nodo de la depuradora donde sí es posible controlar manualmente los focos de la piscina y el motor de la depuradora. 8.1. Interfaz para el riego La interfaz presente en el Home Assistant nos permite controlar todos los parámetros posibles en los dispositivos y nos muestra la información relevante sobre la programación automática y sobre el estado del sistema en tiempo real, como vemos en la figura 8.1. El comportamiento respecto a la automatización es el siguiente: el dispositivo, a las 00:30, recalcula los tiempos en los que encender el agua de riego a partir de los datos obtenidos del Home Assistant como la temperatura y la humedad media de las últimas 48 horas, las cuales se calculan mediante interpolación lineal, debido a la falta de periodicidad de las medidas. Los tiempos calculados son los que se muestran en la zona de programación auto- mática en la figura 8.2, donde se muestra el siguiente riego programado y la duración del mismo, así como la última vez que se ejecutó un ciclo. Esta programación es una sugerencia, pues puede ser desconectada con el botón superior llamado ‘Riego automático’. También se muestra el estado actual y el tiempo restante hasta que se cierre automáticamente la válvula. El botón superior con un color más oscuro permite iniciar un ciclo manual de riego 41 Figura 8.1: Sección de información del sistema, donde vemos el periodo de riego de este mes y si el agua está disponible en la zona superior. En los siguientes iconos se muestra el estado de las válvulas y el transformador de corriente. Figura 8.2: Interfaz para controlar la zona Norte de riego. 42 Figura 8.3: Cinta de opciones correspondiente a la zona Norte. Figura 8.4: Estadísticas de riego del último mes de la zona Norte. o detener un ciclo ya iniciado, ya sea manual o automático. Adicionalmente, se puede desplegar una cinta de opciones, las cuales solo aplican a esta zona en concreto y permiten configurar, como vemos en la figura 8.3, la hora de comienzo del riego en el periodo de mañana y de tarde, así como el tipo de árbol a regar. Esta última opción permite elegir entre frutales, árboles de hoja caduca y árboles de hoja perenne, de esta forma calcula los tiempos con mayor precisión. Por último, se dispone de una gráfica por zona (figura 8.4), la cual muestra informa- ción sobre el riego en el último mes. Cada barra azul corresponde a un día, mientras que la altura depende del tiempo de riego de esa zona durante ese día. Se ha incluido también una automatización novedosa, útil sobre todo en zonas frías con heladas en invierno. Estas zonas sufren roturas del sistema de tuberías con frecuencia, sobre todo en los goteros y las conexiones. Es por ello por lo que se ha incluido una automa- 43 Figura 8.5: En la zona superior vemos el periodo de riego de este mes y si el agua está disponible en la zona superior. En los siguientes iconos se muestra el estado de los focos de la piscina, permitiendo ser encendidos, y las boyas magnéticas. tización con la que, en caso de bajar la temperatura de 0ºC, se activan las electroválvulas de riego durante 3 minutos, cada 45 minutos, para así evitar la congelación y rotura del sistema de riego. Este sistema está pensado para proteger, en nuestro caso particular, las mangueras y goteros, pues las electroválvulas se encuentran en una estructura semienterrada, donde raramente llegarán a tener temperaturas bajo cero. 8.2. Interfaz para la piscina La sección principal, donde se muestra el estado del sistema en tiempo real, es muy similar a la mostrada en la sección anterior y puede ser contemplada en la figura 8.5. Posteriormente se dispone de la zona de control del motor de la depuradora, como se muestra en la figura 8.6, donde podemos seleccionar los distintos modos de automatización, según el momento del año o las condiciones de la piscina: el modo automático, en el cual se calculan los tiempos de depuración en función de la temperatura exterior y cada cierto tiempo se enciende el motor para limpiar la superficie del agua con los skimmer ; el modo Non-stop, que enciende el motor desde el amanecer hasta el ocaso; y el modo invierno, que mantiene encendido el motor media hora al día para evitar el gripado del mismo en la temporada invernal y, a diferencia de los anteriores, no tiene en cuenta las boyas magnéticas de nivel. En los dos primeros modos, si la boya magnética inferior se desconecta, el sistema desconectaría automáticamente el motor de la depuradora hasta completar el siguiente llenado por seguridad. 44 Figura 8.6: Interfaz para controlar el motor de la depuradora. Se dispone de un botón, el cual permite encender manualmente la depuradora, de la misma forma que el botón físico disponible en el cuadro de conexiones. Este modo manual no tiene tiempo límite de encendido, a diferencia del riego, pues no supone ningún perjuicio que se quede encendido y puede ser útil en múltiples ocasiones. Como en el caso del riego, podemos ver el estado actual del sistema donde también se muestra si el motor está real- mente funcionando o no, pues al ser solar no podemos estar seguros de ello simplemente accionando el relé. Finalmente, se nos muestra el siguiente ciclo automático que va a ser realizado, tanto la hora a la que está programado como la duración del mismo. La interfaz diseñada para el llenado de la piscina es bastante similar a la ofrecida para cada una de las zonas de riego, únicamente diferenciándose en la automatización para solicitar el llenado de la misma. Por tanto, cuando se detecte que la piscina se encuentra con un bajo nivel de agua, se llenará automáticamente hasta la boya situada en la zona superior siempre y cuando el llenado automático esté activado. Como en el caso del riego, es posible seleccionar las horas más convenientes para llevar a cabo el llenado. El apagado de la 45 Figura 8.7: Interfaz para controlar el llenado de la piscina, muy similar a la del riego. depuración durante el llenado se hace de forma automática, permitiendo un funcionamiento completamente autónomo. El funcionamiento manual realiza las mismas funciones que en el caso del riego, aunque no es recomendable, pues no tiene en cuenta las boyas magnéticas y no se apaga automáticamente, únicamente al finalizar el tiempo seleccionado. Por último, disponemos de una sección donde se muestran las estadísticas tanto del llenado como de la depuración de los últimos 30 días de forma gráfica, como puede observarse en la figura 8.8. Estas estadísticas pueden ser útiles para la identificación de problemas, como fugas de agua en la piscina que estén llevando a un llenado diario excesivo o algún problema en el motor, pues únicamente se contabilizan los minutos que el motor se encuentra realmente en funcionamiento y no el tiempo que está encendido el relé. 46 Figura 8.8: Estadísticas del último mes de la depuración de la piscina y del llenado de la misma. 47 Capítulo 9 Conclusiones Con este proyecto se ha conseguido reducir notablemente el consumo de agua en los meses de verano y un mantenimiento del riego durante todo el año. En el momento de escribir estas líneas el sistema lleva en funcionamiento 20 meses sin intervención, a excepción de ciertas modificaciones del código para añadir nuevas funcionalidades. Mediante la interfaz se ha conseguido minimizar los errores humanos, pues no se permite al usuario mantener encendido el riego mayor tiempo del indicado. Además, gracias a la automatización de los tiempos de riego se ha solventado el problema de los riegos irregulares y la falta de atención, sobre todo ante olas de calor y periodos de mayor estrés hídrico. Se ha logrado también ajustar el riego atendiendo a las necesidades según la época del año, la temperatura, la humedad y las precipitaciones, lo cual ha sido muy notable en los cultivos en los que se ha aplicado: un limonero y un naranjo, entre otros árboles. Gracias a la gestión automatizada del riego, el aumento de la producción en los ár- boles ha sido bastante notable, logrando más de un 200 % en el caso del naranjo y un 50 % de mejora en el caso del limonero. En el resto de cultivos regados se ha podido observar un aumento notable en el crecimiento, sin embargo no podemos medir el rendimiento del riego en términos productivos pues no han alcanzado la madurez suficiente. Además, en nume- rosas plantas se ha reducido el riesgo de infección, pues se ha reducido el encharcamiento de la tierra, aprovechando mejor el agua disponible. Este proyecto puede ser aplicado tanto en jardines residenciales como en proyectos de 48 mayor escala, ya que únicamente se debe añadir una nueva zona para cada electroválvula en el código para disponer de las mismas funcionalidades y disponer de un control automático tras la configuración mediante la interfaz. El único límite a tener en cuenta serían las propias conexiones de la placa empleada en el proyecto. Sin embargo, este aspecto se encuentra en una constante mejora con la reciente inclusión de la Raspberry Pi Pico W en la lista de microcontroladores compatibles, por lo que no se debe descartar que se añadan nuevas placas con mayor potencia y conexiones. Por otro lado, recalcar que durante las temporadas sin producción agrícola este sis- tema permite a los agricultores confiar en los automatismos y no dedicar tiempo al mante- nimiento de los árboles hasta la siguiente temporada. Por último, el periodo actual de sequía que está sufriendo España pone de manifiesto la necesidad de sistemas de riego como el presentado en este proyecto que puedan aprovechar y adaptarse a las necesidades de los árboles junto a las del clima. Como ya se ha visto, el proyecto dispone de control remoto, lo que le otorga una mayor flexibilidad para adaptarse a futuras restricciones sobre los cultivos. 49 Chapter 9 Conclusions With this project, a significant reduction in water consumption during the summer months has been achieved, as well as year-round irrigation maintenance. At the time of writing, the system has been operating for 20 months without intervention, except for certain code modifications to add new functionalities. Through the interface, human errors have been minimized as users are not allowed to keep the irrigation system on for longer than necessary. Additionally, by automating the irrigation timing, the problem of irregular watering and lack of attention, especially during heatwaves and periods of increased hydric stress, has been resolved. The irrigation has also been adjusted according to the specific needs of each season, temperature, humidity, and precipitation, which has been particularly notable in crops such as lemon and orange trees, among others. Thanks to the automated irrigation management, there has been a considerable in- crease in tree productivity, with the orange trees showing an increase of over 200 % and a 50 % improvement for the lemon trees. Other irrigated crops have also shown significant growth, although the productive yield cannot be measured as they have not reached suffi- cient maturity. Moreover, the risk of infection has been reduced in numerous plants due to reduced waterlogging of the soil, optimizing water usage. This project can be applied in both residential gardens and larger-scale projects, as it only requires adding a new zone for each solenoid valve in the code to have the same functionalities and enable automatic control after configuration through the interface. The 50 only limitation to consider would be the connections supported by the board used in the project. However, this aspect is continuously improving with the recent inclusion of the Raspberry Pi Pico W in the list of compatible microcontrollers, indicating the possibility of adding new boards with more power and connections. Furthermore, it should be noted that during seasons without agricultural produc- tion, this system allows farmers to rely on automation and avoid dedicating time to tree maintenance until the next season. Lastly, the current period of drought in Spain highlights the need for irrigation sys- tems like the one presented in this project, which can adapt to the needs of trees and the climate. As seen, the project features remote control, providing greater flexibility to adapt to future crop restrictions. 51 Referencias [1] Ministerio de Agricultura Pesca y Alimentación. Encuesta sobre superficies y rendi- mientos de cultivos, 2020. URL https://web.archive.org/web/20210602101030/ https://www.mapa.gob.es/es/estadistica/temas/estadisticas-agrarias/ regadios2020_tcm30-562249.pdf. [2] Repositorio de GitHub del proyecto Home Assistant. URL https://github.com/ home-assistant. [3] Página web del proyecto ESPHome. URL https://esphome.io. [4] Página web del producto: Encaminador TP-Link Archer C6 V2. URL https://www. tp-link.com/es/home-networking/wifi-router/archer-c6/v2. [5] Página web del producto: Conmutador POE TP-Link TL-SG108PE. URL https: //www.tp-link.com/es/business-networking/easy-smart-switch/tl-sg108pe. [6] Página web del producto: Ordenador Intel NUC 8i5BEH. URL https://www. intel.es/content/www/es/es/products/sku/126148/intel-nuc-kit-nuc8i5beh/ specifications.html. [7] Página web del producto: Multisensor Aqara. URL https://www.aqara.com/en/ temperature_humidity_sensor.html. [8] Página web del producto: Adaptador ZigBee. URL https://slae.sh/projects/ cc2652. [9] Adatadores ZigBee recomendados. URL https://www.zigbee2mqtt.io/guide/ adapters/#recommended. [10] Página web del proyecto ZigBee2MQTT. URL https://www.zigbee2mqtt.io. 52 https://web.archive.org/web/20210602101030/https://www.mapa.gob.es/es/estadistica/temas/estadisticas-agrarias/regadios2020_tcm30-562249.pdf https://web.archive.org/web/20210602101030/https://www.mapa.gob.es/es/estadistica/temas/estadisticas-agrarias/regadios2020_tcm30-562249.pdf https://web.archive.org/web/20210602101030/https://www.mapa.gob.es/es/estadistica/temas/estadisticas-agrarias/regadios2020_tcm30-562249.pdf https://github.com/home-assistant https://github.com/home-assistant https://esphome.io https://www.tp-link.com/es/home-networking/wifi-router/archer-c6/v2 https://www.tp-link.com/es/home-networking/wifi-router/archer-c6/v2 https://www.tp-link.com/es/business-networking/easy-smart-switch/tl-sg108pe https://www.tp-link.com/es/business-networking/easy-smart-switch/tl-sg108pe https://www.intel.es/content/www/es/es/products/sku/126148/intel-nuc-kit-nuc8i5beh/specifications.html https://www.intel.es/content/www/es/es/products/sku/126148/intel-nuc-kit-nuc8i5beh/specifications.html https://www.intel.es/content/www/es/es/products/sku/126148/intel-nuc-kit-nuc8i5beh/specifications.html https://www.aqara.com/en/temperature_humidity_sensor.html https://www.aqara.com/en/temperature_humidity_sensor.html https://slae.sh/projects/cc2652 https://slae.sh/projects/cc2652 https://www.zigbee2mqtt.io/guide/adapters/#recommended https://www.zigbee2mqtt.io/guide/adapters/#recommended https://www.zigbee2mqtt.io [11] Página web del producto: ESP32 modelo WT32-ETH01. URL http://www. wireless-tag.com/portfolio/wt32-eth01. [12] Página web de la marca RainBird. URL https://www.rainbird.com/es/eur. [13] Página web del producto: ESP32 modelo ESP32-POE. URL https://www.olimex. com/Products/IoT/ESP32/ESP32-POE/open-source-hardware. [14] Página web del producto: Pluviómetro de balancín. URL http://www.misolie.net/ misol-spare-part-for-weather-station-to-measure-the-rain-volume-for-rain-meter-for-rain-gauge-p-513. html. [15] Métodos de instalación de Home Assistant. URL https://www.home-assistant.io/ installation. [16] Enlace de GitHub a la configuración del Home Assistant. URL https://github.com/ MiguelJPen/Home-Assistant_Config. [17] Enlace de GitHub a la configuración de ESPHome. URL https://github.com/ MiguelJPen/Home-Assistant_Config/tree/master/esphome. [18] Enlace de GitHub al archivo de control de tiempos. URL https://github.com/ MiguelJPen/Home-Assistant_Config/blob/master/esphome/time_control.hpp. [19] Enlace de GitHub al archivo de la piscina. URL https://github.com/MiguelJPen/ Home-Assistant_Config/blob/master/esphome/pool.hpp. [20] Enlace de GitHub al archivo de riego. URL https://github.com/MiguelJPen/ Home-Assistant_Config/blob/master/esphome/irrigation.hpp. [21] Consejería de Agricultura y Agua Soria Alfonso, A. La fertirrigación del limone- ro, 2008. URL https://www.carm.es/web/descarga?IDCONTENIDO=6159&ALIAS= PUBT&IDADIC=1196&ARCHIVO=Texto+Completo+1+La+fertirrigaci%C3%B3n+en+el+ limonero.pdf&RASTRO=c498\protect\T1\textdollarm1259,20559. [22] Enlace de GitHub a la carpeta common. URL https://github.com/MiguelJPen/ Home-Assistant_Config/tree/master/esphome/common. [23] Enlace de GitHub al archivo de entidades controladas por eventos tempora- les. URL https://github.com/MiguelJPen/Home-Assistant_Config/tree/master/ esphome/common/time_controlled_entity. 53 http://www.wireless-tag.com/portfolio/wt32-eth01 http://www.wireless-tag.com/portfolio/wt32-eth01 https://www.rainbird.com/es/eur https://www.olimex.com/Products/IoT/ESP32/ESP32-POE/open-source-hardware https://www.olimex.com/Products/IoT/ESP32/ESP32-POE/open-source-hardware http://www.misolie.net/misol-spare-part-for-weather-station-to-measure-the-rain-volume-for-rain-meter-for-rain-gauge-p-513.html http://www.misolie.net/misol-spare-part-for-weather-station-to-measure-the-rain-volume-for-rain-meter-for-rain-gauge-p-513.html http://www.misolie.net/misol-spare-part-for-weather-station-to-measure-the-rain-volume-for-rain-meter-for-rain-gauge-p-513.html https://www.home-assistant.io/installation https://www.home-assistant.io/installation https://github.com/MiguelJPen/Home-Assistant_Config https://github.com/MiguelJPen/Home-Assistant_Config https://github.com/MiguelJPen/Home-Assistant_Config/tree/master/esphome https://github.com/MiguelJPen/Home-Assistant_Config/tree/master/esphome https://github.com/MiguelJPen/Home-Assistant_Config/blob/master/esphome/time_control.hpp https://github.com/MiguelJPen/Home-Assistant_Config/blob/master/esphome/time_control.hpp https://github.com/MiguelJPen/Home-Assistant_Config/blob/master/esphome/pool.hpp https://github.com/MiguelJPen/Home-Assistant_Config/blob/master/esphome/pool.hpp https://github.com/MiguelJPen/Home-Assistant_Config/blob/master/esphome/irrigation.hpp https://github.com/MiguelJPen/Home-Assistant_Config/blob/master/esphome/irrigation.hpp https://www.carm.es/web/descarga?IDCONTENIDO=6159&ALIAS=PUBT&IDADIC=1196&ARCHIVO=Texto+Completo+1+La+fertirrigaci%C3%B3n+en+el+limonero.pdf&RASTRO=c498\protect \T1\textdollar m1259,20559 https://www.carm.es/web/descarga?IDCONTENIDO=6159&ALIAS=PUBT&IDADIC=1196&ARCHIVO=Texto+Completo+1+La+fertirrigaci%C3%B3n+en+el+limonero.pdf&RASTRO=c498\protect \T1\textdollar m1259,20559 https://www.carm.es/web/descarga?IDCONTENIDO=6159&ALIAS=PUBT&IDADIC=1196&ARCHIVO=Texto+Completo+1+La+fertirrigaci%C3%B3n+en+el+limonero.pdf&RASTRO=c498\protect \T1\textdollar m1259,20559 https://github.com/MiguelJPen/Home-Assistant_Config/tree/master/esphome/common https://github.com/MiguelJPen/Home-Assistant_Config/tree/master/esphome/common https://github.com/MiguelJPen/Home-Assistant_Config/tree/master/esphome/common/time_controlled_entity https://github.com/MiguelJPen/Home-Assistant_Config/tree/master/esphome/common/time_controlled_entity [24] Enlace de GitHub a la carpeta de configuración del riego. URL https://github.com/ MiguelJPen/Home-Assistant_Config/tree/master/esphome/irrigation. [25] Enlace de GitHub a la carpeta de configuración de la carpeta de la piscina. URL https: //github.com/MiguelJPen/Home-Assistant_Config/tree/master/esphome/pool. [26] Enlace de GitHub al archivo de configuración de llenado de la pisci- na. URL https://github.com/MiguelJPen/Home-Assistant_Config/blob/master/ esphome/pool/pool_filling.yaml. [27] Página web del proyecto de riego de Brian Hanifin. URL https://brianhanifin. com/posts/diy-irrigation-controller-esphome-home-assistant. [28] Página web del producto: Sonoff 4CH PRO. URL https://sonoff.tech/product/ diy-smart-switches/4chr3-4chpror3. [29] Página web del componente Sprinkler Controller de ESPHome. URL https:// esphome.io/components/sprinkler.html. [30] Página web del producto: Multisensor BME680. URL https://www. bosch-sensortec.com/products/environmental-sensors/gas-sensors/bme680/ #technical. 54 https://github.com/MiguelJPen/Home-Assistant_Config/tree/master/esphome/irrigation https://github.com/MiguelJPen/Home-Assistant_Config/tree/master/esphome/irrigation https://github.com/MiguelJPen/Home-Assistant_Config/tree/master/esphome/pool https://github.com/MiguelJPen/Home-Assistant_Config/tree/master/esphome/pool https://github.com/MiguelJPen/Home-Assistant_Config/blob/master/esphome/pool/pool_filling.yaml https://github.com/MiguelJPen/Home-Assistant_Config/blob/master/esphome/pool/pool_filling.yaml https://brianhanifin.com/posts/diy-irrigation-controller-esphome-home-assistant https://brianhanifin.com/posts/diy-irrigation-controller-esphome-home-assistant https://sonoff.tech/product/diy-smart-switches/4chr3-4chpror3 https://sonoff.tech/product/diy-smart-switches/4chr3-4chpror3 https://esphome.io/components/sprinkler.html https://esphome.io/components/sprinkler.html https://www.bosch-sensortec.com/products/environmental-sensors/gas-sensors/bme680/#technical https://www.bosch-sensortec.com/products/environmental-sensors/gas-sensors/bme680/#technical https://www.bosch-sensortec.com/products/environmental-sensors/gas-sensors/bme680/#technical Apéndice A Esquema de la instalación 55 Portada Resumen Abstract Índice Agradecimientos Introducción Objetivos Introduction Goals Arquitectura del sistema Sistema central Nodo de las electroválvulas Nodo de la piscina Descripción a nivel de hardware Dispositivos de conexión Home Assistant Nodo de las electroválvulas Nodo de la piscina Herramientas empleadas en la instalación Descripción del proyecto a nivel de software Sistema principal Nodos de control: ESPHome Gestión de los eventos de tiempo Llenado de la piscina Proyectos previos DIY Irrigation Controller de Brian Hanifin Sprinkler Controller de ESPHome Controladores de la marca Rain Bird Montaje del sistema Home Assistant Nodo de las electroválvulas Nodo de la piscina Boyas magnéticas Pluviómetro Termómetro exterior Interfaz y funcionamiento Interfaz para el riego Interfaz para la piscina Conclusiones Conclusions Referencias Esquema de la instalación