Full text
Equation Chapter 1 Section 1 Trabajo Fin de Grado Grado en Ingeniería de las Tecnologías de Telecomunicación Control y supervisión mediante un sistema microcontrolador de los parámetros de calidad de agua de un estanque Autor: Antonio Pérez Laguarda Tutor: Juan de la Cruz García Ortega Departamento de Ingeniería Electrónica Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2017
ii
iii Trabajo Fin de Grado Grado en Ingeniería de las Tecnologías de Telecomunicación Control y supervisión mediante un sistema microcontrolador de los parámetros de calidad de agua de un estanque Autor: Antonio Pérez Laguarda Tutor: Juan de la Cruz García Ortega Profesor titular Departamento de Ingeniería Electrónica Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2017
iv
v Trabajo Fin de Grado: Control y supervisión mediante un sistema microcontrolador de los parámetros de calidad de agua de un estanque Autor: Antonio Pérez Laguarda Tutor: Juan de la Cruz García Ortega El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros: Presidente: Vocales: Secretario: Acuerdan otorgarle la calificación de: Sevilla, 2017 El Secretario del Tribunal
vi
vii A mi familia y amigos A mis profesores
viii
ix Resumen En la actualidad, existen multitud de personas interesadas en el mundo de los acuarios marinos. La mayoría de estas personas realizan un control manual de ciertos parámetros de calidad del agua o de la iluminación, es decir, se necesita de una persona para poder modificar y conocer parámetros tales como la temperatura y pH del agua, nivel de llenado del acuario, o intensidad y horas de iluminación. Existen sistemas comerciales en el mercado cuya función es el control del acuario sin la necesidad de la actuación de una persona. El problema de estos controladores comerciales es su elevado precio, que no está al alcance de la mayoría. Por este motivo, se propone la creación de un controlador de acuarios con una funcionalidad similar a los comerciales pero mucho más económico. A lo largo del proyecto se estudiarán los aspectos teóricos necesarios, se diseñará y se realizará el montaje del sistema, se programará el código necesario para el microcontrolador Arduino y se realizarán una serie de tests que demuestren su correcto funcionamiento.
xvi Figura 6-28. Montaje cable calefactor 36 Figura 6-29. Opciones para disminuir la temperatura en un acuario 37 Figura 6-30. Panel iluminación LED 38 Figura 6-31. Bomba de agua sumergible 38 Figura 6-32. Bombona CO₂ 39 Figura 6-33. Manoreductor con manómetro 39 Figura 6-34. Válvula de retención 40 Figura 6-35. Cuentagotas 40 Figura 6-36. Electroválvula 41 Figura 6-37. Elementos de un relé 41 Figura 6-38. Esquemático de un relé 42 Figura 6-39. Circuito necesario para la conexión de un relé a Arduino 42 Figura 6-40. Elementos de un módulo de cuatro relés 43 Figura 6-41. Esquemático de un canal del módulo de cuatro relés 43 Figura 6-42. Conexión del módulo de cuatro relés a Arduino usando una fuente externa 44 Figura 6-43. Montaje final del sistema usando placa de pruebas 45 Figura 6-44. Esquemático completo en Eagle 46 Figura 6-45. Diseño layout del circuito. 47 Figura 6-46. Diseño layout del circuito mostrando solo vías y pads 47 Figura 6-47. Diseño layout del circuito con el plano de tierra añadido 48 Figura 7-1. Interfaz gráfica del IDE Arduino 51 Figura 7-2. Menú del IDE de Arduino 52 Figura 7-3. Menú de acceso rápido del IDE de Arduino 52 Figura 7-4. Editor de texto del IDE de Arduino. 52 Figura 7-5. Mensaje de compilación del IDE de Arduino 53 Figura 7-6. Mensaje de error del IDE de Arduino 53 Figura 7-7. Consola del IDE de Arduino 53 Figura 7-8. Diagrama de flujo del menú de inicio 54 Figura 7-9. Diagrama de flujo del “modo lectura” 54 Figura 7-10. Diagrama de flujode la función “lecturaGeneral” 56 Figura 7-11. Diagrama de flujo del menú “fijar parámetros” 57 Figura 7-12. Diagrama de flujo del menú “mostrar parámetros” 58 Figura 7-13. Diagrama de flujo genérico para fijar parámetros 59 Figura 7-14. Diagrama de flujo para la lectura de un potenciómetro 60 Figura 7-15. Diagrama de flujo para la lectura de las boyas de nivel 60 Figura 7-16. Código de ejemplo del sensor de temperatura DS18B20 61 Figura 7-17. Diagrama de flujo para la lectura del monitor serie 61 Figura A-1. Esquema funcionamiento del bus I2C 79 Figura A-2. Ejemplo de funcionamiento del bus I2C 80
xvii Notación pH Potencial de hidrógeno µS/cm Microsiemens por centímetros ºC Grados centígrados S Siemens ppm Partes por millón CO₂ Dioxido de carbono Mhz Megahercio mA Miliamperio V Voltios kB Kilobyte kΩ Kiloohmio Máx. Máximo Mín. Mínimo m/s Metros por segundo % Porcentaje W Vatio L Litro cc Centímetro cúbico mg/L Miligramos por litro O Oxígeno C Carbono
1 INTRODUCCIÓN En este primer capítulo se expondrán los motivos por los cuales se ha desarrollado el presente trabajo, y posteriormente se comentarán los objetivos fijados. 1.1 Motivación Desde hace bastante tiempo, a la gente le gusta tener y cuidar personalmente su acuario, y su intención es tener el mayor número de parámetros controlados para evitar problemas en él. Para ello se recurre a la tecnología actual, que permite automatizar las tareas de cuidado de los acuarios. Los dispositivos electrónicos actuales creados para el control de los acuarios tienen un coste elevado. Es por este motivo por el que surge la necesidad de la creación de un sistema que permita realizar las mismas funciones de estos sistemas comerciales, sin que tenga un precio elevado, y dando además la posibilidad al usuario de adaptar el sistema a las necesidades de este. 1.2 Objetivos El objetivo fundamental del proyecto es el desarrollo de un sistema electrónico de bajo coste, de fácil manejo e intuitivo que cuente con un Arduino Mega como microcontrolador, encargado de monitorizar y controlar la información recibida mediante una serie de sensores, para el mantenimiento del acuario. El presente proyecto abarca varios campos y objetivos. A continuación se detallan los pasos a realizar que se encuentran implícitos en el desarrollo del proyecto para llegar al objetivo fundamental: En primer lugar será necesario realizar un estudio previo de los aspectos teóricos que son de importancia en el desarrollo del sistema. Para ello será necesario realizar una investigación sobre los diferentes sistemas ya creados para el mantenimiento de acuarios y sobre qué parámetros del agua son interesantes en el entorno de la acuariofilia. En segundo lugar se sitúa el diseño y fabricación del sistema, encontrándose implícito en este apartado la selección del hardware que se usará, el desarrollo del programa de control, y el diseño final del circuito sobre una placa PCB y su posterior fabricación. Por último debe comprobarse que el sistema funciona de manera correcta, mediante la simulación de distintos eventos de importancia para el sistema, de manera manual interactuando con un acuario, o mediante la activación a través del código de algunas variables que simularían la ocurrencia de estos eventos.
2 ESTADO DEL ARTE a cría de seres acuáticos en cautividad es una práctica muy antigua, que se remonta varios siglos antes de Cristo. Sin embargo, los acuarios tal y como se conocen hoy nacieron en el siglo XVIII, al surgir entre la gente acomodada la moda de coleccionar animales y sobre todo plantas. Para lo cual se desarrollaron recipientes sellados que podían contener cierta cantidad de líquido. Más adelante, dicha cantidad fue aumentando hasta convertirse en los modelos actuales. A la hora de tener un acuario, es muy importante controlar a la perfección todos los parámetros del agua para así conseguir que el ecosistema se desarrolle a la perfección, con plantas y peces saludables, libre de algas y enfermedades, y seguro para el usuario. Figura 2-1. Acuario plantado Existen tanto sistemas comerciales como sistemas de código abierto desarrollados principalmente sobre Arduino y Raspberry Pi para el control de los parámetros del agua en un acuario. Entre los sistemas comerciales podemos nombrar dos controladores: AT-Control de la empresa Aqua Medic [1] y Profilux controller 4 de la empresa Profilux [2]. El primero de ellos permite el control a través del ordenador, dando la posibilidad de descargar gráficas o datos importantes en él, y el segundo, es ligeramente superior ya que cuenta con la posibilidad de interactuar con el controlador desde un PC, desde una tablet o desde un dispositivo móvil. Figura 2-2. Sistema comercial AT-Control L
Estado del Arte 4 4 Figura 2-3. Sistema comercial ProfiLux. La ventaja de estos sistemas es su exactitud y sencillez a la hora de la instalación. Su principal inconveniente es su elevado coste, el cual va desde los 600€ que puede costar los controladores de Aqua Medic hasta los más de 1000€ que pueden llegar a costar los desarrollados por Profilux. También existen gran cantidad de proyectos open source en la web relacionados con el control de acuarios. Entre los cuales se pueden destacar tanto Jarduino como Ferduino, ambos usando el microcontrolador Arduino Mega. La gran ventaja de este tipo de sistemas es la facilidad con la que podemos adaptarlo a nuestras necesidades, modificando lo que creamos conveniente. [3] Jarduino está pensado para el control del riego, pero al ser un tema bastante similar al control de acuarios, la gente ha adaptado el código y ha sustituido algunos de los sensores por otros más convenientes en el ámbito de la acuariofilia. [4] Figura 2-4. Placa Ferduino.
5 Control y supervisión mediante un sistema microcontrolador de los parámetros de calidad de agua de un estanque Figura 2-5. Montaje placa Jarduino.
3 PARÁMETROS DEL AGUA l presente trabajo se va a centrar en la monitorización de diversos parámetros del agua, enfocándose al uso en acuarios. Según la RAE el agua es un líquido transparente, incoloro, inodoro e insípido en estado puro, cuyas moléculas están formadas por dos átomos de hidrógeno y uno de oxígeno, y que constituye el componente más abundante de la superficie terrestre y el mayoritario de todos los organismos vivos. Orientando el uso de agua a acuarios, cabe destacar la importancia del mantenimiento de una serie de parámetros en unos márgenes adecuados para así posibilitar la vida en su interior. A continuación, se va a proceder a comentar algunos de los más importantes. 3.1 PH El pH es una medida de acidez o alcalinidad de una disolución. Indica la concentración de iones de hidrógeno 𝐻+ presentes en determinadas disoluciones. En la mayoría de las sustancias presentes en la naturaleza, estas concentraciones son muy bajas y expresarlas en forma decimal o exponencial resulta engorroso, y con frecuencia es fuente de errores. En el año 1909, el químico danés Sören Sörensen propuso una alternativa para la expresión de la concentración de 𝐻+. Sugirió que en lugar de usar números en forma decimal o exponencial, se empleara una transformación logarítmica de la concentración molar de protones a la que denominó pH y definió matemáticamente como: 𝑝𝐻 =log 1 [𝐻+]=−log[𝐻+] Como resultado de esta transformación, los números fraccionarios se convierten en números con enteros positivos, y como es inversa, mientras mayor sea la concentración de 𝐻+, el valor del pH es menor. Este aspecto indica la importancia de regular correctamente el valor del pH del acuario, ya que una simple variación de 1 en la escala de pH, representa un cambio de diez veces en la concentración del agua. A pesar del tiempo transcurrido desde la aparición de esta forma de medida, hoy día sigue siendo el pH la forma más común de expresar la acidez y la alcalinidad. La escala que se usa para la medición de este parámetro va de 1 a 14. El pH 7 equivale a un pH neutro y es el que tiene el agua químicamente pura. Valores menores a 7 indican acidez del agua y valores mayores indican alcalinidad, estos niveles serán mayores cuanto más se acerquen al extremo. E
Estudios previos 14 14 puesto que se hará de manera manual. Para medir la dureza del acuario, no hay dispositivos específicos, por lo que se hará uso de la relación que esta medida guarda con la conductividad del agua, ya que para la conductividad si existen sensores. Por tanto, necesitaremos un sensor de conductividad para posteriormente realizar las oportunas operaciones hasta conseguir el nivel de dureza. Como sensor de EC se usará el sensor DFR0300 producido por DFRobot. Este nos dará el valor de conductividad en mS/cm. Para modificar la dureza, al igual que el pH, el usuario tendrá que modificarlo de manera manual, disolviendo en el agua una serie de sustancias químicas específicas para la modificación de la dureza, aspecto que no es de interés en nuestro trabajo. Así pues, para controlar la dureza del agua se necesitará un sensor analógico de conductividad, y no se necesitará añadir ninguna salida ya que se hará de manera manual. El nivel de agua será controlado mediante una herramienta muy común y con un funcionamiento muy sencillo, la boya de nivel, la cual actúa como interruptor dependiendo si el nivel de agua está por encima o por debajo de su colocación en el acuario. Para lograr mantener el agua dentro unos niveles fijados, sería necesario el uso de dos boyas, una señalando el nivel superior y otra el inferior. También es posible el uso de un sensor de ultrasonido situado en la tapadera del acuario, la implementación de esta alternativa sería algo más complicada en cuanto a desarrollo, pero la precisión sería mucho mayor, ya que a raíz del tiempo que tarde el sensor en recibir el eco y sabiendo la altura del acuario, puede determinarse el porcentaje de llenado de este. Debido a que la precisión necesaria en cuanto al nivel de llenado en el proyecto no es muy elevada, se opta por el uso de dos boyas de nivel, por lo tanto precisaríamos de dos entradas digitales. Para controlar el nivel de agua del acuario se utilizarán dos bombas de agua. Una de ellas encargada del vaciado del acuario, y otra encargada del llenado. Para el llenado podría usarse también una válvula de llenado, donde el grifo daría la suficiente presión para conseguir llenar el tanque. Por lo tanto para el nivel de agua se necesitarán 4 elementos. Como entradas al microcontrolador se tendrán dos boyas de nivel digitales, y dos salidas, una para cada bomba de agua necesaria. En cuanto a la medida de la luz, existen diferentes componentes electrónicos los cuales determinan la cantidad de luz existente, pero para nuestro proyecto no será necesaria la utilización de ninguno de estos ya que el acuario estará ubicado en una zona interior y se le deberá proporcionar una fuente de luz directa al agua durante un intervalo de tiempo fijo sin tener en cuenta la cantidad de luz exterior. Por lo tanto no se usará un sensor de este tipo, simplemente se fijarán unas horas de encendido y apagado de las luces que pueden ser modificadas a petición del usuario mediante un teclado con el que contará nuestro sistema. No será necesario un sensor de CO₂, ya que conociendo los niveles de dureza y pH puede hacerse una estimación de la cantidad de CO₂ disuelto en el agua, siendo así innecesario el uso de un sensor de CO₂. Aunque en este proyecto no se realizarán las conversiones pertinentes para conocer el nivel de CO₂. Para añadir el CO₂ usaremos una válvula solenoide, un contador de burbujas y una bombona de CO₂. Según lo comentado, como entradas al microcontrolador necesitaremos: 1. Sensor de temperatura 2. Sensor de pH
15 Control y supervisión mediante un sistema microcontrolador de los parámetros de calidad de agua de un estanque 3. Sensor de EC 4. Dos boyas de nivel Y en cuanto a salidas: 1. Resistencia calefactora 2. Ventilador 3. Válvula CO₂ 4. Bomba de agua para llenado 5. Bomba de agua para vaciado 6. Iluminación Quedando nuestro sistema de la siguiente manera: Figura 5-1. Entradas y salidas al microcontrolador En capítulos siguientes se explicará con más detalle el funcionamiento de los elementos citados anteriormente.
6 DESARROLLO HARDWARE 6.1 Elección del microcontrolador Existen multitud de microcontroladores en el mercado capaces de soportar el presente proyecto. Nuestro objetivo es que la plataforma sea de código abierto, para así facilitar el desarrollo del trabajo. Entre estas plataformas encontramos, entre otras, Raspberry Pi, BeagleBone, Sharks Cove, Waspmote o Arduino. Se ha elegido la plataforma Arduino debido a que, además de simplificar el proceso de trabajo con microcontroladores, ofrece una serie de ventajas respecto a otros sistemas: La elección de la plataforma Arduino se debe a que, además de simplificar el proceso de trabajo con microcontroladores, ofrece una serie de ventajas respecto a otros sistemas: Precio. Las placas Arduino son relativamente baratas en comparación con otras plataformas de microcontroladores. Multiplataforma. El software Arduino (IDE) puede ejecutarse en sistemas operativos Windows, Mac y Linux. La mayoría de los sistemas de microcontroladores están limitados a Windows. Entorno de programación simple y claro. El software Arduino (IDE) es sencillo de usar para gente sin experiencia previa, y aún lo suficientemente flexible para que los usuarios más avanzados puedan sacarle provecho. Código libre y software extensible. El software de Arduino está publicado como herramientas de código abierto, disponibles para la extensión por programadores experimentados. El lenguaje puede ser expandido a través de bibliotecas C++. Gente que quiera entender los detalles técnicos puede realizar el salto de Arduino al lenguaje de programación AVR-C en el cual está basado. También se puede agregar código AVR-C directamente en los programas Arduino. Código libre y hardware extensible. Los diseños de las placas Arduino están publicados bajo una licencia de Creaciones Comunes, por tanto, experimentados diseñadores de circuitos pueden realizar su propia versión de la placa, ampliando y mejorando las características dependiendo de su posterior uso. 6.2 Arduino Arduino es una plataforma electrónica de código abierto (open source) basada en el sencillo manejo tanto de software como de hardware. Las placas Arduino son capaces de leer entradas, como puede ser la temperatura mediante un sensor, y convertirlas a unas salidas, activando un ventilador o encendiendo un LED. Se le puede decir a la placa lo que se desea que haga mediante el envío de una serie de instrucciones al microcontrolador de la placa. Para ello se utiliza el lenguaje de programación Arduino, basado en Wiring, y el software Arduino (IDE), basado en Processing. Con el paso de los años Arduino ha sido el “cerebro” de miles de proyectos, desde objetos cotidianos a complejos instrumentos científicos. Una comunidad de diseñadores alrededor del mundo (estudiantes, aficionados, progamadores, profesionales) se han reunido en torno a esta plataforma de código abierto, sus contribuciones han proporcionado una gran cantidad de conocimiento que puede ser de tanto para novatos como expertos. Arduino nació en el Instituto de Diseño de Interacciones de Ivrea, como una herramienta sencilla para el rápido prototipado, enfocado a estudiantes sin una base de electrónica y programación. Tan pronto como Arduino comenzó a convertirse en una gran comunidad, la placa Arduino comenzó a cambiar para adaptarse a las nuevas necesidades y retos, diferenciándose su oferta de placas simples de 8 bits a productos para IoT, weareable, impresión 3D, y entornos embebidos. Todas las placas Arduino son completamente de código abierto, permitiendo a los usuarios construirlos de manera independiente y eventualmente adaptarlos a sus
Desarrollo Hardware 18 18 necesidades particulares. Gracias a su experiencia de usuario sencilla y accesible, Arduino ha sido usada en miles de proyectos y aplicaciones diferentes. El software Arduino es sencillo de usar para principiantes, y suficientemente flexible todavía para usuarios avanzados. Puede ejecutarse en Mac, Windows y Linux. Profesores y estudiantes lo usan para construir instrumentos científicos baratos, para probar principios físicos y químicos, o para comenzar a iniciarse en el mundo de la programación y la robótica. Diseñadores y arquitectos construyen prototipos interactivos, músicos y artistas lo usan para instalaciones y experimentar con nuevos instrumentos musicales. Arduino es la herramienta clave para aprender cosas nuevas. Cualquiera (niños, aficionados, artistas, programadores) puede empezar a probar con Arduino simplemente siguiendo una serie de instrucciones paso a paso de un kit, o compartir sus ideas en internet con otros miembros de la comunidad Arduino. Existen otros muchos microcontroladores y plataformas disponibles para la computación física. Parallax Basic Stamp, Netmedia‟s BX-24, Phidgets, MIT‟s Handyboard, y muchos otros ofrecen funcionalidades muy parecidas. Todas estas herramientas toman los detalles problemáticos de la programación del microcontrolador y las agrupan en un paquete fácil de usar. 6.3 Placas Arduino A día de hoy, la variedad de productos ofrecidos por Arduino es inmensa, ofreciendo placas, módulos, accesorios, y kits enfocados a una aplicación concreta. Como se puede apreciar en el siguiente gráfico existen placas pensadas para personas poco o nada experimentadas en el mundo de Arduino y la programación de microcontroladores, placas con características un poco más avanzadas, Arduino orientado a IoT, pensados para llevar encima (wearable), o incluso otros pensados exclusivamente para el manejo de impresoras 3D. Tabla 6-1. Clasificación de las placas Arduino según características NIVEL BÁSICO CARACTERÍSTICAS AVANZADAS IoT WEARABLES IMPRESIÓN 3D Arduino UNO Arduino Mega Arduino Yun Arduino Gemma Materia 101 Arduino Leonardo Arduino Mega ADK Lilypad Arduino USB Arduino 101 Arduino Zero Lilypad Arduino Main Board Arduino Robot Arduino Due Lilypad Arduino Simple Arduino Esplora Arduino ISP Lilypad Arduino Simple Snap Arduino Ethernet A continuación se comentarán brevemente las características más importantes de algunas de las placas Arduino: Arduino UNO. Esta es la placa más conocida de Arduino y, sin duda, la más recomendada para comenzar. Esta fue la primera en salir al mercado, y el resto de placas posteriores están apoyadas en ella para su diseño. Posee un microcontrolador ATmega320 de 8 bits a 16 Mhz con una alimentación de 5 V. Uno de sus defectos puede ser la memoria, ya que esta es algo limitada, pero no impide que no
19 Control y supervisión mediante un sistema microcontrolador de los parámetros de calidad de agua de un estanque sea compatible con multitud de proyectos. Contiene 14 pines digitales, de los cuales 6 de ellos pueden usarse como PWM, y 6 pines analógicos. Los pines pueden trabajar con corrientes de hasta 40 mA. Figura 6-1. Arduino UNO Arduino 101. Es una placa nueva, presentada en este año. Aspectos a destacar de ella son su módulo Intel Curie, con dimensiones reducidas y bajo consumo. Contiene un microcontrolador x86, DSP, bluetooth, acelerómetro, giroscopio etc. El tamaño y conexiones es igual a Arduino UNO. Figura 6-2. Arduino 101 Arduino Esplora. Esta placa a simple vista se diferencia mucho del resto de la oferta de Arduino. Esto se debe a su forma ovalada y a la inclusión de una serie de sensores y botones en la superficie de la placa (acelerómetro, sensor de temperatura, sensor de luz, zumbador, botones, joystick, micrófono y socket para conectar una pantalla TFT LCD). El microcontrolador es un ATmega23u4. El principal inconveniente de esta placa es su escasa conectividad, ya que todo lo tiene integrado. Por lo que no es aconsejable para personas que quieran indagar más en el mundo de la electrónica. Figura 6-3. Arduino Esplora
Desarrollo Hardware 20 20 Arduino Leonardo. Es muy similar a Arduino UNO. Sus diferencias son su tamaño más reducido (usando sólo conexión mini-USB), el número de pines (20 pines digitales y 12 pines analógicos), y que los pines son solo perforaciones en la placa, no cuentan con las tiras de pines para la conexión. También el microcontrolador es diferente, ATmega32u4. Figura 6-4. Arduino Leonardo Arduino Mega. EL microcontrolador que usa es el ATmega2560, con capacidades superiores al Arduino UNO. Una de las características más destacables de Arduino Mega es su gran cantidad de pines, 54 pines digitales, de los cuales 15 de ellos son PWM, y 16 pines analógicos. Figura 6-5. Arduino Mega Arduino Mega ADK. La principal diferencia con Arduino Mega es que dispone de una interfaz preparada para ser conectada mediante USB a dispositivos móviles basados en Android, gracias a su IC MAX3421e. Figura 6-6. Arduino Mega ADK. Arduino Due. Es la primera placa basada en un microcontrolador ARM de 32 bits, el Atmel SAM3X8E ARM Cortex-M3. A diferencia de la mayoría de placas Arduino maneja un voltaje de 3.3 V. Está orientada a proyectos con alta capacidad de procesamiento. Posee 54 pines digitales, 12 de ellos PWM, y 12 analógicos.
21 Control y supervisión mediante un sistema microcontrolador de los parámetros de calidad de agua de un estanque Figura 6-7. Arduino Due Arduino Zero. Aspecto muy similiar a Arduino UNO, con la diferencia del potente microcontrolador que contiene, Atmel SAMD21 MCU. Básicamente se puede decir que está placa está recomendada para personas que con Arduino UNO comiencen a verse limitadas. Figura 6-8. Arduino Zero Arduino Ethernet. Se trata de un Arduino UNO con conectividad Ethernet. Figura 6-9. Arduino Ethernet Arduino Yun. Es la placa perfecta cuando se desea conectar dispositivos, en general proyectos basados en IoT. Combina la potencia de Linux con el fácil manejo de Arduino. Basado en ATmega32u4 y en el chip Atheros AR9331, que soporta la distribución de Linux basada en OpenWrt llamada OpenWrt-Yun. Es una placa muy parecida a Arduino UNO con la inclusión de conexión Ethernet, WiFi, USB y micro-SD.
Desarrollo Hardware 22 22 Figura 6-10. Arduino Yun Arduino Gemma. Es una placa miniatura realizada por Adafruit basada en el microcontrolador ATtiny85. Posee todo lo necesario, simplemente se conecta a la alimentación mediante un cable micro-USB o una batería (conector JST para una batería de 3.7 V) y ya se puede comenzar a realizar proyectos wearables. Posee 3 pines, dos pueden usarse como PWM y uno como analógico. Figura 6-11. Arduino Gemma. Arduino Lilypad. Este conjunto de placas miniatura están especialmente diseñadas para su uso en prendas y textiles. Se basa en dos versiones de microcontrolador diferentes, ATmega168V y ATmega328V, siendo la segunda más potente (5.5 V frente a los 2.7 V de la primera). Dispone de 14 pines digitales, 6 de ellos PWM, y 6 analógicos. Figura 6-12. Arduino Lilypad Materia 101. Aunque no es una placa, cabe hacer una mención a Materia 101, al ser la primera impresora 3D oficial de Arduino. Su diseño está apoyado sobre un Arduino Mega.
23 Control y supervisión mediante un sistema microcontrolador de los parámetros de calidad de agua de un estanque Figura 6-13. Materia 101 6.4 Arduino Mega La elección del Arduino Mega como núcleo de nuestro sistema ha sido debida principalmente al gran número de pines de los que dispone el mismo, aspecto que facilita una posible ampliación futura del sistema, añadiéndole más sensores o actuadores. También posee una gran capacidad de memoria, lo que permite que, en el caso de ampliarse en un futuro, se puedan incluir más variables al programa. [5] Las características más importantes de la placa Arduino Mega se pueden ver en la siguiente tabla: Tabla 6-2. Características principales Arduino Mega CARACTERÍSTICAS VALORES Microcontrolador ATmega2560 Tensión de alimentación 5 V Tensión de entrada recomendada 7-12 V Límite de entrada 6-20 V Pines digitales 54 (14 con PWM) Entradas analógicas 16 Corriente máxima por pin 40 mA Corriente máxima para el pin 3.3V 50 mA Memoria flash 256 KB SRAM 8 KB EEPORM 4 KB Velocidad de reloj 16 MHz
Desarrollo Hardware 30 30 Figura 6-20. Esquemático conexión potenciómetro Este rango de tensiones debe ser modificado ya el sensor de pH tiene un rango de tensión diferente a este. Su rango de salida de -414.12mV a 414.12mV. Como la simulación de tensiones negativas es problemática, se considerará un rango de salida de 0V a 828.24mV. Si se contara con el sensor, no habría que preocuparse de estas tensiones, ya que el sensor cuenta con una pequeña placa de circuito impreso que, situada entre éste y el Arduino, realiza las conversiones necesarias para su correcto funcionamiento. La forma de conseguir que, mediante el uso de un potenciómetro, se obtenga un valor de tensión a la entrada de Arduino como la proporcionada por el sensor es realizando el siguiente circuito, que conseguirá mediante la incorporación de una resistencia de valor fijo que el rango de tensión sea el deseado. Figura 6-21. Esquemático conexión potenciómetro con resistencia en serie De esta forma, la tensión a la entrada del Arduino (𝑉𝑖𝑛 ) tomaría el siguiente valor: 𝑉𝑖𝑛 =𝑅𝑝𝑜𝑡𝑒𝑛𝑐𝑖 ó𝑚𝑒𝑡𝑟𝑜 𝑅𝑝𝑜𝑡𝑒𝑛𝑐𝑖 ó𝑚𝑒𝑡𝑟𝑜 +𝑅𝑓𝑖𝑗𝑎 ·𝑉 𝑐𝑐 → 𝑅𝑓𝑖𝑗𝑎 =𝑅𝑝𝑜𝑡𝑒𝑛𝑐𝑖 ó𝑚𝑒𝑡𝑟𝑜 ·𝑉 𝑐𝑐 𝑉𝑖𝑛 − 𝑅𝑝𝑜𝑡𝑒𝑛𝑐𝑖 ó𝑚𝑒𝑡𝑟𝑜 Donde 𝑅𝑝𝑜𝑡𝑒𝑛𝑐𝑖 ó𝑚𝑒𝑡𝑟𝑜 = 1𝑘𝛺, 𝑉 𝑐𝑐 = 5𝑉y 𝑉𝑖𝑛 es 828.24mV. Conocidos estos datos se puede determinar el valor de la resistencia fija que se deberá colocar para llegar al rango de tensión deseado. 𝑅𝑓𝑖𝑗𝑎 𝑝𝐻 =1𝑘𝛺 · 5𝑉 828.24𝑚𝑉 −1𝑘𝛺 = 5𝑘𝛺
31 Control y supervisión mediante un sistema microcontrolador de los parámetros de calidad de agua de un estanque La resistencia que se usará en el montaje tendrá un valor de 4.7k𝛺, lo que hará que el valor aportado por el potenciómetro no sea exactamente el mismo que el sensor, pero sí sea bastante similar. 6.5.4 Sensor de conductividad La empresa DFRobot ha desarrollado el sensor DFR0300, que es un sensor analógico de conductividad para su uso con Arduino. La conductividad es la habilidad de una sustancia de conducir la corriente, y su medida en el sistema internacional son los Siemens/metro, S/m. También es común ver otras unidades como mS/cm o µS/cm. [10] Los valores característicos más importantes de este sensor son los siguientes: Tabla 6-8. Características principales sensor de conductividad Especificaciones Valores Tensión de operación 5V Rango de medida 1mS/cm – 20mS/cm Precisión ±10% Este dispositivo incluye un electrodo que mide la conductividad con una conexión BNC a una placa PCB que sirve como etapa de procesamiento de datos antes de la lectura del Arduino. Además cuenta con un sensor de temperatura DS18B20, explicado anteriormente. Figura 6-22. Esquema de conexión sensor de conductividad Aunque este sensor incluya un hardware y un software que te permite hallar el valor de la conductividad sin apenas complicación, sería conveniente conocer los principios teóricos y la relación que guarda la conductividad con la tensión dada por el sensor. En el esquemático, la función de transferencia del chip U3B es la siguiente: 𝑉0=𝑅10 𝑅·𝑉𝑖 Donde 𝑅10 es una resistencia de realimentación cuyo valor es 820Ω. La resistencia R es la que surge al introducir el electrodo en el agua, relacionada con la conductividad de la siguiente manera: 𝑅=𝜌𝐿 𝐴
Desarrollo Hardware 32 32 Siendo 𝜌 la resistividad, L la distancia entre las dos láminas conductoras, y A el área enfrentada entre ellas. La conductividad es inversamente proporcional a la resistividad: 𝑘=1 𝜌=1 𝑅·𝐿 𝐴 A la relación 1/R se le denomina conducción G, y a la relación que L/A constante de Vessel Q. 𝑘=𝐺·𝑄 Con los cálculos anteriormente realizados se puede llegar a la ecuación que dará el valor de la conductividad en función de la tensión medida: 𝑘=𝑄 𝑅10 ·𝑉𝑖𝑛 ·𝑉𝑜𝑢𝑡 La constante de Vessel es diferente para cada electrodo. En la documentación proporcionada por el fabricante puede verse como para una 𝑉𝑜𝑢𝑡 de 209mV, el valor de la conductividad es 1.41mS/cm. Haciendo uso de esta relación y sabiendo que 𝑉𝑖𝑛 puede aproximarse a una constante de valor 200mV se puede hallar el valor de la constante de Vessel: 𝑄=𝑘·𝑅10 ·𝑉𝑖𝑛 𝑉𝑜𝑢𝑡 =1106.41 𝑚𝑆 ·Ω 𝑐𝑚 Quedando finalmente la siguiente relación lineal que guarda la conductividad con la tensión medida. 𝑘= 6.746411 ·10−3·𝑉𝑜𝑢𝑡 Por tanto el sensor tendrá un rango de salida de 1mS/cm: 1𝑚𝑆 𝑐𝑚 6.746411 ·10−3=148.24𝑚𝑉 20mS/cm: 20𝑚𝑆 𝑐𝑚 6.746411 ·10−3= 2.965𝑉 Al igual que pasa con el sensor de pH, tampoco se dispone en el presente proyecto del sensor de conductividad, por lo que también se simulará su funcionamiento mediante el uso de un potenciómetro. De forma análoga a lo explicado antes con el sensor de pH, el circuito que resultaría para simular el sensor sería el siguiente: A la hora de trabajar con Arduino consideraremos un rango de salida de 0 a 2.965V. De esta forma, la tensión a la entrada del Arduino (𝑉𝑖𝑛 ) tomaría el siguiente valor:
33 Control y supervisión mediante un sistema microcontrolador de los parámetros de calidad de agua de un estanque 𝑉𝑖𝑛 =𝑅𝑝𝑜𝑡𝑒𝑛𝑐𝑖 ó𝑚𝑒𝑡𝑟𝑜 𝑅𝑝𝑜𝑡𝑒𝑛𝑐𝑖 ó𝑚𝑒𝑡𝑟𝑜 +𝑅𝑓𝑖𝑗𝑎 ·𝑉 𝑐𝑐 → 𝑅𝑓𝑖𝑗𝑎 =𝑅𝑝𝑜𝑡𝑒𝑛𝑐𝑖 ó𝑚𝑒𝑡𝑟𝑜 ·𝑉 𝑐𝑐 𝑉𝑖𝑛 − 𝑅𝑝𝑜𝑡𝑒𝑛𝑐𝑖 ó𝑚𝑒𝑡𝑟𝑜 Donde 𝑅𝑝𝑜𝑡𝑒𝑛𝑐𝑖 ó𝑚𝑒𝑡𝑟𝑜 = 1𝑘𝛺, 𝑉 𝑐𝑐 = 5𝑉y 𝑉𝑖𝑛 2.965V. Conocidos estos datos se puede determinar el valor de la resistencia fija que se deberá colocar para llegar al rango de tensión deseado. 𝑅𝑓𝑖𝑗𝑎 𝐸𝐶 =1𝑘𝛺 · 5𝑉 2.965𝑉−1𝑘𝛺 =686.3𝛺 La resistencia que se usará en el montaje tendrá un valor de 680𝛺, lo que hará que el valor aportado por el potenciómetro no sea exactamente el mismo que el sensor, pero sí sea bastante similar. 6.6 Otros elementos del montaje 6.6.1 Teclado 4x4 Un teclado no es más que una colección de botones, a cada uno de los cuales le asignamos un símbolo o una función determinada. Para que nuestro Arduino pueda saber que tecla se pulsa, basta con poner tensión en las filas de forma secuencial y luego leer las columnas para ver cuál de ellas tiene HIGH.Los teclados matriciales usan una combinación de filas y columnas para conocer el estado de los botones. Cada tecla es un pulsador conectado a una fila y a una columna. Cuando se pulsa una de las teclas, se cierra una conexión única entre una fila y una columna. Por ejemplo, ponemos HIGH en la primera fila (hilo 8 en el diagrama de la derecha) y después leemos sucesivamente los hilos correspondientes a las columnas (hilos 4, 3, 2,1). Si ninguno está en HIGH es que no se ha pulsado ninguna tecla de la primera fila. Pasamos a la segunda fila (hilo 7) y ponemos HIGH, si al leer los hilos 4, 3, 2,1 encontramos que el hilo 1 está en HIGH, es que se ha pulsado la tecla correspondiente a la “B”. Figura 6-23. Pinout teclado 4x4
Desarrollo Hardware 34 34 La conexión con el Arduino no tiene ninguna complicación, simplemente hay que conectarlo a ocho pines digitales de Arduino. [11] Figura 6-24. Conexión teclado 4x4 a Arduino 6.6.2 Display LCD 16x2 Como necesidad principal del presente proyecto, está la de proporcionar información al usuario sobre los parámetros que se están controlando en el acuario, para ello se usará un display LCD 16x2, es decir, dieciséis caracteres y dos líneas. [12] La conexión con el Arduino es relativamente sencilla, a pesar de la gran cantidad de conexiones a realizar, como puede verse en la siguiente imagen. Figura 6-25. Pinout display LCD 16x2 A pesar de que el Arduino Mega cuenta con una gran cantidad de pines, como mejora a la conexión anteriormente propuesta, se usará una conexión mediante comunicación I2C que hará que pasemos de 16 pines a un total de 4, que serán VCC, GND, SDA y SCL. Este modo de comunicación será posible gracias a un
35 Control y supervisión mediante un sistema microcontrolador de los parámetros de calidad de agua de un estanque módulo I2C. Esta comunicación será explicada en más detalle en un anexo del trabajo. Figura 6-26. Modulo I2C del display LCD 16x2 6.7 Actuadores Como se expuso anteriormente en el apartado de estudios previos, necesitaremos 6 actuadores que se conectarán a nuestro Arduino: resistencia calefactora, ventilador, iluminación, válvula de CO₂, bomba de llenado y bomba de vaciado. [13] 6.7.1 Resistencia calefactora Calcular correctamente la potencia que necesita una resistencia para calentar un acuario no resulta sencillo. En ello intervienen el volumen del tanque, la oxigenación del mismo y sobretodo la temperatura exterior al acuario. Por convención, siempre se ha dicho que debe usarse un vatio (W) por litro de tanque. Para hacernos una idea, esto supone, por ejemplo, una resistencia calefactora de 100W de potencia en un acuario de 100L. Si en pleno invierno, nuestra estancia donde está el acuario se encuentra a 10º C, nuestro tanque de cien litros necesitará algo más de 100W. Si la calefacción central del domicilio se pone en funcionamiento alcanzando el ambiente los 21ºC durante la noche, con unos 30W tendríamos suficiente para alcanzar los 25-28ºC de un acuario tropical. Litros Temperatura mínima estancia (ºC) Potencia (W) 100 5 150 100 12 100 100 17 75
Desarrollo Hardware 36 36 Figura 6-27. Resistencia calefactora Otra opción para calentar el agua podría ser un cable calefactor, que consiste en una resistencia de filamento recubierta por silicona. Es totalmente sumergible y muy manejable lo que nos permite instalarlo haciendo zigzag en el fondo del tanque. Algunos incluyen un grupo de pinzas con ventosa para fijarlas al cristal del fondo del acuario, otra opción es añadir una rejilla a la que fijar el cable como se puede ver en la imagen. Figura 6-28. Montaje cable calefactor 6.7.2 Ventilador El principal causante del aumento de la temperatura del agua en un acuario, aunque parezca extraño, no es la temperatura exterior, sino la iluminación que tenemos sobre nuestro acuario, causando una alta temperatura sobre la superficie que hace que el agua se caliente. El método más económico para conseguir reducir la temperatura del acuario es el uso de un ventilador (dependiendo de la potencia necesaria pueden usarse varios). Con esto se consigue que la temperatura se renueve constantemente. Pueden usarse tanto ventiladores que se puedan encontrar por el hogar apuntando en la dirección adecuada, como dispositivos diseñados específicamente para el uso en acuarios.
37 Control y supervisión mediante un sistema microcontrolador de los parámetros de calidad de agua de un estanque Figura 6-29. Opciones para disminuir la temperatura en un acuario 6.7.3 Iluminación Cuando hablamos de necesidades de iluminación para nuestro acuario, nos referimos a la cantidad de luz que emiten las lámparas y a la vez a su calidad. Las plantas necesitan una intensidad suficiente para poder realizar la fotosíntesis, y una calidad de luz que se asemeje lo máximo posible a la que emite nuestro sol. En cuanto a intensidad, surge la pregunta de, ¿qué intensidad tiene que tener la iluminación de mi acuario? Todo depende de las plantas que queramos meter y del tipo de iluminación que tengamos. Básicamente podemos agrupar los tipos de iluminación en dos tipos, fluorescencia y LEDs. A continuación va a explicarse únicamente la iluminación LED, ya que es la más utilizada. Para este tipo de iluminación la forma de medir la intensidad es mediante la cantidad de lúmenes por litro, y puede clasificarse de la siguiente manera. Tabla 6-9. Clasificación intensidad de la luz Nivel de iluminación Cantidad de lúmenes por litro Iluminación baja 0-15 lúmenes/litro Iluminación media 15-25 lúmenes/litro Iluminación alta 25-35 lúmenes/litro Iluminación muy alta >35 lúmenes/litro Las diferencias entre la iluminación LED y fluorescente son varias, como la eficiencia, siendo la iluminación LED mucho más eficiente, por lo que consiguen la misma potencia lumínica con menos potencia eléctrica. Otra ventaja de los LEDs es que emiten en una única dirección, no siendo necesario añadir elementos para reflejar la luz y así no tener que desperdiciar rayos de luz. Como inconveniente, el precio es mayor, aunque debido a su rendimiento y su larga vida útil, la amortización es casi inmediata.
Desarrollo Hardware 38 38 Figura 6-30. Panel iluminación LED 6.7.4 Bomba de llenado y bomba de vaciado Para llenar y vaciar el acuario usaremos dos bombas de agua sumergibles, una para realizar el llenado y otra para el vaciado. El funcionamiento de la bomba de agua es sencillo, se coloca dentro del agua, y esta, a través de un tubo del tamaño deseado, bombea el agua hacia el exterior (donde coloquemos el extremo del tubo). Una vez explicado esto, el montaje en nuestro sistema será el siguiente: una bomba será colocada en el interior del acuario y otra en un pequeño tanque de agua exterior al acuario. La bomba interior, cuando se active la señal que avisa que hemos superado el nivel fijado, se activará comenzando a vaciar el acuario hasta que vuelva de nuevo a ese nivel. La bomba exterior tendrá que activarse cuando el nivel medido esté por debajo del deseado, comenzando así a bombear el agua del tanque exterior al acuario. Figura 6-31. Bomba de agua sumergible
39 Control y supervisión mediante un sistema microcontrolador de los parámetros de calidad de agua de un estanque 6.7.5 Válvula de CO₂ Existen diversos métodos caseros para añadir CO₂ al acuario, pero sin duda lo más recomendable es contar con un sistema profesional para ello, que nos permitirá controlar con exactitud la cantidad de burbujas que se añaden al acuario. Estos sistemas son los más beneficiosos para el acuario, porque gracias a su aportación constante, consiguen que las plantas siempre tengan la misma cantidad de CO₂ disponible para realizar la fotosíntesis, así como aseguran la estabilización del pH en niveles un poco ácidos, facilitando la absorción de nutrientes de las plantas del acuario. Un sistema profesional de CO₂ cuenta con, al menos, los siguientes componentes: Bombona de CO₂: pueden ser de diferentes volúmenes. Y existen tanto bombonas desechables como recargables. Figura 6-32. Bombona CO₂ Manoreductor con manómetro: debido a que el CO₂ dentro de la bombona está a una alta presión necesitamos este aparato para disminuirla y poder enviarla al acuario sin peligro. Gracias a la válvula de regulación y a los manómetros, podemos visualizar la presión y ajustar el flujo de CO₂ que sale de la bombona. Figura 6-33. Manoreductor con manómetro
Desarrollo Hardware 46 46 D9 Actuador Electroválvula de CO₂ A2 Sensor Potenciómetro que simula el sensor de conductividad A3 Sensor Potenciómetro que simula el sensor de pH D30-D37 Entrada Teclado matricial 4x4 D22 Sensor Boya de nivel mínimo D23 Sensor Boya de nivel máximo GND, 5V Alimentación Todos D20 Serial Data Display LCD 16x2 D21 Serial Clock Display LCD 16x2 6.10 Diseño del PCB Una vez probado en la placa de pruebas el correcto funcionamiento del proyecto, se procede a diseñar un pequeño circuito en PCB donde se ubicarán los componentes situados sobre la placa de pruebas. Para ello se hará uso de un software gratuito llamado Eagle. [16] Figura 6-44. Esquemático completo en Eagle Tras realizarse el esquemático y las pertinentes conexiones en Eagle, se procede a la colocación y conexión de los componentes sobre la placa PCB de la siguiente manera
47 Control y supervisión mediante un sistema microcontrolador de los parámetros de calidad de agua de un estanque Figura 6-45. Diseño layout del circuito. Tras varias pruebas se consigue una colocación adecuada de los componentes como se muestra en la anterior figura. El siguiente paso es eliminar las capas no necesarias y dejar solo los pads y las vías, para continuar con el proceso de fabricación de la placa PCB. Figura 6-46. Diseño layout del circuito mostrando solo vías y pads Ya que los componentes utilizados no son demasiados, basta con el uso de una sola capa para su diseño, capa
Desarrollo Hardware 48 48 bottom. Para facilitar el proceso de fabricación del PCB y que el diseño sea más robusto, se añade un plano de tierra, quedando de la siguiente manera. Figura 6-47. Diseño layout del circuito con el plano de tierra añadido 6.10.1 Proceso de fabricación del PCB El método utilizado para la fabricación del PCB es la fotolitografía. Los pasos de este método de fabricación son los siguientes: 1. Se imprime el PCB en papel de acetato, en nuestro caso la cara bottom. 2. El siguiente paso es preparar las disoluciones para el revelado de la placa: para preparar el líquido revelador se disuelve una cucharada de bicarbonato de sodio en un litro de agua; para el líquido atacante la proporción será 100cc de agua fuerte, 100cc de agua oxigenada y 100cc de agua. 3. Después de tener listas las disoluciones, se comienza a revelar el PCB. Se hace uso de una insoladora de rayos UVA que elimina la resina de aquellas zonas expuestas directamente a la luz. En un ambiente lúgubre, se despega la cubierta adhesiva de la placa para dejar al descubierto su cara fotosensible, colocada hacia arriba, superponiendo el papel de acetato con el circuito impreso, teniendo cuidado de colocarlo de la forma correcta. En la placa aparece el circuito que ve directamente el observador. Después, se hace el vacío y durante aproximadamente 3 minutos se deja actuar la radiación, este proceso se vuelve a repetir para la otra cara de la placa con cuidado de no mover el papel de acetato para que los pasos de cara coincidan. 4. Una vez sacada la placa, ésta se sumerge en el líquido revelador, que actuará de capa protectora sobre las zonas de la placa que no han sido insoladas; tras varios minutos se saca de la disolución y se enjuaga. 5. Justo después se introduce en el líquido atacante, tras varios minutos se enjuaga y se seca. El líquido revelador es reutilizado, pero el líquido atacante pierde su poder corrosivo por lo que se deposita en un recipiente para su correspondiente tratado. 6.10.2 Montaje de los componentes Antes de taladrar la placa hay que retirar la resina que protege al cobre de su oxidación, para ello se utiliza
49 Control y supervisión mediante un sistema microcontrolador de los parámetros de calidad de agua de un estanque acetona. Esto facilita que el estaño se adhiera correctamente. Después de esto, se taladra la placa para conseguir soldar los componentes THD, que en nuestro montaje son todos. La soldadura que se realizará será manual, con estaño para facilitar la soldadura de los componentes a la placa. Las soldaduras se realizarán de menor a mayor tamaño, evitando que los componentes más grandes dificulten las demás soldaduras. Una vez fabricada la placa PCB, bastaría con sustituirla por la placa de pruebas mostrada en la Figura 6-43. De esta forma se consigue más robustez en el diseño.
7 DESARROLLO SOFTWARE 7.1 IDE Arduino Las siglas IDE significan entorno de desarrollo integrado, y puede definirse como la herramienta que nos permite desarrollar nuestras aplicaciones de una manera cómoda, ofreciendo ayudas en cuanto a la sintaxis, plantillas y opciones para depurar. Un IDE debe tener una serie de características, entre las que destacan: multiplataforma, soporte para diversos lenguajes de programación, reconocimiento de sintaxis y capacidad de importar y exportar proyectos. A continuación se hará un pequeño resumen del IDE estándar de Arduino, aunque existen otras muchas alternativas posibles, como Fritzing, a la que se hará referencia después. El IDE oficial de Arduino posee una interfaz muy sencilla e intuitiva, en la cual se pueden apreciar diversas zonas: [17] Figura 7-1. Interfaz gráfica del IDE Arduino
Desarrollo Software 52 52 1. Menú. En esta barra se encuentran muchas funciones como la carga de un fichero, las librerías, ejemplos, selección de la placa usada y el puerto por el que se comunica etc. Figura 7-2. Menú del IDE de Arduino 2. Menú de acceso rápido. Botones con las funciones más usadas del IDE. Según el orden en el que aparecen en la imagen son: i. Verificar. Comprueba la sintaxis del programa y si es posible su funcionamiento. ii. Subir. Carga el programa en la placa. iii. Nuevo. Crea un nuevo sketch. iv. Abrir. Abre el archivo deseado. v. Salvar. Guarda el código en la ruta especificada. vi. Monitor serie. Abre una ventana donde aparece la comunicación con la placa Arduino. Muy útil a la hora de depurar código. Figura 7-3. Menú de acceso rápido del IDE de Arduino 3. Editor de texto. En este cuadro se puede editar el código. Figura 7-4. Editor de texto del IDE de Arduino. 4. Panel de mensajes. Aparecen mensajes como el proceso de compilación o si ha ocurrido algún error. En la imagen anterior se ha incluido la línea “led” para observar como devuelve el fallo al intentar su compilación.
53 Control y supervisión mediante un sistema microcontrolador de los parámetros de calidad de agua de un estanque Figura 7-5. Mensaje de compilación del IDE de Arduino Figura 7-6. Mensaje de error del IDE de Arduino 5. Consola. Muestra la misma información que la zona de mensajes pero con más detalle. En la imagen puede verse el error que produce la línea “led”. Figura 7-7. Consola del IDE de Arduino 7.2 Programa de control utilizado En esta sección se explicará sin entrar en demasiado detalle el programa usado, diferenciando las funciones creadas específicamente para este proyecto, y las que se han tomado de librerías predefinidas o creadas previamente por otros diseñadores. 7.2.1 Funciones creadas En el código pueden diferenciarse cuatro tipos de funciones que se explicarán a continuación: Inicialización. Manejo de los menús (display). Funciones usadas para fijar parámetros. Lectura de sensores. Comunicación con el puerto serie. Antes de comenzar a explicar a grandes rasgos el funcionamiento del programa, hay que destacar que se apoyará en el uso de un Display LCD y un teclado 4x4 para así dar la posibilidad de interactuar al usuario, esto hay que tenerlo en cuenta para la comprensión de lo que se explicará a continuación. 7.2.1.1 Inicialización y menús La estructura de programación de Arduino consta de dos funciones imprescindibles para el funcionamiento de este. Se trata de la función setup y la función loop. La primera de ellas inicializa el programa, se ejecuta una sola vez al comenzar el programa. La segunda será donde se encuentre el código a ejecutar y se repetirá de manera cíclica, de ahí su nombre. En nuestra función setup se encontrará la inicialización de la comunicación con el display LCD, con el puerto serie (usado principalmente para la depuración del código) y con el sensor de temperatura DS18B20. También se fijarán los pines del Arduino como entrada o salida según vayan a usarse. Por último muestra en pantalla un mensaje de bienvenida y llama a la función “menuInicio”, donde entraría automáticamente al modo lectura, donde continuamente leería los parámetros que son de interés (se explicará más adelante en detalle). De este modo de lectura se saldría pulsando la tecla A. Una vez pulsada, se mostraría el menú inicial ofreciendo la posibilidad de modificar los parámetros, visualizarlos, o bien entrar en modo lectura de nuevo.
Desarrollo Software 54 54 Figura 7-8. Diagrama de flujo del menú de inicio Al arrancar nuestro sistema, se entraría automáticamente en el modo lectura donde, como se ha comentado antes, se leen los parámetros de importancia. Esta lectura se realiza en bucle hasta que se pulse la tecla A. Figura 7-9. Diagrama de flujo del “modo lectura” Los parámetros de importancia son: Lectura de la temperatura a través del sensor DS18B20. Lectura del nivel de llenado mediante las boyas de nivel máximo y mínimo. Lectura del pH a través del potenciómetro que simula el sensor.
55 Control y supervisión mediante un sistema microcontrolador de los parámetros de calidad de agua de un estanque Lectura de la conductividad a través del potenciómetro que simula el sensor (y posterior conversión para saber el nivel de dureza). Lectura del puerto serie. A través del monitor serie pueden visualizarse los parámetros deseados, introduciendo la tecla correspondiente a cada parámetro. o Tecla „t‟. Se muestra la temperatura medida y la temperatura fijada. o Tecla „p‟. Se muestra el nivel de pH medido. o Tecla „d‟. Se muestra el nivel de conductividad que proporciona el potenciómetro y el nivel de dureza en distintos sistemas de medida. o Tecla „n‟. Se muestra si el nivel de agua es el correcto, es superior al máximo o inferior al mínimo. o Tecla „l‟. Se muestra el número de horas fijadas para la iluminación. o Tecla „c‟. Se muestra el número de horas fijadas para la electroválvula de CO₂. Lectura del tiempo transcurrido para la luz. Lectura del tiempo transcurrido para la electroválvula.
Desarrollo Software 62 62 7.2.2.1 Librería Wire.h Esta librería te permite comunicarte con dispositivos que usan la comunicación I2C. Tabla 7-1. Funciones de la librería Wire.h y su descripción Funciones Breve descripción void begin(); void begin(uint8_t); void begin(int); Inicializa la librería y enlaza el bus I2C como maestro o esclavo. Normalmente solo se realiza esta llamada una vez. uint8_t requestFrom(uint8_t, uint8_t); uint8_t requestFrom(int, int); Usado por el maestro para pedir bytes de un dispositivo esclavo. Tiene como parámetro la dirección y la cantidad de bytes. void beginTransmission(uint8_t); void beginTransmission(int); Comienza una transmisión con el esclavo pasándole su dirección como parámetro. uint8_t endTransmission(void); Finaliza la transmisión con un esclavo tras haber sido iniciada con beginTransmission. virtual size_t write(uint8_t); virtual size_t write(const uint8_t *, size_t); Escribe datos de un esclavo en respuesta a la llamada del maestro o virtual int available(void); Devuelve el número de bytes disponibles para recuperar con read. virtual int read(void); Lee un byte que fue transmitido de un esclavo al maestro después de la llamada de requestFrom. void onReceive( void (*)(int) ); Registra una función a ser llamada cuando un esclavo recibe una transmisión del maestro. void onRequest( void (*)(void) ); Registra una función a ser llamada cuando el maestro solicita datos del esclavo. 7.2.2.2 Librería LCD.h Tabla 7-2. Funciones de la librería LCD.h y su descripción Funciones Breve descripción void setBacklight(boolean on, int minutesOn); Enciende o apaga la iluminación de fondo.
63 Control y supervisión mediante un sistema microcontrolador de los parámetros de calidad de agua de un estanque void setBrightness(int brightness); Fija el brillo deseado para el LCD. void clearScreen(); Deja la pantalla vacía. void drawPixel(int x, int y); void drawRect(int color, int x1, int y1, int x2, int y2); void fillRect(int color, int x1, int y1, int x2, int y2); void drawLine(int x1, int y1, int x2, int y2); void continueLine(int x, int y); void drawText(int x, int y, String text); Sirven todas para “dibujar” en el LCD, tanto píxeles, rectas, o texto. void resetCursor(); Devuelve el cursor a la posición por defecto. void setCursor(int x, int y); Sitúa el cursor en una posición. 7.2.2.3 Librería LyquidCrystal_I2C.h Tabla 7-3. Funciones de la librería LyquidCrystal_I2C.h y su descripción Funciones Breve descripción LiquidCrystal_I2C (const char *dev, uint8_t lcd_Addr); LiquidCrystal_I2C(const char *dev, uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs); LiquidCrystal_I2C(const char *dev, uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 ); Inicializa las variables y define la dirección I2C del LCD. virtual void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS); Inicializa el LCD para una dimensión fija. virtual void send(uint8_t value, uint8_t mode); Envía un valor particular al LCD para que se muestre o como comando. void setBacklightPin ( uint8_t value, t_backlighPol pol ); Fija un pin en el dispositivo para controlar la luz de fondo. void setBacklight ( uint8_t value ); Enciende o apaga la luz de fondo.
Desarrollo Software 64 64 int init(); Enciende la clase LCD y el módulo IO. void config (const char *dev, uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 ); Para inicializar variables privadas. void write4bits(uint8_t value, uint8_t mode); Escribe 4 bits (los menos significativos) al control de líneas de datos del LCD. void pulseEnable(uint8_t); Envía un pulso de 1µs para el pin de activación para ejecutar un comando o escribir una operación. 7.2.2.4 Librería stdlib.h Tabla 7-4. Funciones de la librería stdlib.h y su descripción Funciones Breve descripción int atoi(const char *str); Convierte una cadena de caracteres a un entero. 7.2.2.5 Librería Keypad.h Tabla 7-5. Funciones de la librería Keypad.h y su descripción Funciones Breve descripción void begin(makeKeymap(userKeymap)); Inicializa el mapa de teclas interno para ser igual que userKeymap. char waitForKey(); Espera hasta que se pulse una tecla. Precaución: el código no se ejecuta hasta que no se presione alguna tecla. char getKey(); Devuelve la tecla pulsada, si no se pulsa ninguna no devuelve. KeyState getState(); Devuelve el estado de una tecla, es decir, si está pulsada o no. boolean KeyStateChanged(); Permite conocer cuando una tecla cambia de estado. setHoldTime(unsigned int time); Fija el tiempo que el usuario debe mantener pulsada la tecla para activarse. setDebounceTime(unsigned int time); Fija el tiempo que el teclado esperará hasta una nueva pulsación. addEventListener(keypadEvent); Provoca un evento si el teclado es
65 Control y supervisión mediante un sistema microcontrolador de los parámetros de calidad de agua de un estanque usado. 7.2.2.6 Librería OneWire.h Tabla 7-6. Funciones de la librería OneWire.h y su descripción Funciones Breve descripción OneWire myWire(pin); Crea un objeto OneWire, usando un pin específico. myWire.search(addrArray); Busca el siguiente dispositivo. Devuelve la cadena de 8 bits y verdadero si se ha encontrado un dispositivo y falso si no ha encontrado. myWire.reset_search(); Comienza una nueva búsqueda. El siguiente uso de search empezará con el primer dispositivo. myWire.reset(); Resetea el bus OneWire, suele ser necesario antes de iniciar la comunicación con cualquier dispositivo. myWire.select(addrArray); Selecciona un dispositivo que tenga la dirección pasada como parámetro. myWire.skip(); Salta la selección del dispositivo, se realiza cuando solo se tiene un dispositivo. myWire.write(num); myWire.write(num, 1); La primera instrucción escribe un byte. La segunda, después de escribir un byte, mantiene potencia aplicada al bus. myWire.read(); Lee un bit. myWire.crc8(dataArray, length); Computa un código de redundancia cíclico en una cadena de datos. 7.2.2.7 Librería DallasTemperature.h Tabla 7-7. Funciones de la librería DallasTemperature.h y su descripción Funciones Breve descripción DallasTemperature(myWire); void begin(void); Inicializa el bus. uint8_t getDeviceCount(void); Devuelve el número de dispositivos en el bus. bool validAddress(const uint8_t*); Devuelve verdadero si la dirección es
Desarrollo Software 66 66 válida. bool validFamily(const uint8_t* deviceAddress); Devuelve verdadero si la dirección es de la familia de sensores soportados por la librería. bool getAddress(uint8_t*, uint8_t); Encuentra una dirección en un índice dado en el bus. bool isConnected(const uint8_t*); Determina si el dispositivo asociado a esa dirección está conectado. bool readScratchPad(const uint8_t*, uint8_t*); void writeScratchPad(const uint8_t*, const uint8_t*); Lee o escribe dispositivos en el listado de dispositivos. bool readPowerSupply(const uint8_t*); Lee los requisitos de potencia del dispositivo. uint8_t getResolution(); void setResolution(uint8_t); Fija o devuelve la resolución global a 9, 10, 11, o 12 bits. uint8_t getResolution(const uint8_t*); bool setResolution(const uint8_t*, uint8_t, bool skipGlobalBitResolutionCalculation = false); Fija o devuelve la resolución de un sensor específico a 9, 10, 11, o 12 bits. void requestTemperatures(void); Envía un comando para todos los dispositivos para comenzar la conversión de temperatura. bool requestTemperaturesByAddress(const uint8_t*); Envía un comando para un dispositivo para comenzar la conversión de temperatura según la dirección. bool requestTemperaturesByIndex(uint8_t); Envía un comando para un dispositivo para comenzar la conversión de temperatura según el índice. int16_t getTemp(const uint8_t*); float getTempC(const uint8_t*); float getTempF(const uint8_t*); Devuelve la temperatura en un entero de 12 bits, en grados C o grados F. float getTempCByIndex(uint8_t); float getTempFByIndex(uint8_t); Devuelve la temperatura en grados C o F, según el índice del dispositivo introducido como parámetro. bool isParasitePowerMode(void); Devuelve verdadero si el bus requiere alimentación parásita. bool isConversionAvailable(const uint8_t*); Devuelve verdadero si la conversión
67 Control y supervisión mediante un sistema microcontrolador de los parámetros de calidad de agua de un estanque bool isConversionComplete(void); está disponible o está completada.
8 PRUEBAS REALIZADAS En este capítulo se comentarán las pruebas más relevantes que se han realizado durante el desarrollo del proyecto, para comprobar su correcto funcionamiento. Se explicará por separado tanto el funcionamiento del sensor de temperatura, de las boyas de nivel, y la simulación de los sensores de pH y conductividad mediante el uso de potenciómetros. 8.1 Prueba 1. Correcto encendido del sistema 8.1.1 Descripción general Al conectar nuestro Arduino el sistema deberá arrancar de la manera esperada, esto se aprecia si en el display aparece un mensaje de bienvenida y posteriormente la opción de fijar parámetros o mostrarlos, quedando a la espera de escoger uno de estas opciones a través del teclado. 8.1.2 Procedimiento detallado para la comprobación I. Realizar el montaje completo del sistema mostrado en el capítulo “desarrollo hardware”. II. Conectar la alimentación al Arduino. 8.1.3 Resultado Se comprueba el correcto encendido del display visualizando de manera correcta el mensaje de bienvenida y, posteriormente, menú principal. 8.2 Prueba 2. Activación correcta de la iluminación 8.2.1 Descripción general La activación de la iluminación implica introducir mediante el teclado el número de horas que estará encendida. La forma de comprobarlo será introduciendo por teclado el número de horas de encendido y comprobar que el LED que simula la iluminación se encienda y se apague durante ese rango horario. 8.2.2 Procedimiento detallado para la comprobación I. Realizar el montaje completo del sistema mostrado en el capítulo “desarrollo hardware”. II. Conectar la alimentación al Arduino. III. Navegar en el menú hasta la opción de fijar iluminación, dentro del menú fijar parámetros. IV. Una vez seleccionada esta opción, fijar un número de horas para el encendido de la iluminación. 8.2.3 Resultado Fijado el intervalo de tiempo para el encendido de la iluminación, basta comprobar que, pasado ese tiempo, el estado de la iluminación cambia de encendido a apagado. 8.3 Prueba 3. Activación correcta de la electroválvula de CO₂ 8.3.1 Descripción general Al igual que para la iluminación, la válvula de CO₂ se activará un periodo de tiempo introducido por el usuario mediante el teclado. Por tanto se comprobará de la misma manera que la activación de la iluminación.
Pruebas realizadas 70 70 8.3.2 Procedimiento detallado para la comprobación I. Realizar el montaje completo del sistema mostrado en el capítulo “desarrollo hardware”. II. Conectar la alimentación al Arduino. III. Navegar en el menú hasta la opción de fijar CO₂, dentro del menú fijar parámetros. IV. Una vez seleccionada esta opción, fijar un número de horas para el encendido de la electroválvula. V. Ya fijado este intervalo de tiempo para el encendido de la electroválvula de CO₂, basta comprobar que pasado ese tiempo, el estado de la electroválvula cambia de encendido a apagado. 8.3.3 Resultado Fijado el intervalo de tiempo para el encendido de la electroválvula de CO₂, basta comprobar que, pasado ese tiempo, el estado de la electroválvula cambia de encendido a apagado. 8.4 Prueba 4. Lectura correcta de los potenciómetros que simulan el sensor de pH y el sensor de conductividad 8.4.1 Descripción general Para comprobar que el potenciómetro que se usará para simular tanto el sensor analógico de pH como el de conductividad funcionan de manera correcta se mostrará por pantalla periódicamente el valor en tensión a la salida del potenciómetro, y su equivalente en la escala de pH o en mS/cm, comprobando con la tabla teórica que los valores son los correctos. 8.4.2 Procedimiento detallado para la comprobación I. Conectar, tal y cómo se explica en el capítulo “desarrollo hardware”, los potenciómetros que simularán los sensores de conductividad y pH. II. Conectar la alimentación al Arduino. III. Ejecutar el script de prueba de lectura de potenciómetro. IV. Comprobar girando el potenciómetro que los valores medidos se corresponden con los esperados. 8.4.3 Resultado Como las resistencias que se han usado para ponerlas en serie con los dos potenciómetros tienen un valor aproximado al valor exacto que debieran tener, es normal que a la hora de comprobar las salidas de ambos potenciómetros no salgan exactamente los mismos valores extremos. Lo primero que hay que tener en cuenta es la resolución del Arduino utilizado, en nuestro caso es un Arduino Mega, que es de 10 bits. Esto quiere decir que las tensiones de 0 a 5V que entrarán a Arduino serán convertidas a valores enteros entre 0 y 1023, o lo que es lo mismo, podemos leer tensiones de 0 a 5V con saltos de 5𝑉 1024 = 0.049𝑉= 4.9𝑚𝑉. Por lo que, en nuestro código, para hallar la tensión proporcionada por el potenciómetro, tendremos que realizar la siguiente conversión, tanto para el sensor de conductividad como el de pH. 𝑇𝑒𝑛𝑠𝑖ó𝑛 𝑙𝑒í𝑑𝑎 =𝑆𝑎𝑙𝑖𝑑𝑎 𝑝𝑜𝑡𝑒𝑛𝑐𝑖ó𝑚𝑒𝑡𝑟𝑜 · 5 1023 Tras hallar esta tensión, hay que calcular el valor tanto en mS/cm como en la escala natural del pH realizando las siguientes operaciones. Para la conductividad, como ya se ha comentado cuando se habló de este sensor, la relación que guarda el valor de la conductividad con la tensión proporcionada es una tensión lineal que sigue la siguiente relación:
71 Control y supervisión mediante un sistema microcontrolador de los parámetros de calidad de agua de un estanque 𝑘= 6.746411 ·10−3·𝑉𝑜𝑢𝑡 ,𝑚𝑒𝑑𝑖𝑑𝑎 𝑒𝑛 𝑆/𝑐𝑚 En nuestro código se llevará a cabo la siguiente conversión y se indicará que la medida está en mS/cm: 𝑘= 6.746411 ·𝑉𝑜𝑢𝑡 ,𝑚𝑒𝑑𝑖𝑑𝑎 𝑒𝑛 𝑚𝑆/𝑐𝑚 Para el pH, realizaremos el siguiente cálculo para pasar de la tensión al valor correspondiente en la escala del pH: 𝑝𝐻 =14 −14 ∗ 𝑉𝑝𝐻 828.24𝑚𝑉 Después de la realización de estas conversiones, los valores leídos en los límtes de giro de nuestros potenciómetros son los siguientes: Nivel de pH máximo: o Tensión: 0.00V o Escala de pH: 14.00 Nivel de pH mínimo: o Tensión: 0.89V o Escala de pH: -1.04 Nivel de conductividad máximo: o Tensión: 2.98V o Valor en mS/cm: 20.11mS/cm Nivel de conductividad mínimo: o Tensión: 0.00V o Valor en mS/cm: 0.00mS/cm Puede apreciarse como se produce un fallo con la medida del pH mínimo, pero este error no afecta a nuestro proyecto ya que valores tan bajos de pH no se dan. 8.5 Prueba 5. Activación o desactivación de la resistencia calefactora y del ventilador dependiendo de la temperature medida por el sensor DS18B20 8.5.1 Descripción general Las pruebas realizadas con este sensor han sido la colocación de éste en un recipiente con agua fría, otro con agua caliente y por último, fuera de los recipientes, midiendo la temperatura ambiente. Según la temperatura medida se encenderá el LED que indica la activación de la resistencia calefactora (la temperatura medida es menor que la temperatura fijada), el LED que indica la activación del ventilador (la temperatura medida es superior a la temperatura fijada), o no se activará ninguno (la temperatura está dentro del rango fijado). Para estas pruebas, en el código se ha fijado el rango de temperatura deseado de 17 a 19 grados centígrados. 8.5.2 Procedimiento detallado para la comprobación I. Conectar, tal y cómo se explica en el capítulo “desarrollo hardware”, el sensor de temperatura DS18B20 y, únicamente, conectar los dos canales del modulo relé correspondientes a la resistencia calefactora y al ventilador. II. Conectar la alimentación al Arduino. III. Ejecutar el script para comprobar el funcionamiento correcto del sensor de temperatura DS18B20.
Referencias 78 78 [18] Millis https://www.arduino.cc/en/Reference/Millis [19] Puerto serie https://www.arduino.cc/en/reference/serial
ANEXOS A. Comunicación I2C El bus I2C es un estándar que facilita la comunicación entre microcontroladores, memorias y otros dispositivos, sólo requiere de dos líneas de señal. Fue diseñado por Philips en 1982 para permitir el intercambio de información entre sus artículos, aunque posteriormente fue extendiéndose a otros fabricantes hasta convertirse en un estándar de mercado. La metodología de comunicación de datos del bus I2C es en serie y sincrónica. Una de las señales del bus marca el tiempo (SCL) y la otra se utiliza para intercambiar datos (SDA). Figura A-1. Esquema funcionamiento del bus I2C A continuación se explicarán algunas características del bus I2C: Cada dispositivo dispone de una dirección única, que se emplea para acceder a ellos de forma individual. Esta dirección puede ser fijada por hardware (se pueden modificar los últimos 3 bits mediante jumpers o interruptores) o totalmente por software. El bus I2C tiene una arquitectura de tipo maestro-esclavo. El dispositivo maestro inicia la comunicación con los esclavos, y puede mandar o recibir datos de los esclavos. Los esclavos no pueden iniciar la comunicación (el maestro tiene que preguntarles), ni hablar entre sí directamente. Es posible disponer de más de un maestro, pero solo uno puede ser el maestro cada vez. El cambio de maestro supone una alta complejidad, por lo que no es algo frecuente. El bus I2C es síncrono. El maestro proporciona una señal de reloj, que mantiene sincronizados a todos los dispositivos del bus. De esta forma, se elimina la necesidad de que cada dispositivo tenga su propio reloj, de tener que acordar una velocidad de transmisión y mecanismos para mantener la transmisión sincronizada. Para poder realizar la comunicación con un solo cable de datos, el bus I2C emplea una trama amplia. La comunicación costa de: 7 bits a la dirección del dispositivo esclavo con el que queremos comunicar. Con estos bits podemos acceder a 112 dispositivos en un mismo bus, ya que 16 de las 128 direcciones posibles son direcciones especiales reservadas. Un bit restante indica si queremos enviar o recibir información. Un bit de validación. Uno o más bytes son los datos enviados o recibidos del esclavo. Un bit de validación.
Anexos 80 80 En el siguiente ejemplo se puede ver el funcionamiento del bus I2C: Figura A-2. Ejemplo de funcionamiento del bus I2C La cantidad de datos enviados que puede apreciarse en el ejemplo (18 bits por cada 8 bits de datos) hace que la velocidad del bus I2C sea reducida por regla general. La velocidad estándar de transmisión es de 100MHz, con un modo de alta velocidad de 400MHz. También existen otros modos, como un envío de dirección de 8, 10 y 12 bits, o velocidades de transmisión de 1Mbit/s, 3.4Mbit/s y 5Mbit/s, aunque estos no suelen ser empleados en Arduino. Como ventajas e inconvenientes a este tipo de comunicación se pueden comentar las siguientes: Ventajas Requiere pocas conexiones. Dispone de mecanismos para comprobar si la señal ha llegado. Inconvenientes Velocidad media-baja. No es full-duplex. No puede comprobarse si el contenido del mensaje es el correcto. En el caso concreto de nuestro Arduino Mega, los pines que se usarán serán el 20 para SDA, y el 21 para SCL. Cabe señalar que, como Arduino es una plataforma de código abierto, existe un sketch con el cual podemos determinar la dirección de cada dispositivo, ya que en algunas ocasiones el fabricante no la proporciona, o no se tiene acceso a esa información.
Glosario RAE: Real Academia Española GH: dureza permanente KH: dureza temporal BNC: Bayonet Neill-Concelman, tipo de conector LCD: pantalla de cristal líquido (Liquid Crystal Display) IDE: entorno de desarrollo integrado (Integrated Development Environment) IoT: internet de las cosas (Internet of Things) MIT: Instituto Tecnológico de Massachusetts (Massachusetss Institute of Technology) PWM: modulación por ancho de pulsos (pulse-width modulation) DSP: procesador digital de señales (Digital Signal Processor) TFT-LCD: pantalla de cristal líquido de transistores de película fina (Thin Film Transistor-Liquid Crystal Display) USB: bus serie universal (Universal Serial Bus) PCB: placa de circuito impreso (Printed Circuit Board) I2C: circuito interintegrado (Inter-Integrated Circuit) SDA: línea de datos (Serial Data) SCL: línea de reloj (Serial Clock) LED: diodo emisor de luz (light-emitting diode)