2.1: Uso básico del microcontrolador para medición y control
- Page ID
- 80981
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)
( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\id}{\mathrm{id}}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\kernel}{\mathrm{null}\,}\)
\( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\)
\( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\)
\( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)
\( \newcommand{\vectorA}[1]{\vec{#1}} % arrow\)
\( \newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow\)
\( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vectorC}[1]{\textbf{#1}} \)
\( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)
\( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)
\( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)Yeyin Shi
Departamento de Ingeniería de Sistemas Biológicos, Universidad de Nebraska-Lincoln, Lincoln, Nebraska, EE. UU.
Guangjun
Facultad de Ingeniería, Universidad Agrícola del Sur de China, Guangzhou, Guangdong, China
Ning Wang
Departamento de Biosistemas e Ingeniería Agrícola, Universidad Estatal de Oklahoma, Stillwater, Oklahoma, EE. UU.
Introducción
Los sistemas de medición y control son ampliamente utilizados en la ingeniería de biosistemas. Son ubicuos e indispensables en la era digital, siendo utilizados para recopilar datos (medir) y automatizar acciones (control). Por ejemplo, las estaciones meteorológicas miden la temperatura, la precipitación, el viento y otros parámetros ambientales. Los datos se pueden interpretar manualmente para tomar mejores decisiones de manejo de la granja, como la regulación del caudal y la presión para el riego de campo. Los sistemas de medición y control también forman parte de la base de la última tecnología de Internet de las cosas (IoT), en la que los dispositivos pueden ser monitoreados y controlados de forma remota a través de Internet.
Un componente clave de un sistema de medición y control es el microcontrolador. Se requiere que todos los ingenieros de biosistemas tengan una comprensión básica de qué son los microcontroladores, cómo funcionan y cómo usarlos para la medición y el control. Este capítulo introduce los conceptos y aplicaciones de los microcontroladores ilustrados con un proyecto sencillo.
Conceptos
Sistemas de Medición y Control
Hablemos primero de los sistemas de medición y control. Como se muestra en la Figura 2.1.1, las señales pueden ser generadas por actuadores mecánicos y medidas por sensores, por ejemplo, la señal de voltaje de un sensor de caudal. La señal se introduce entonces en una unidad central de control, tal como un microcontrolador, para el procesamiento de la señal, el análisis y la toma de decisiones. Por ejemplo, para ver si el caudal está en el rango deseado o no. Finalmente, el microcontrolador emite una señal para controlar el actuador, por ejemplo, ajustar la apertura de la válvula, y/o al mismo tiempo mostrar el estado del sistema a los usuarios. Después se vuelve a medir el actuador. Esto forma un bucle sin fin que se ejecuta continuamente hasta ser interrumpido por el usuario o el tiempo de espera. Si vemos el sistema desde el punto de vista de la señal, la señal generada por los actuadores y medida por los sensores suelen ser señales analógicas que son continuas e infinitas. A menudo son preprocesados para ser amplificados, filtrados o convertidos a un formato digital discreto y finito para ser procesados por la unidad de control central. Si el actuador solo acepta señales analógicas, la señal de salida para controlar el actuador desde la unidad de control central necesita ser convertida de nuevo al formato analógico. Como puede ver, la unidad central de control juega un papel crítico en el bucle de medición y control. El microcontrolador es una de las unidades de control central más utilizadas. Nos centraremos en los microcontroladores en el resto del capítulo.
Microcontroladores
Un microcontrolador es un tipo de computadora. Una computadora generalmente se piensa como un dispositivo de propósito general configurado como una computadora de escritorio (computadora personal; PC o estación de trabajo), computadora portátil o servidor. El tipo “invisible” de computadora que es ampliamente utilizado en la industria y nuestra vida diaria es el microcontrolador. Un microcontrolador es una computadora en miniatura, generalmente construida como un solo circuito integrado (IC) con memoria limitada y capacidad de procesamiento. Se pueden incrustar en sistemas más grandes para realizar tareas complejas. Por ejemplo, un automóvil ordinario puede tener de 25 a 40 unidades de control electrónico (ECU), que se construyen alrededor de microcontroladores. Un tractor moderno puede tener un número similar de ECUs con microcontroladores que manejan los controles de potencia, tracción e implementos. El control ambiental en invernaderos y casas de animales, y el control de procesos en plantas de alimentos dependen de microcontroladores. Cada microcontrolador para estas aplicaciones tiene una tarea específica de medir y controlar, como el flujo de aire (ventilación, temperatura) o presión interna, o para realizar un control de nivel superior de una serie de microcontroladores. Comprender los componentes básicos de un microcontrolador y cómo funciona nos permitirá diseñar un sistema de medición y control.
Un microcontrolador consiste principalmente en una unidad central de procesamiento (CPU), unidades de memoria y hardware de entrada/salida (E/S) (Figura 2.1.2). Diferentes componentes interactúan entre sí y con dispositivos externos a través de rutas de señal llamadas buses. Cada una de estas partes se discutirá a continuación.
La CPU también se llama microprocesador. Es el cerebro del microcontrolador, encargado de la computación primaria y del control interno del sistema. Existen tres tipos de información que maneja la CPU: (1) los datos, que son los valores digitales a computar o enviar; (2) las instrucciones, que indican qué datos se requieren, qué cálculos imponer y dónde se van a almacenar los resultados; y (3) las direcciones, que indican dónde se encuentran los datos o una instrucción proviene o se envía a. Una unidad lógica aritmética (ALU) dentro de la CPU ejecuta funciones matemáticas sobre los datos estructurados como grupos de dígitos binarios, o “bits”. El valor de un bit es 0 o 1. Cuantos más bits pueda manejar una CPU de microcontrolador a la vez, más rápido podrá calcular la CPU. Las CPU del microcontrolador a menudo pueden manejar 8, 16 o 32 bits a la vez.
Una unidad de memoria (a menudo llamada simplemente memoria) almacena datos, direcciones e instrucciones, que pueden ser recuperados por la CPU durante el procesamiento. Generalmente hay tres tipos de memoria: (1) memoria de acceso aleatorio (RAM), que es una memoria volátil utilizada para contener los datos y programas que se ejecutan y que se pueden leer o escribir en cualquier momento mientras se mantenga la potencia; (2) memoria de solo lectura (ROM), que se utiliza para el almacenamiento permanente del sistema instrucciones incluso cuando el microcontrolador está apagado. Esas instrucciones o datos no se pueden modificar fácilmente después de la fabricación y rara vez se cambian durante la vida del microcontrolador; y (3) memoria de solo lectura programable borrable (EPROM), que es una memoria semipermanente que puede almacenar instrucciones que deben cambiarse ocasionalmente, como las instrucciones que implementan el uso específico del microcontrolador. El firmware es un programa generalmente almacenado permanentemente en la ROM o EPROM, que proporciona el control del hardware y un entorno operativo estandarizado para software más complejo programado por los usuarios. El firmware permanece sin cambios hasta que se requiere una actualización del sistema para corregir errores o agregar características. Originalmente, los EPROMS se borraron usando luz ultravioleta, pero más recientemente la memoria flash (memoria de solo lectura programable borrable eléctricamente; EEPROM) se ha convertido en la norma. La cantidad de RAM (descrita en bytes, kilobytes, megabytes o gigabytes) determina la velocidad de operación, la cantidad de datos que se pueden procesar y la complejidad de los programas que se pueden implementar.
Los puertos digitales de entrada y salida (E/S) conectan el microcontrolador con dispositivos externos usando solo señales digitales. El voltaje alto y bajo en la señal corresponden a los estados de encendido y apagado. Cada puerto digital se puede configurar como un puerto de entrada o un puerto de salida. El puerto de entrada se usa para leer el estado del dispositivo externo y el puerto de salida se usa para enviar una instrucción de control a un dispositivo externo. La mayoría de los microcontroladores operan sobre 0 a +5V con corriente limitada porque la señal de voltaje no se usa directamente, solo el estado binario. Si el voltaje y la corriente se van a usar para accionar directamente un dispositivo, se requiere un relé o convertidor analógico digital de voltaje entre el puerto y el dispositivo. Por lo general, los puertos de E/S digitales se comunican o “hablan” con dispositivos externos a través de protocolos de comunicación estándar, como protocolos de comunicación serie. Por ejemplo, un microcontrolador puede usar pines de E/S digitales para formar puertos de comunicación serie para hablar con una computadora de propósito general, memoria externa u otro microcontrolador. Los protocolos comunes para la comunicación en serie son UART (receptor-transmisor asíncrono universal), USB (bus serie universal), I 2 C (circuito interintegrado) y SPI (interfaz periférica serie). Los puertos de entrada y salida analógicos (E/S analógicas) se pueden conectar directamente al microcontrolador. Muchos sensores (por ejemplo, temperatura, presión, deformación, rotación) emiten señales analógicas y muchos actuadores requieren una señal analógica. Los puertos analógicos integran un convertidor analógico a digital (A/D) o un convertidor digital a analógico (D/A).
La CPU, la memoria y los puertos de E/S están conectados a través de conductores de señal eléctrica conocidos como buses. Sirven como el sistema nervioso central de la computadora permitiendo que los datos, direcciones y señales de control se compartan entre todos los componentes del sistema. Cada componente tiene su propio controlador de bus. Hay tres tipos de autobuses: el bus de datos, el bus de dirección y el bus de control. El bus de datos transfiere datos hacia y desde los registros de datos de varios componentes del sistema. El bus de direcciones lleva la dirección de un componente del sistema con el que una CPU desea comunicarse o una ubicación de datos específica en la memoria a la que una CPU desea acceder. El bus de control transmite la señal operativa entre la CPU y los componentes del sistema, como las señales de lectura y escritura, la señal de reloj del sistema y las interrupciones del sistema.
Finalmente, las señales de reloj/contador/temporizador se utilizan en un microcontrolador para sincronizar operaciones entre componentes. Una señal de reloj es típicamente una secuencia de pulsos con una frecuencia constante conocida generada por un oscilador de cristal de cuarzo. Por ejemplo, un reloj de CPU es una señal de pulso de alta frecuencia utilizada para cronometrar y coordinar diversas actividades en la CPU. Un reloj del sistema se puede utilizar para sincronizar muchas operaciones del sistema, como la transferencia de datos de entrada y salida, muestreo o procesos A/D y D/A.
Software y Programación del Microcontrolador
Las funciones específicas de un microcontrolador dependen de su software o de cómo se programa. Los programas se almacenan en la memoria. Recordemos que la CPU solo puede ejecutar código binario, o código de máquina, y realiza operaciones de bajo nivel como agregar un número a un registro o mover el valor de un registro a una ubicación de memoria. Sin embargo, es muy difícil escribir un programa en código de máquina. De ahí que a lo largo de los años se desarrollaron lenguajes de programación para que la programación fuera conveniente Los lenguajes de programación de bajo nivel, como el lenguaje ensamblador, son los más similares al código de máquina. Por lo general, son específicos de hardware y no son intercambiables entre diferentes tipos de microcontroladores. Los lenguajes de programación de alto nivel, como BASIC, C o C++, tienden a ser más genéricos y se pueden implementar entre diferentes tipos de microcontroladores con modificaciones menores.
Los lenguajes de programación para un microcontrolador específico son determinados por el fabricante del microcontrolador. Los lenguajes de programación de alto nivel son dominantes en los microcontroladores actuales ya que son mucho más fáciles de aprender, interpretar, implementar y depurar. La programación de un microcontrolador a menudo requiere referencias a manuales, tutoriales y notas de aplicación de los fabricantes. Los cursos digitales en línea y el aprendizaje basado en la comunidad en línea suelen ser buenos recursos también.
El ejemplo que se presenta más adelante en este capítulo es un proyecto práctico que utiliza una placa microcontroladora llamada Arduino UNO. Arduino es una familia de hardware y software de código abierto, microcontroladores de placa única. Son populares y hay muchos recursos en línea disponibles para ayudar a los nuevos usuarios a desarrollar aplicaciones. Los microcontroladores son fáciles de entender y fáciles de usar en aplicaciones del mundo real con sensores y actuadores (Arduino, 2019). El lenguaje de programación de los microcontroladores Arduino se basa en un lenguaje llamado Processing, que es similar a C o C++ pero mucho más sencillo (https://processing.org/). El código se puede adaptar para otros microcontroladores. Para convertir códigos de un lenguaje de alto nivel al código de máquina para ser ejecutado por una CPU específica, o de un idioma a otro idioma, es necesario un programa de computadora llamado compilador.
Los programas pueden ser desarrollados por los usuarios en un entorno de desarrollo integrado (IDE), que es un software que se ejecuta en una PC o laptop para permitir que el código del microcontrolador sea programado y simulado en el PC o portátil. La mayoría de los errores de programación se pueden identificar y corregir durante la simulación. Un IDE normalmente consta de los siguientes componentes:
- • Un editor para programar el microcontrolador utilizando un lenguaje de programación relevante de alto nivel como C, C++, BASIC o Python.
- • Un compilador para convertir el programa de lenguaje de alto nivel en lenguaje ensamblador de bajo nivel específico para un microcontrolador en particular.
- • Un ensamblador para convertir el lenguaje ensamblador en código de máquina en formato de bit binario (0 o 1).
- • Un depurador para verificar errores (también llamado “depurar”) el código, y para probar si el código hace lo que se pretendía hacer. El depurador suele encontrar errores de sintaxis, que son sentencias que no se pueden entender y no se pueden compilar, y código redundante, que son líneas del programa que no hacen nada. El depurador muestra el número de línea o ubicación del error para ayudar a solucionar problemas. El programador también puede agregar componentes de prueba de errores al escribir el código para usar el depurador para ayudar a confirmar que el programa hace lo que originalmente se pretendía.
- • Un emulador de software para probar el programa en el PC o portátil antes de probarlo en hardware.
No todos los componentes enumerados anteriormente se presentan siempre al usuario en un IDE, pero siempre existen. Para el desarrollo de algunos sistemas, también podría estar disponible un emulador de hardware. Esto consistirá en una placa de circuito impreso conectada a la PC o computadora portátil mediante un cable plano que une puertos de E/S. El emulador se puede utilizar para cargar y ejecutar un programa para pruebas antes de que el microcontrolador se incruste en un sistema de medición o control en vivo.
Diseño de un sistema de medición y control basado en microcontroladores
El siguiente flujo de trabajo puede ayudarnos a diseñar y construir un sistema de medición y control basado en microcontroladores.
Paso 1. Comprender el problema y desarrollar objetivos de diseño del sistema de medición y control con los usuarios finales. Las preguntas útiles para hacer incluyen:
- • ¿Cuáles deben ser las funciones del sistema? Por ejemplo, se necesita un sistema para regular la temperatura ambiente de una instalación confinada de alojamiento de animales dentro de un rango óptimo.
- • ¿Dónde o en qué ambiente se produce la medición o el control? Por ejemplo, ¿es una aplicación interior o exterior? ¿La operación está en una temperatura muy alta o baja, un ambiente muy polvoriento, fangoso o ruidoso? ¿Hay algo especial a considerar para esa aplicación?
- • ¿Ya existen sensores o actuadores como partes del sistema o es necesario identificar los apropiados? Por ejemplo, ¿ya hay termistores instalados para medir la temperatura ambiente, o hay ventiladores o calentadores instalados?
- • ¿Con qué frecuencia y qué tan rápido se deben medir o controlar las cosas? Por ejemplo, puede estar bien verificar y regular una temperatura ambiente cada 10 segundos para un invernadero; sin embargo, el caudal y la presión de un pulverizador de velocidad variable que funciona a 5 metros por segundo (aproximadamente 12 millas por hora) en el campo necesitan ser monitoreados y controlados al menos cada segundo.
- • ¿Cuánta precisión necesita la medición y el control? Por ejemplo, ¿es suficiente una precisión de grado Celsius o la aplicación necesita una precisión de nivel subCelsius?
Paso 2. Identificar los sensores y/o actuadores adecuados si es necesario para los objetivos deseados desarrollados en el paso anterior.
Paso 3. Comprender las señales de entrada y salida de los sensores y actuadores leyendo sus especificaciones.
- • ¿Cuántas entradas y salidas son necesarias para las funciones del sistema?
- • Para cada señal, ¿es una señal de voltaje o corriente? ¿Es una señal digital o analógica?
- • ¿Cuál es el rango de cada señal?
- • ¿Cuál es la frecuencia de cada señal?
Paso 4. Seleccione un microcontrolador de acuerdo con el objetivo deseado del sistema, las señales de salida de los sensores y las señales de entrada requeridas por los actuadores. Lea atentamente las especificaciones técnicas del microcontrolador. Asegúrese de que:
- • el número y los tipos de puertos de E/S son compatibles con las señales de salida y entrada de los sensores y actuadores;
- • la velocidad de la CPU y el tamaño de la memoria son suficientes para los objetivos deseados;
- • no faltan componentes entre el microcontrolador, los sensores y actuadores como convertidores o adaptadores, y si los hay, identificarlos; y
- • el (los) lenguaje (s) de programación del microcontrolador es apropiado para los usuarios.
Paso 5. Construya un prototipo del sistema con los sensores, actuadores y microcontroladores seleccionados. Este paso normalmente incluye el cableado físico de los componentes de hardware. Si se prefiere, un sistema virtual se puede construir y probar en un software emulador para depurar problemas antes de construir y probar con el hardware físico para evitar daños innecesarios en el hardware.
Paso 6. Programa el microcontrolador. Desarrollar un programa con todas las funciones requeridas. Cargarlo en el microcontrolador y depurar con el sistema. Todo el código debe ser comentado correctamente para que el programa sea legible por otros usuarios más adelante.
Paso 7. Implemente y depure el sistema bajo el entorno de trabajo objetivo con conexiones de hardware permanentes hasta que todo funcione como se esperaba.
Paso 8. Documente el sistema incluyendo, por ejemplo, especificaciones, un diagrama de cableado y un manual del usuario.
Aplicaciones
Los sistemas de medición y control basados en microcontroladores se utilizan comúnmente en aplicaciones agrícolas y biológicas. Por ejemplo, un tractor de campo tiene muchos microcontroladores, cada uno trabajando con diferentes módulos mecánicos para realizar funciones específicas como monitorear y mantener la temperatura y velocidad del motor, recibir señales GPS para la navegación y control preciso de implementos para siembra, pulverización y labranza. Un sistema de riego de pivote lineal o central utiliza microcontroladores para garantizar que el caudal, la presión de la boquilla y el patrón de pulverización sean correctos para optimizar la eficiencia del uso del agua. Los sistemas de registro de animales utilizan microcontroladores para manejar la lectura de las marcas auditivas cuando los animales pasan por una estación de pesaje o necesitan ser presentados con alimento. Una planta de procesamiento de alimentos utiliza sistemas de microcontroladores para monitorear y regular procesos que requieren rendimiento específico, presión, temperatura, velocidad y otros factores ambientales. Se utilizará un sistema de control de invernadero para la producción de hortalizas para ilustrar una aplicación práctica de microcontroladores.
Los modernos sistemas de invernadero están diseñados para proporcionar un ambiente óptimo para cultivar plantas de manera eficiente con una mínima intervención humana. Con tecnologías avanzadas de electrónica, informática, automatización y redes, los modernos sistemas de invernadero proporcionan monitoreo en tiempo real, así como control automático y remoto mediante la implementación de una combinación de comunicación de PC, manejo de datos y almacenamiento, con microcontroladores cada uno utilizado para administrar una tarea específica ( Figura 2.1.3). Las tareas específicas abordan la necesidad de las plantas de una composición correcta del aire (oxígeno y dióxido de carbono), agua (para garantizar que la transpiración esté optimizada para impulsar la absorción de nutrientes y la dispersión del calor), nutrientes (para maximizar el rendimiento), luz (para impulsar la fotosíntesis), temperatura (la fotosíntesis se maximiza en un temperatura para cada tipo de planta, generalmente alrededor de 25°C) y, en algunos casos, humedad (para ayudar a regular plagas y enfermedades así como la fotosíntesis). En un invernadero moderno, la fotosíntesis, los suministros de nutrientes y agua, y la temperatura son monitoreados y controlados de cerca mediante múltiples sensores y microcontroladores.
Como se muestra en la Figura 2.1.3, el control general del ambiente del invernadero se divide en dos niveles. El sistema de control de nivel superior (Figura 2.1.4) integra una matriz de microcontroladores de nivel inferior, cada uno responsable de tareas específicas en partes específicas del invernadero, es decir, puede haber múltiples microcontroladores que regulan la luz y la sombra en un invernadero muy grande.
En el nivel inferior, los microcontroladores pueden funcionar en subsistemas o de manera independiente. Cada microcontrolador tiene su propio conjunto de sensores que proporcionan entradas, actuadores controlados por salidas, una tarjeta SD (digital segura) como unidad de almacenamiento de datos local y una CPU para ejecutar un programa para ofrecer funcionalidad. Cada programa implementa sus reglas o decisiones de forma independiente pero se comunica con el sistema de control de nivel superior para recibir comandos específicos de tiempo y transmitir datos y actualizaciones de estado. Algunos subsistemas pueden ser examinados con más detalle y con mayor frecuencia.
El subsistema de ventilación está diseñado para mantener la temperatura y humedad requeridas para un crecimiento óptimo de las plantas dentro del invernadero. Un esquema de un ejemplo típico (Figura 2.1.5) muestra la estructura del subsistema. Se instalan múltiples sensores de temperatura y humedad en varios lugares del invernadero y se conectan a las entradas de un microcontrolador. Los valores objetivo de temperatura y humedad se pueden introducir mediante un teclado conectado al microcontrolador (Figura 2.1.6) o establecerse mediante el sistema de control de nivel superior. Los valores objetivo también se denominan “puntos de ajuste de control” o simplemente “puntos de ajuste”. Son los valores que el programa está diseñado para mantener para el invernadero. La función del microcontrolador es comparar la temperatura y humedad medidas con los valores de punto de ajuste para tomar una decisión y ajustar la temperatura interna. Si es necesario un cambio, el microcontrolador controla los actuadores para encender un dispositivo de calentamiento para elevar la temperatura (si la temperatura está por debajo del punto de ajuste) o un ventilador del sistema de enfriamiento (si la temperatura está por encima del punto de ajuste) para llevar el invernadero a la temperatura y humedad deseadas.
El panel de control en un sistema de ventilación típico se muestra en la Figura 2.1.6. Aquí una luz verde indica que la unidad de calefacción está funcionando, mientras que las luces rojas indican que tanto la unidad de refrigeración como los extractores están apagados. La pantalla LCD muestra la temperatura medida y la humedad relativa dentro del invernadero (primera línea de texto), los valores de temperatura y humedad del punto de ajuste (segunda línea de texto), los componentes activos (tercera línea de texto) y el estado del sistema (cuarta línea de texto). Como la temperatura medida es más fría que el punto de ajuste, la unidad de calentamiento se ha encendido para aumentar la temperatura de 22°C a 25°C.Cuando la temperatura medida alcance 25°C, la unidad de calentamiento se apagará. También es posible programar alarmas para alertar a un operador cuando alguno de los valores medidos excede los puntos de ajuste críticos.
El subsistema de nutrimentos y suministro de agua (Figura 2.1.7) proporciona a las plantas agua y nutrientes en el momento adecuado y en las cantidades adecuadas. Es posible programar un horario preestablecido y valores preestablecidos o responder a sensores en el medio de cultivo (suelo, turba, etc.). Al igual que en el subsistema de temperatura y humedad, el usuario puede ingresar manualmente valores de punto de ajuste, o los valores pueden recibirse desde el sistema de nivel superior. Idealmente, se utilizan múltiples sensores para medir la humedad del suelo y los niveles de nutrientes en la zona radicular en varios lugares del invernadero. Las lecturas de los sensores son interpretadas por el microcontrolador. Cuando la disponibilidad de agua o nutrientes medida cae por debajo de un umbral, el microcontrolador controla un actuador para liberar más agua y/o nutrientes.
El subsistema de iluminación (Figura 2.1.8) está diseñado para reemplazar o complementar la radiación solar proporcionada a las plantas para la fotosíntesis. Los sensores de radiación solar y de luz se instalan en el invernadero. El microcontrolador lee los datos de estos sensores y los compara con los puntos de ajuste. Si el valor medido es demasiado alto, el microcontrolador acciona un mecanismo de sombreado para cubrir el área del techo. Si el valor medido es demasiado bajo, el microcontrolador activa el mecanismo de sombreado para eliminar todo el sombreado y, si es necesario, enciende las unidades de luz suplementarias.
El sistema de control de nivel superior generalmente se construye en una PC o un servidor, lo que proporciona un control general a través de una integración de los subsistemas. Todos los subsistemas están conectados a la computadora de control central a través de comunicación serial o inalámbrica, como un puerto RS-232, Bluetooth o Ethernet. La computadora central de control recopila los datos de todos los subsistemas para procesar análisis y mantenimiento de registros. El sistema de control de nivel superior puede tomar decisiones de control óptimas basadas en los datos de todos los subsistemas. También proporciona una interfaz para que el operador administre todo el sistema, si es necesario. La computadora de control central también recopila todos los datos de todos los sensores y actuadores para poblar una base de datos que representa el historial de control del invernadero. Esto se puede utilizar para entender el fracaso y, una vez recopilados datos suficientes, para implementar algoritmos de aprendizaje automático, si es necesario.
Esta aplicación en invernadero es un ejemplo simplificado de un práctico sistema de control complejo. Los problemas de alojamiento de animales y otros problemas de control ambiental son de similar complejidad. La maquinaria agrícola moderna y las plantas procesadoras de alimentos pueden ser significativamente más complejas de entender y controlar. Sin embargo, el principio de diseñar un sistema jerárquico con automatización local gestionado por un controlador central es muy similar. El aprendizaje automático y la inteligencia artificial se están utilizando ahora para lograr controles precisos y precisos en muchas aplicaciones. Sus algoritmos y estrategias de control se pueden implementar en el sistema de control de nivel superior, y las decisiones de control se pueden enviar a los subsistemas de nivel inferior para implementar las funciones de control.
Ejemplo
Ejemplo\(\PageIndex{1}\)
Ejemplo 1: Sistema de Control y Medición de Temperatura de Bajo Costo
Problema:
Un agricultor quiere desarrollar un sistema de medición y control de bajo costo para ayudar a abordar las tensiones de calor y frío en la producción ganadera confinada. Específicamente, el agricultor quiere mantener la temperatura interior óptima de 18° a 20°C para un granero de cerdos en crecimiento y acabado. Un sistema de calefacción/refrigeración necesita ser activado si la temperatura es inferior o superior al rango óptimo. El objetivo es hacer un indicador sencillo para alertar a los manejadores de stock cuando la temperatura está fuera del rango objetivo, para que puedan tomar medidas. (Aquí no se requiere control automático de calefacción y refrigeración). Diseñe y construya un sistema de medición y control basado en microcontroladores para cumplir con los requisitos especificados.
Solución
Complete los pasos recomendados descritos anteriormente.
Paso 1. Entender el problema.
- • Funciones: necesitamos un sistema para monitorear la temperatura ambiente y hacer alertas cuando la temperatura está fuera del rango de 18° a 20°C. La alerta necesita indicar si está demasiado fría o demasiado caliente, y el tamaño de la desviación de ese rango.
- • Ambiente—Como un granero de cerdos en crecimiento y acabado puede ser ruidoso, usaremos un indicador visual como alerta en lugar de alerta sonora.
- • Sensores o actuadores existentes: para este ejemplo, suponga que se han instalado mecanismos de calefacción y refrigeración en el granero. Solo necesitamos automatizar el monitoreo de temperatura y el proceso de toma de decisiones.
- • Frecuencia: la temperatura en un granero de cerdos en crecimiento y acabado generalmente no cambia rápidamente. En este ejemplo, supongamos que los cuidadores requieren que la temperatura sea monitoreada cada segundo.
- • Precisión: en este proyecto, fijemos los requisitos para la precisión a un grado Celsius para el control de temperatura.
Paso 2. Identificar los sensores y/o actuadores apropiados.
El sensor que se utilizará en este ejemplo para medir la temperatura es el Texas Instruments LM35. Es uno de los sensores de temperatura más utilizados y de bajo costo en sistemas de medición y control en la industria. Su voltaje de salida es linealmente proporcional a la temperatura, por lo que la relación entre la salida del sensor y la temperatura es sencilla.
Utilizaremos un LED RGB para iluminar en diferentes colores y parpadear a diferentes velocidades para indicar la temperatura y realizar alertas. Este tipo de LED es una combinación de un LED rojo, un LED verde y un LED azul en un solo paquete. Al ajustar la intensidad de cada LED, se puede hacer una serie de colores. En este ejemplo, encenderemos el LED en azul cuando una temperatura sea inferior al rango óptimo, en verde cuando la temperatura esté dentro del rango óptimo, y en rojo cuando la temperatura sea superior al rango óptimo. Además, cuanto más se haya desviado la temperatura del rango óptimo, más rápido parpadeará el LED. De esta manera, alertamos a los cuidadores de que es necesario tomar una acción de calefacción o refrigeración y cuán urgente es la situación.
Paso 3. Entender las señales de entrada y salida.
La serie LM35 son sensores de temperatura de circuito integrado de precisión con un voltaje de salida linealmente proporcional a la temperatura Celsius (C) (hoja de datos LM35; http://www.ti.com/lit/ds/symlink/lm35.pdf). Hay tres pines en el paquete LP de los sensores como se muestra en la Figura 2.1.9. Un paquete es una forma en que un bloque de semiconductores se encapsula en una carcasa de metal, plástico, vidrio o cerámica.
- • El pin +V S es el pin positivo de la fuente de alimentación con voltaje entre 4V y 20V (en este proyecto, usamos +5V);
- • El pin V OUT es la salida analógica del sensor de temperatura de no más de 6V (5V para este proyecto);
- • El pin GND es el pin de tierra del dispositivo que se va a conectar al terminal negativo de la fuente de alimentación.
Las especificaciones de precisión del sensor de temperatura LM35 se dan con respecto a una función de transferencia lineal simple:
\[ V_{out} =10 \text{mV}\ ^{\circ}C \times T \]
donde V OUT es el voltaje de salida del sensor de temperatura en milivoltios (mV) y T es la temperatura en °C.
En un LED RGB, cada uno de los tres LEDs de un solo color tiene dos cables, el ánodo (o pin positivo) donde fluye la corriente y el cátodo (o pin negativo) donde fluye la corriente. Hay dos tipos de LEDs RGB: ánodo común y cátodo común. Supongamos que usamos el LED RGB de cátodo común como se muestra en la Figura 2.1.10 pero el otro tipo también funcionaría. El cátodo común (—) pin 2 se conectará a tierra. Los pines del ánodo (+) 1, 3 y 4 se conectarán a los pines de salida digital del microcontrolador.
Paso 4. Seleccione un microcontrolador.
Hay muchos microcontroladores de propósito general disponibles comercialmente, como el Microchip PIC, Parallax BASIC Stamp 2, ARM y Arduino (Arduino, 2019). En este ejemplo, seleccionaremos una placa microcontroladora Arduino UNO basada en el microcontrolador ATmega328P (https://store.arduino.cc/usa/arduino-uno-rev3) (Figura 2.1.11). El microcontrolador cuenta con tres tipos de memoria: una RAM de 2KB donde el programa crea y manipula variables cuando se ejecuta; una EEPROM de 1KB donde se almacena información a largo plazo como el firmware del microcontrolador, y una memoria flash de 32KB que se puede utilizar para almacenar los programas que desarrolló. La memoria flash y la memoria EEPROM no son volátiles, lo que significa que la información persiste después de que se apaga la alimentación. La RAM es volátil, y la información se perderá cuando se elimine la alimentación. Hay 14 pines de E/S digitales y 6 pines de entrada analógica en la placa Arduino UNO. Hay un oscilador de cristal de cuarzo de 16 MHz. Las placas basadas en ATMEGA, incluida la Arduino UNO, tardan aproximadamente 100 microsegundos (0.0001 s) en leer una entrada analógica. Entonces, la velocidad máxima de lectura es de aproximadamente 10,000 veces por segundo, lo que es más que suficiente para nuestra frecuencia de muestreo deseada de cada segundo. La placa funciona a 5 V. Puede ser alimentada por un cable USB, un adaptador de CA a CC o una batería. Si se utiliza un cable USB, también sirve para cargar, ejecutar y depurar el programa desarrollado en el IDE de Arduino. El microcontrolador Arduino UNO es compatible con el sensor de temperatura LM35 y los objetivos de control deseados de este proyecto.
Paso 5. Construye un prototipo.
Los materiales que necesitas para construir el sistema son:
- • Placa Arduino UNO × 1
- • Tabla de pruebas × 1
- • Sensor de temperatura LM35 × 1
- • LED RGB × 1
- • Resistencia 220 Ω × 3
- • Cables de puente
La Figura 2.1.12 muestra el cableado del hardware.
- • El pin 1 del sensor de temperatura va a la fuente de alimentación de +5V en la placa Arduino UNO;
- • El pin 2 del sensor de temperatura va al pin analógico A0 en la placa Arduino UNO;
- • El pin 3 del sensor de temperatura va a uno de los pines de tierra GND en la placa Arduino UNO;
- • El pin 2 de E/S digital en la placa Arduino UNO se conecta con el pin 4 (el LED azul) del LED RGB a través de una resistencia de 220 Ω;
- • El pin 3 de E/S digital en la placa Arduino UNO se conecta con el pin 3 (el LED verde) del LED RGB a través de una resistencia de 220 Ω;
- • El pin 4 de E/S digital en la placa Arduino UNO se conecta con el pin 1 (el LED rojo) del LED RGB a través de una resistencia de 220 Ω; y
- • El pin 2 (cátodo) del LED RGB se conecta al pin de tierra GND en la placa Arduino UNO.
Se utiliza una placa electrónica (Figura 2.1.13) para crear un circuito de prototipado sin soldadura. Esta es una gran manera de probar un circuito. Cada orificio de plástico en la placa de pruebas tiene un clip de metal donde se puede asegurar el extremo desnudo de un cable de puente. Las columnas de los clips se marcan como +, − y de a a j; y las filas de clips se marcan como 1 a 30. Todos los clips en cada uno de los cuatro rieles de alimentación en los lados están conectados. Normalmente hay cinco clips conectados en cada regleta de terminales.
a) b)
Figura\(\PageIndex{13}\): A tabla de pruebas: (a) vista frontal (b) vista posterior con la parte posterior adhesiva quitada para exponer la parte inferior de los cuatro rieles de alimentación verticales en los lados (indicados con flechas) y las regletas terminales en el medio. (Imagen de Sparkfun, https://learn.sparkfun.com/tutorials/how-to-use-a-breadboard/all).
Paso 6. Programa el microcontrolador.
El siguiente paso es desarrollar un programa que se ejecute en el microcontrolador. Como mencionamos anteriormente, los programas se desarrollan en IDE que se ejecuta ya sea en una PC, una computadora portátil o una plataforma en línea basada en la nube. Arduino tiene su propio IDE. Hay dos formas de acceder a él. El Editor Web Arduino (https://create.arduino.cc/editor/) es la versión en línea que permite a los desarrolladores escribir código, acceder a tutoriales, configurar placas y compartir proyectos. Funciona dentro de un navegador web por lo que no es necesario instalar el IDE localmente; sin embargo, se requiere una conexión confiable a Internet. La forma más convencional es descargar e instalar el IDE Arduino localmente en una computadora (https://www.arduino.cc/en/main/software). Cuenta con diferentes versiones que pueden ejecutarse en sistemas operativos Windows, Mac OS X y Linux. Para este proyecto, utilizaremos el IDE convencional instalado en una PC con Windows. La forma en que se configura y opera el IDE es similar entre el convencional y el basado en la web. Te animamos a probar ambos y encontrar el que mejor funcione para ti.
Sigue los pasos en el enlace https://www.arduino.cc/en/Main/Software#download para descargar e instalar el IDE de Arduino con la versión correcta para tu sistema operativo. Abra el IDE. Contiene algunos componentes principales como se muestra en la Figura 2.1.14: un editor de código para escribir código de texto, un área de mensajes y una consola de depuración para mostrar información de compilación y mensajes de error, una cinta de herramientas con botones para funciones comunes y una serie de menús.
Asegúrate de desconectar los plug-ins de todos los cables y pines la primera vez que enciendas la placa Arduino ya sea con un cable USB o un puerto de alimentación de CC. Es un buen hábito nunca conectar ni desconectar ningún cable o pin cuando la placa está encendida. Conecte la placa Arduino UNO y su PC o computadora portátil usando el cable USB. En “Herramientas” en el menú principal (Figura 2.1.15) del IDE de Arduino, seleccione la placa derecha del menú desplegable de “Placa:” y el puerto COM derecho del menú desplegable de “Puerto:” (que es el puerto de comunicación que está usando el USB). Después desconecta el cable USB de la placa Arduino UNO.
Ahora comencemos a codificar en el Editor de Código del IDE. Una placa Arduino se ejecuta con un lenguaje de programación llamado Processing, que es similar a C o C++ pero mucho más simple (https://processing.org/). Aquí no cubriremos los detalles sobre la sintaxis de programación; sin embargo, explicaremos algunos de ellos junto con la estructura y lógica de programación. Al mismo tiempo, se le anima a ir a los sitios web de Arduino y al lenguaje de procesamiento para conocer más detalles sobre la sintaxis de la programación Arduino.
Los programas Arduino tienen un mínimo de 2 bloques: un bloque de configuración y un bloque de bucle de ejecución. Cada bloque tiene un conjunto de instrucciones encerradas en un par de llaves:
/*
Bloque de configuración
*/
void setup () {//Abriendo la llave aquí
Declaraciones 1;//Punto y coma después de cada declaración
Declaraciones 2;
...
Declaraciones n;
}//Cierre de llave aquí
/*
Bloque de bucle de ejecución
*/
void loop () {//Abriendo la llave aquí
Declaraciones 1;//Punto y coma después de cada declaración
Declaraciones 2;
...
Declaraciones n;
}//Cierre de llave aquí
Debe haber un punto y coma (;) después de cada sentencia para indicar el final de una sentencia; de lo contrario, el IDE devolverá un error durante la compilación. Las declaraciones después de “//” en una línea o múltiples líneas de declaraciones entre el par de “/*” y “*/” son comentarios. Los comentarios no serán compilados y ejecutados, pero son importantes para ayudar a los lectores a entender el código.
El diagrama de flujo lógico del programa se muestra en la Figura 2.1.16. Para entender mejor el código, separaremos el código en algunas partes de acuerdo con el diagrama de flujo lógico. Cada parte tendrá su código asociado mostrado en una caja gris con explicaciones. Puedes copiarlos y pegarlos en el Editor de Código en el IDE de Arduino. Al escribir los códigos, asegúrese de guardarlos con frecuencia.
Parte 1 del programa: Comentarios introductivos
Aquí utilizamos múltiples líneas de declaraciones para resumir el propósito general y la función del código.
/*
Este programa funciona con una placa Arduino UNO, un sensor de temperatura y un LED RGB para medir e indicar la temperatura ambiente.
Si la temperatura medida está dentro de los 18 y 20 grados Celsius, se considera como temperatura óptima y el LED se enciende en color verde.
Si la temperatura medida es inferior a 18 grados Celsius, se considera como fría y el LED se enciende en color azul y parpadea. Cuanto más fría es la temperatura, más rápido parpadea el LED.
Si la temperatura medida es superior a 20 grados Celsius, se considera como caliente y el LED se enciende en color rojo y parpadea. Cuanto más caliente sea la temperatura, más rápido parpadea el LED.
*/
Parte 2 del programa: Declaraciones de variables y constantes globales
En esta parte del programa, definimos algunas variables y constantes que se utilizarán posteriormente para todo el programa, incluyendo los umbrales superior e inferior del rango de temperatura óptimo y los números de los pines digitales para los LED rojo, verde y azul dentro del LED RGB, respectivamente. Por ejemplo, la primera declaración aquí, “const int hot = 20” significa que se crea un entero constante (“const”) (“int”) llamado “hot” y se asigna al valor de “20” que es el límite superior del rango de temperatura óptimo. La tercera declaración aquí, “const int BluePin = 2”, significa que se crea un entero constante (“const”) (“int”) llamado “BluePin” y se asigna al valor de “2” que se utilizará más adelante en el bloque de configuración del programa para establecer el pin digital 2 como el pin de salida para controlar el LED azul.
const int hot = 20;//Establecer un umbral para la temperatura caliente en Celsius
const int cold = 18;//Establecer un umbral para la temperatura fría en Celsius
const int BluePin = 2;//Establecer E/S digital 2 para controlar el LED azul en el LED RGB
const int GreenPin = 3;//Establecer E/S digital 3 para controlar el LED verde en el LED RGB
const int RedPin = 4;//Establecer E/S digital 4 para controlar el LED rojo en el LED RGB
Parte 3 del programa: Bloque de configuración
Como se mencionó anteriormente, el bloque de configuración debe existir aunque no haya sentencias para ejecutar. Se ejecuta solo una vez antes de que el microcontrolador ejecute el bloque de bucle repetidamente. Por lo general, el bloque de configuración incluye la inicialización de los modos pin y la configuración e inicio de la comunicación serie entre el microcontrolador y el PC o portátil donde se ejecuta el IDE. En este ejemplo, configuramos el pin analógico A0 como la entrada de las mediciones del sensor de temperatura, los pines digitales definidos anteriormente en la Parte 2 del código como pines de salida para controlar el LED RGB, e iniciar la comunicación en serie con una velocidad de comunicación típica (9600 bits por segundo) para que todo esté listo para el microcontrolador para ejecutar el bloque de bucle.
configuración void () {
PinMode (A0, INPUT);//Pin de entrada analógica del sensor de temperatura
PinMode (BluePIN, SALIDA);//Pin de salida digital LED azul
PinMode (GreenPin, OUTPUT);//Pin de salida digital LED verde
PinMode (RedPin, SALIDA);//Pin de salida digital LED rojo
Serial.begin (9600);//Configurar la velocidad en baudios como 9600 bits por segundo
}
Parte 4 del programa: Bloque de bucle de ejecución
La parte de bucle del programa es lo que el microcontrolador ejecuta repetidamente a menos que se apague la alimentación del microcontrolador.
Programa Parte 4.1: Inicie el bucle y lea en la entrada analógica del sensor de temperatura:
bucle void () {
int sensor = AnalogRead (A0);//Leer en el valor del pin analógico conectado a
//el sensor de temperatura
voltaje flotante = (sensor/1023.0) * 5.0;//Convertir el valor a voltaje
float temPC = (voltaje — 0.5) * 100;//Convierta el voltaje a temperatura usando el
/* factor de escala; 0.5 es la desviación del voltaje de salida frente a la temperatura de la línea recta de mejor ajuste derivada de la calibración del sensor */
Serial.print (“Temperatura:”);
Serial.print (temPC);//Imprime la temperatura en la consola de salida IDE Arduino
Aquí se ven dos tipos de variables, el entero (“int”) y el float (“float”). Para un Arduino UNO, un “int” tiene 16 bits de largo y puede representar un número que va de −32.768 a 32.767 (−2^15 a (2^15) − 1). Un “float” en Arduino UNO tiene 32 bits de largo y puede representar un número que tiene un punto decimal, que va desde −3.4028235E+38 hasta 3.4028235E+38. Aquí, definimos la variable de la temperatura medida desde el sensor LM35 como un tipo de flotador para que pueda representar un número decimal y sea más precisa.
Parte 4.2 del programa: compruebe si la temperatura es inferior al rango de temperatura óptimo. En caso afirmativo, enciende el LED en azul y parpadea según cuánto se desvió la temperatura del rango óptimo:
if (TemPC < frío) {//Si la temperatura es más fría que el rango de temperatura óptimo
Serial.println (“Hace frío.”) ;
//el rango óptimo
if (temp_dif <= 10) {
/* Calcular el intervalo de parpadeo del LED en milisegundos en función de la desviación de temperatura del rango óptimo; cuanto mayor sea la desviación, más rápido parpadea el LED hasta convertirse en un azul sólido */
//Parpadear el LED en azul:
DigitalWrite (BluePIN, HIGH);//Enciende el LED azul
DigitalWrite (GreenPin, LOW);//Apague el LED verde
DigitalWrite (RedPin, LOW);//Apague el LED rojo
delay (led_blink_interval);//Mantener este estado durante una cierta cantidad de tiempo en milisegundos
DigitalWrite (BluePIN, LOW);//Apague el LED azul
delay (led_blink_interval);//Mantener este estado durante una cierta cantidad de tiempo en milisegundos
}
else {
DigitalWrite (BluePIN, HIGH);//Apague el LED azul
DigitalWrite (GreenPin, LOW);//Apague el LED verde
DigitalWrite (RedPin, LOW);//Enciende el LED rojo
}
}
Aquí, definimos una variable entera llamada “LED_blink_interval” que es inversamente proporcional a la desviación de la temperatura del rango óptimo “temp_dif”. ” Aquí se usa un coeficiente 4000 para convertir el número a algo cercano a 1000. Arduino siempre mide la duración del tiempo en milisegundos, por lo que delay (1000) significa retraso para 1000 milisegundos, o 1 segundo.
Parte 4.3 del programa: compruebe si la temperatura es más alta que el rango de temperatura óptimo. En caso afirmativo, enciende el LED en rojo y parpadea según cuánto se desvió la temperatura del rango óptimo:
else if (TemPC > caliente) {
//Si la temperatura es más caliente que el rango de temperatura óptimo
Serial.println (“Hace calor.”) ;
//Calcular cuánto se desvió la temperatura del rango óptimo
if (temp_dif <= 10) {
/* Calcular el intervalo de parpadeo del LED en milisegundos en función de la temperatura
desviación del rango óptimo; cuanto mayor sea la desviación, más rápido parpadea el LED hasta convertirse en un rojo sólido */
//Parpadear el LED en rojo:
DigitalWrite (BluePIN, LOW);//Apague el LED azul
DigitalWrite (GreenPin, LOW);//Apague el LED verde
DigitalWrite (RedPin, HIGH);//Enciende el LED rojo
delay (led_blink_interval);//Mantener este estado durante cierto tiempo en ms
DigitalWrite (RedPin, LOW);//Apague el LED rojo
delay (led_blink_interval);//Mantener este estado durante cierto tiempo en ms
}
else {
DigitalWrite (BluePIN, LOW);//Apague el LED azul
DigitalWrite (GreenPin, LOW);//Apague el LED verde
DigitalWrite (RedPin, HIGH);//Enciende el LED rojo
}
Parte del programa 4.4—Si la temperatura está dentro del rango óptimo, encienda el LED en verde:
else {//De lo contrario, la temperatura debería estar bien; encienda el LED en verde sólido
Serial.println (“La temperatura está bien.”) ;
DigitalWrite (BluePIN, LOW);//Apague el LED azul
DigitalWrite (GreenPin, HIGH);//Enciende el LED verde
DigitalWrite (RedPin, LOW);//Apague el LED rojo
}
retraso (10);
}
Después de escribir el programa, use el botón “verificar” en el IDE para compilar el código y depurar errores si los hay. Si el código ha sido transcrito con precisión, no debe haber errores de sintaxis ni errores. Si el IDE indica errores, es necesario trabajar a través de cada línea de código para asegurarse de que el programa sea correcto. Tenga en cuenta que a veces el error real indicado por el depurador está en las líneas antes o después de la ubicación indicada. Algunos errores comunes incluyen falta de definición de variable, llaves faltantes, ortografía incorrecta para una función y error de mayúsculas de letras. Algunos otros errores, como la selección incorrecta del tipo de variable, a menudo no pueden ser capturados durante la etapa de compilación, pero podemos usar la función “serial.Print” para imprimir los resultados o resultados intermedios en el monitor serie para ver si parecen razonables.
Una vez que el código del programa no tenga errores, conecte la PC o portátil con la placa Arduino UNO sin ningún cable o pin plug-ins usando el cable USB. Verifique si las selecciones para el tipo de placa y las opciones de puerto en “Herramientas” en el menú principal siguen siendo correctas. Usa el botón “subir” en el IDE para subir el código del programa a la placa Arduino. Desconecte el cable USB de la placa y ahora conecte todos los cables y pines. Vuelva a conectar la placa y abra el “Monitor serie” desde el IDE. La temperatura ambiente actual debe mostrarse en el monitor serie, y las luces LED colorean y parpadean en consecuencia. Si se producen errores adicionales, se mostrarán en el área de mensajes en la parte inferior de la ventana IDE. Volver a depurar si esto sucede. Si no hay errores y todo funciona correctamente, pruebe cómo funciona el sistema de medición cambiando la temperatura alrededor del sensor para ver la respuesta correspondiente del color del LED y la frecuencia de parpadeo. Esto se puede hacer respirando sobre el sensor o colocándolo cerca de una taza de agua helada o en una nevera por un corto tiempo. Cuando la temperatura ambiente está en el rango de punto de ajuste (alrededor de 18°C a 20°C) el LED verde debe estar encendido. Una vez que la temperatura es demasiado alta, solo se debe encender el LED rojo. Cuando la temperatura es demasiado baja, solo se debe encender el LED azul. Si esto no funciona, verifique que haya creado diferentes temperaturas mediante el uso de un termómetro de laboratorio y luego verifique el código del programa.
Paso 7. Desplegar y depurar.
Implemente y depure el sistema bajo el entorno de trabajo objetivo con conexiones de hardware permanentes hasta que todo funcione como se esperaba.
Te dejamos este paso de hacer las conexiones permanentes de hardware para que las completes si te interesa. En la práctica, el empaque del sistema general se diseñará para acomodar el ambiente de trabajo. El producto final terminado se probará extensamente en cuanto a durabilidad y confiabilidad.
Paso 8. Documentar el sistema.
Escriba documentación como especificaciones del sistema, diagrama de cableado y manual del usuario para los usuarios finales. En esta etapa, se redactaría un manual de instrucciones y seguridad y, de ser necesario, se puede enviar el producto para su certificación local. ¡Ahora el sistema que desarrollaste está listo para ser firmado y entregado a los usuarios finales!
Créditos de imagen
Figura 1. Alciatore, D.G., e Histand, M.B. (CC Por 4.0). (2012). Componentes principales en un sistema de medición y control. Introducción a la mecatrónica y a los sistemas de medición. Cuarta edición. Cerro McGraw.
Figura 2. Alciatore, D.G., e Histand, M.B. (2013). Arquitectura de microcontroladores. Adaptado de Introducción a mecatrónica y sistemas de medición. Cuarta edición. Cerro McGraw.
Figura 3. Qiu, G. (CC Por 4.0). (2020). Un diagrama de un sistema de invernadero moderno.
Figura 4. Qiu, G. (CC Por 4.0). (2020). La estructura central de un sistema de control de invernadero.
Figura 5. Qiu, G. (CC Por 4.0). (2020). El esquema del sistema de ventilación.
Figura 6. Qiu, G. (CC Por 4.0). (2020). El esquema del panel de control en sistema de ventilación.
Figura 7. Qiu, G. (CC Por 4.0). (2020). El sistema de suministro de nutrientes y agua.
Figura 8. Qiu, G. (CC Por 4.0). (2020). El esquema del sistema de iluminación.
Figura 9. Texas Instrument. (2020). Sensor de temperatura centígrado de precisión Texas Instruments LM35 en paquete LP (a) y su configuración de pin y funciones (b). Recuperado a partir de http://www.ti.com/lit/ds/symlink/lm35.pdf
Figura 10. Amazon. (2020). Un LED RGB de cátodo común de 5 mm y su pinout. Recuperado de www.amazon.com/tricolor-diffused-multicolor-electronics-components/dp/b01c3zzt8w/ref= sr_1_36? keywords=rgb +led&qid=1574202466&sr=8-36
Figura 11. Arduino. (2020). Una placa Arduino UNO y algunos componentes principales. Recuperado a partir de https://store.arduino.cc/usa/arduino-uno-rev3
Figura 12. Shi, Y. (CC Por 4.0). (2020). Diagrama de cableado para la configuración de la plataforma de prueba.
Figura 13. Sparkfun. (CC By 4.0). (2020). Una placa de pruebas: (a) vista frontal (b) vista posterior con el adhesivo posterior retirado para exponer la parte inferior de los cuatro rieles de alimentación verticales en los lados (indicados con flechas) y las regletas terminales en el medio Recuperado de https://learn.sparkfun.com/tutorials/how-to-use-a-breadboard/all
Figura 14. Shi, Y. (CC Por 4.0). (2020). La interfaz y anatomía de Arduino IDE.
Figura 15. Shi, Y. (CC Por 4.0). (2020). Seleccione la placa correcta y el puerto COM en Arduino IDE.
Figura 16. Shi, Y. (CC Por 4.0). (2020). Diagrama de flujo lógico del programa
Referencias
Alciatore, D. G., e Histand, M. B. 2012. Introducción a la mecatrónica y a los sistemas de medición. 4ª ed. Cerro McGraw.
Arduino, 2019. https://www.arduino.cc/ Consultado el 15 de marzo de 2019.
Bolton, W. 2015. Mecatrónica, sistemas de control electrónico en ingeniería mecánica y eléctrica. 6a ed. Pearson Educación Limitada.
Carryer, J. E., Ohline, R. M., y Kenny, T.W. 2011. Introducción al diseño mecatrónico. Salón Prentice.
de Silva, C. W. 2010. Mecatrónica: un curso fundacional. Prensa CRC.
Universidad de Florida. 2019. ¿Qué hace que las plantas crezcan? edis.ifas.ufl.edu/pdfFiles/4H/4H36000.pdf.