ENCICLOPEDIA DE RADIOELECTRÓNICA E INGENIERÍA ELÉCTRICA Arduino. Operaciones de E/S digitales. Enciclopedia de radioelectrónica e ingeniería eléctrica. Enciclopedia de radioelectrónica e ingeniería eléctrica. / diseñador radioaficionado Después de cargar el entorno de desarrollo Arduino IDE, puede ver que la plantilla del futuro programa que se muestra en la ventana que se abre contiene dos funciones: setup() y loop(). La función setup() inicia el trabajo de cualquier programa. Lo realiza una vez inmediatamente después de aplicar energía a la placa, y también cada vez después de presionar el botón RESET en la placa, lo que configura el microcontrolador a su estado inicial. Dentro de esta función se configuran los modos de funcionamiento de los puertos, se inicializan la interfaz serie y otros dispositivos periféricos, tanto los ubicados dentro del microcontrolador como los externos conectados a él. Esta función, aunque esté vacía, debe estar presente en el programa. La función loop() contiene un bucle infinito que el microcontrolador ejecuta repetidamente hasta que se apaga. Sondea sensores externos, envía comandos a actuadores, realiza cálculos y otras operaciones. Como ejemplo, daremos un programa sencillo que enciende y luego apaga el LED integrado en la placa Arduino, marcado con una L y conectado al pin digital D13, con un período de un segundo. Este programa es uno de los ejemplos estándar incluidos con Arduino IDE. En mesa 1 muestra su texto en la forma en que se adjunta. Tenga en cuenta que en la jerga aceptada entre los fanáticos de Arduino, el código fuente del programa se llama "sketch", un boceto. Tabla 1 Los fragmentos de programa que pertenecen al mismo bloque están delimitados por llaves { y }. En lo que sigue los llamaremos paréntesis de operador. El texto del programa puede contener un comentario que explique su esencia y matices del trabajo. Los comentarios de varias líneas están limitados a combinaciones de /* (al principio) y */ (al final). Los caracteres // comienzan un comentario que termina al final de la misma línea. Al traducir (convertir texto de programa en un lenguaje de programación legible por humanos en código de máquina ejecutado por un microcontrolador), esta parte del texto se ignora por completo. La única línea ejecutable en el cuerpo de la función setup() pinMode (13, SALIDA); establece el pin D13 de la placa Arduino en modo de salida. La función loop() comienza con la línea escritura digital (13, ALTO); Establece el pin D13 en un nivel lógico alto. En Arduino UNO es igual a la tensión de alimentación (+5 V) con respecto al cable común. Esto encenderá el LED. Le sigue la línea retraso (1000); Hace que el programa en ejecución no pase a la siguiente línea durante el tiempo especificado entre paréntesis en milisegundos. Después de una pausa, el programa configura la salida D13 a un nivel lógico bajo correspondiente al potencial del cable común, que apaga el LED. Esta operación se describe mediante la línea escritura digital (13, BAJO); A continuación, el programa vuelve a hacer una pausa durante 1 segundo, tras lo cual repite desde el principio toda la secuencia de operaciones descritas en el cuerpo de la función loop(). Esto continúa hasta que se apaga el microcontrolador. La función delay() debe usarse con precaución. Si ocurre algún evento importante durante el intervalo de tiempo especificado en él (por ejemplo, un sensor se activa brevemente), el programa no responderá a este evento. Cabe recordar que la corriente máxima suministrada por un pin Arduino funcionando como salida es de 40 mA, y la corriente total de todas las salidas no debe exceder los 300 mA. Esto es suficiente para alimentar los LED comunes, también puede conectar directamente a la salida un relé de láminas de bajo voltaje o un motor de vibración de baja potencia desde un teléfono celular. Sin un amplificador, no será posible conectar nada más potente, y esto es peligroso: puede dañar el microcontrolador. Las entradas analógicas A0-A5 se pueden utilizar, si es necesario, junto con D0-D13 como entradas y salidas digitales, accediendo a ellas respectivamente como los números 14 a 19. Ahora modifiquemos un poco el programa. Para un algoritmo tan simple, estas modificaciones no son importantes, pero en casos más complejos sí lo son. En primer lugar, reemplacemos el comentario en inglés por el ruso. Por ejemplo, comentaremos la línea que enciende el LED de la siguiente manera: “Enciende el LED”. No escriba: "Establecimos un nivel alto en la línea D13", esto ya se desprende del texto del programa. Por supuesto, un comentario detallado para cada línea suele ser redundante, pero aun así no deberías ser perezoso a la hora de escribirlo. Después de un tiempo, los detalles del funcionamiento del programa se olvidarán, incluso el propio autor sólo un comentario ayudará a comprender rápidamente su esencia. A continuación, cambiaremos el programa para que el LED conectado no al pin D13, sino al pin D12 del Arduino, parpadee. Como no hay ningún LED en la placa conectado a D12, necesitará un LED externo con una resistencia adicional. Debe conectarse según el diagrama mostrado en la Fig. 1. La resistencia adicional se selecciona de modo que el LED punto a punto esté dentro del rango de 5...10 mA. Esto asegurará que la mayoría de los LED sean lo suficientemente brillantes. En la figura se muestra una placa Arduino UNO con un LED externo conectado. 2.
Es recomendable realizar varios LED con resistencias adicionales. Serán útiles no tanto para fabricar una máquina de efectos de iluminación, sino para verificar rápidamente los niveles de voltaje en las salidas de la placa y monitorear sus cambios de acuerdo con el programa que se está depurando. Para controlar un LED conectado no a D13, sino a D12, en el caso que nos ocupa, bastaría con corregir en el texto del programa todos los números 13 por 12. Sin contar los comentarios, el número 13 aparece sólo en el texto del programa. tres veces, por lo que cambiarlo no es difícil. Sin embargo, a medida que aumenta el volumen del programa, la situación cambia fundamentalmente. Una cosa es reemplazar tres números, pero otra muy distinta es reemplazar varias docenas de números idénticos en diferentes lugares de un programa largo. Además, puede resultar que en algún lugar este número signifique algo completamente diferente y no sea necesario cambiarlo. Para facilitar la realización de dichos cambios, declaramos una variable al comienzo del programa y le asignamos un valor correspondiente al número del pin deseado: PIN LED int = 12; Además, siempre que aparezca el pin número 13, lo sustituiremos por el nombre de esta variable. Si ahora necesitas volver a cambiar la conexión del LED, bastará con cambiar solo un número en la descripción de la variable LEDPIN. El programa modificado se muestra en la tabla. 2. Se debe cargar en la memoria del microcontrolador de la placa Arduino. Para hacer esto, seleccione "Archivo → Cargar" en el menú principal del IDE. Si el programa escrito en la ventana de edición no se ha guardado en un archivo de antemano, el IDE le pedirá que especifique el nombre del archivo en el que desea guardarlo. Después de un tiempo requerido por el IDE de Arduino para traducir el programa a códigos de máquina comprensibles para el microcontrolador, los LED “Rx” y “Tx” de la placa comenzarán a parpadear, señalando la recepción y transmisión de mensajes a través de la interfaz serie del microcontrolador. Tabla 2 Si todo se hizo correctamente, aparecerá un informe indicando la carga correcta en la parte inferior de la ventana del programa. Mostrará información sobre cuánto de los 32 KB disponibles de memoria del programa del microcontrolador fue ocupado por el programa cargado y cuánta RAM se requiere para acomodar las variables. El LED conectado al pin D12 comenzará a parpadear con un período de 2 s. Si conecta una línea de cinco LED a los pines Arduino D8-D12 (Fig. 3) y carga el programa que figura en la tabla en el microcontrolador. 3, se encenderá alternativamente durante 500 ms cada uno de estos LED y el LED conectado al D13 instalado en la placa. Este programa podría haber resultado mucho más largo si el problema se hubiera resuelto de frente, simplemente repitiendo el número requerido de veces en las líneas de función setup() con diferentes números de pin numéricos, configurándolas para la salida, y en el Función loop(): una secuencia de líneas que incluye el siguiente LED, pausa y apaga. Los operadores de bucle for ayudaron a acortar el programa.
Tabla 3 Entre paréntesis después de la palabra clave for, se indica el valor inicial de la variable del bucle - LEDPIN=8, la condición para ejecutar el cuerpo del bucle - LEDPIN<14 y la operación realizada con la variable del bucle después de cada ejecución de su cuerpo - LEDPIN++, que significa aumentar el valor de la variable en uno. Si es necesario, los parámetros del bucle for se pueden cambiar fácilmente. El cuerpo del bucle entre paréntesis de operador sigue la condición. En el primer caso (en la función setup()), consta de una sola línea que se ejecutará seis veces con valores LEDPIN del 8 al 13. En el segundo caso (en la función loop()), el bucle La declaración especifica la ejecución de una secuencia de tres líneas seis veces con los mismos valores de variable. Además de controlar dispositivos externos en cualquier sistema, es necesario obtener información de varios sensores. Sin ellos, incluso el robot más complejo será sólo un juguete de cuerda, incapaz de cambiar su comportamiento dependiendo de las condiciones externas. Con una tensión de alimentación de 5 V, y en Arduino UNO es exactamente eso, se garantiza que las entradas digitales del microcontrolador se percibirán como una tensión lógicamente alta (correspondiente a la lógica) de más de +3 V, y como una voltaje lógicamente bajo (correspondiente al cero lógico) de menos de +1,5 V. Los valores intermedios (incluso cuando la entrada no está conectada en ningún lugar) dan un resultado impredecible y que cambia caóticamente según la instancia del microcontrolador, su voltaje de suministro, temperatura y otros factores. . Por lo tanto, es deseable que siempre se aplique a la entrada digital un voltaje de un nivel lógico alto o bajo conocido. El sensor más simple es un botón normal sin bloqueo, conectado como se muestra en la Fig. 4 a uno de los pines externos de la placa Arduino, en este caso a D7. Cuando se suelta el botón SB1, el nivel de voltaje en la entrada del microcontrolador será bajo (será proporcionado por la resistencia R1); cuando se presione, será alto. Si intercambia el botón y la resistencia (Fig. 5), los niveles también intercambiarán lugares. Ahora la resistencia R1 proporcionará un nivel alto cuando se suelte el botón, y al presionarlo se establecerá el nivel bajo.
La resistencia de la resistencia R1 no debe ser demasiado pequeña, ya que la corriente que fluye a través de ella cuando se presiona el botón se consume de la fuente de energía y reduce la eficiencia del dispositivo. En el caso de la alimentación desde una computadora de escritorio o una fuente de alimentación de CA, esto no es tan importante, pero con un Arduino alimentado por batería, la baja resistencia de la resistencia R1 reducirá en gran medida la posible duración de la batería del dispositivo. Tenga en cuenta que el microcontrolador tiene resistencias internas para realizar la función de la resistencia R1. Por defecto están deshabilitados. Sin embargo, para conectar, digamos, una resistencia interna a la entrada D2, es suficiente agregar la línea a la función setup() modopin(2, INPUT_PULLUP); Consideremos la entrada digital usando el ejemplo dado en la tabla. 4 programas que apagan el LED conectado al pin 13 cuando presionas un botón conectado al pin D7. Se basa en el operador condicional. if (condición) { /*Acciones si se cumple la condición*/ } más { /*Acciones si no se cumple la condición*/ } Tabla 4 Sirve para seleccionar una acción en función de si se cumple o no la condición especificada en ella. Si no es necesario hacer nada si no se cumple la condición, se puede omitir el fragmento else {...}. El uso de declaraciones condicionales le da flexibilidad al programa. Dependiendo del estado de los sensores externos, cambian el orden del programa y el comportamiento del dispositivo equipado con un microcontrolador. En realidad, la verificación del estado del botón se realiza mediante un operador lógico lectura digital (PERO) = ALTO En este caso, compara el valor devuelto por la función de lectura del estado del pin PERO al que está conectado el botón con la constante lógica ALTA y, si son iguales, evalúa como VERDADERO, en caso contrario, FALSO. Tenga en cuenta que la operación de prueba de igualdad se indica mediante dos signos iguales consecutivos. Y un signo igual denota la operación de asignar un valor a una variable. No los confundas, esto conduce a errores difíciles de detectar. Usando el ejemplo del programa que acabamos de comentar, es fácil ver a qué conduce el uso incorrecto de la función delay(). Si "descomenta" (elimina los dos decimales anteriores) la función de retardo (10000) en la penúltima línea del programa, luego de cada ejecución del cuerpo de la función loop() el programa esperará 10 s antes de continuar su trabajo. . Naturalmente, se ignorarán todas las pulsaciones de botones durante este período de tiempo. La capacidad de Arduino para comunicarse con una computadora personal a través de una interfaz en serie es muy útil. Puede usarse no solo para cargar un programa en el microcontrolador, sino también para el intercambio bidireccional de información durante su ejecución. A través de esta interfaz, Arduino puede transmitir la información recopilada a una computadora para su procesamiento o almacenamiento complejo y recibir comandos y datos sin procesar de ella. Así es como pueden interactuar dos dispositivos con microcontrolador. El puerto serie del microcontrolador utiliza los pines digitales de la placa D0 y D1, por lo que a la hora de organizar y utilizar la comunicación a través del puerto serie, no se pueden utilizar para nada más. Por ejemplo, considere el programa que figura en la tabla. 5, que transmite información sobre el estado del pin D12 a la computadora. Si el nivel es alto, el programa envía el código de carácter H a la computadora, y si es bajo, el código de carácter L. Cualquier programa que pueda trabajar con el puerto COM de la computadora puede recibir esta información. El IDE de Arduino tiene un monitor de puerto serie incorporado, con el cual la computadora puede mostrar mensajes de texto recibidos de la placa Arduino y transmitir mensajes escritos por el usuario en el teclado de la computadora. Tabla 5 La línea Serial.begin(9600) en la función setup() inicializa el puerto serie del microcontrolador y establece la velocidad de transmisión y recepción en 9600 baudios. Puede configurar otros valores de velocidad estándar: 1200, 2400, 4800, 9600, 19200, 38400, 57600 o 115200 baudios. En este caso, la velocidad configurada en el microcontrolador debe coincidir con la velocidad a la que está configurado el puerto COM del ordenador u otro dispositivo con el que se vaya a intercambiar información. La velocidad permitida a la que se garantiza una recepción confiable de información depende de la longitud del cable que conecta el Arduino a la computadora. Por ejemplo, utilizando un cable USB estándar de 1,8 m de largo, la computadora recibirá información de Arduino incluso a una velocidad de 115200 baudios. Y si a este cable se le añade un cable de extensión de cinco metros, la velocidad permitida baja a 4800 baudios. La función Seri-al.print() envía información al puerto serie, donde entre paréntesis indican el nombre de la variable cuyo valor de Envío se va a transmitir, o una cadena de caracteres a transmitir. Para distinguirlo del nombre de la variable, la cadena de caracteres está entre comillas. Hay una modificación de esta función Serial.println(). Se diferencia en que, habiendo transmitido la información entre paréntesis (si la hay), la complementa con caracteres de retorno de carro y avance de línea. Comienza una nueva línea y combinación de caracteres en la cadena transmitida. Usando el programa anterior, es fácil verificar que si no se aplican señales externas al pin del microcontrolador configurado como entrada, su estado puede ser cualquier cosa y cambiar caóticamente durante la operación. También puede determinar el valor de voltaje real que el microcontrolador deja de percibir como un nivel lógico bajo y comienza a percibir como un nivel alto. A continuación, considere un programa (Tabla 6) que enciende y apaga el LED en la placa de acuerdo con los comandos recibidos de la computadora a través del puerto serie. Hay que tener en cuenta que la información a través del puerto serie se transmite en bytes. El receptor del puerto serie, que funciona independientemente del procesador del microcontrolador, recibe estos bytes y los almacena en su búfer de 64 bytes. Tabla 6. Para que el programa determine si hay bytes recibidos en el búfer, existe una función Serial.available() que devuelve su número. Si es así, el programa utiliza el Serial. read() lee un byte de un buffer y asigna su valor (el código del carácter recibido) a una variable C de tipo char. A continuación, las declaraciones condicionales comparan el código con las muestras y, si hay una coincidencia, encienden o apagan el LED. Puede enviar comandos utilizando el mismo monitor de puerto serie que se utilizó para recibir información. En la parte superior de su ventana (Fig. 6) hay una línea para ingresar caracteres transmitidos. Después de ingresar un símbolo o su secuencia desde el teclado, haga clic en el botón en pantalla "Enviar". El LED "Rx" de la placa Arduino debería parpadear brevemente, indicando que el microcontrolador está recibiendo información. Por supuesto, la transmisión manual de códigos es un método de control simple, pero lejos de ser el mejor. Por lo general, para esto se escribe un programa de control por computadora especial.
Por lo tanto, utilizando la placa del microcontrolador Arduino, puede crear con relativa facilidad una amplia gama de dispositivos electrónicos simples. Si nos limitamos únicamente a las entradas/salidas digitales, podrían ser máquinas de efectos de iluminación, simples alarmas de seguridad, contadores de diversos parámetros con sensores digitales. Además, no es difícil hacer que el dispositivo interactúe con la computadora. Naturalmente, las capacidades de Arduino están lejos de limitarse a las descritas en este artículo. Esta placa también puede funcionar con señales analógicas, que se analizarán a continuación. Los programas para Arduino mencionados en el artículo se pueden descargar desde ftp://ftp.radio.ru/pub/2016/08/diginout.zip. Autor: D. Lekomtsev Ver otros artículos sección diseñador radioaficionado. Lee y escribe útil comentarios sobre este artículo. Últimas noticias de ciencia y tecnología, nueva electrónica: Máquina para aclarar flores en jardines.
02.05.2024 Microscopio infrarrojo avanzado
02.05.2024 Trampa de aire para insectos.
01.05.2024
Otras noticias interesantes: ▪ Bolígrafo Livescribe 3 para digitalizar notas manuscritas ▪ Control láser mediante sonido. Feed de noticias de ciencia y tecnología, nueva electrónica
Materiales interesantes de la Biblioteca Técnica Libre: ▪ sección del sitio Tecnologías de fábrica en casa. Selección de artículos ▪ artículo Es alegría con lágrimas en los ojos. expresión popular ▪ articulo electricista. Instrucción estándar sobre protección laboral ▪ artículo Cajas en una cuerda. Secreto de enfoque
Deja tu comentario en este artículo: Todos los idiomas de esta página Hogar | Biblioteca | Artículos | Mapa del sitio | Revisiones del sitio www.diagrama.com.ua |