2- La Plataforma Arduino

¿Qué es Arduino? Formalmente, esta es una marca comercial bajo la cual se lanzan placas y software oficiales. El nombre Arduino proviene del nombre epónimo de un bar en Ivrea, Italia, donde a los creadores de la plataforma les encantaba tomar una copa. La plataforma que ofrece Arduino incluye hardware (las propias placas) y software (entorno de desarrollo).

La familia Arduino consta de varios modelos de las denominadas placas de desarrollo y depuración. La placa de depuración es, curiosamente, una placa de circuito impreso, en el corazón de la cual hay un microcontrolador, precisamente lo que estaremos programando. Un microcontrolador es un microcircuito que contiene un microprocesador, interfaces de entrada y salida, memoria (Ram y Rom), temporizadores y otras cosas. Sí, un microprocesador es diferente, un microprocesador de hecho solo puede realizar cálculos (como un procesador en una computadora), y un microcontrolador es casi una computadora completa ubicada en un chip de un microcircuito. La mayoría de las placas Arduino utilizan los microcontroladores de la serie ATmega del fabricante de AVR.

Inmediatamente recordamos una idea importante: Arduino no es un microcontrolador, no es un procesador, Arduino es una plataforma (y una marca registrada, por supuesto =)). La placa Arduino es una placa de desarrollo y depuración con un microcontrolador a bordo.


La Pcb Arduino.

Además del microcontrolador, en la placa de depuración hay un cableado necesario para su funcionamiento y los componentes esenciales: este es un oscilador de cristal que establece la frecuencia del procesador, condensadores y resistencias que realizan funciones de filtrado y pull-up, asi como el control de la alimentación.

Arduino "al mínimo": cuarzo, condensadores y poco más.
Arduino «al mínimo»: cuarzo, condensadores y poco más.

Hagamos esto: ¿Qué se debe hacer para ensamblar un dispositivo con un microcontrolador? Es necesario conectar los dispositivos necesarios (en lo sucesivo, “hardware”) a las salidas del microcontrolador, cargar el firmware en el microcontrolador que controlará este hardware y proporcionar a todo el conjunto una fuente de alimentación estable. El objetivo de los desarrolladores de arduino era combinar lo anterior con simplicidad, facilidad de uso y modularidad, convirtiendo así el desarrollo de dispositivos electrónicos en un potente diseñador universal. Este objetivo se logró de la siguiente manera: en la placa, junto con el microcontrolador, se colocó un «programador» para descargar el firmware, un puerto USB y un regulador de alimentación, permitiendo que la placa se alimentara desde una amplia gama de voltajes constantes: 5 -19 voltios. El microcontrolador necesita 5 voltios para funcionar, que le proporciona el estabilizador.


Descargar el firmware de Arduino.

USBasp: programador ISP para AVR incluido Arduino
USBasp: programador ISP para AVR incluido Arduino

En cuanto al llamado programador: inicialmente, la forma de descargar el firmware al microcontrolador es descargar el software a través de ISP (programación en el sistema), que carga el firmware directamente en la memoria del microcontrolador. Este método es bueno y confiable, pero es más caro y no tan versátil como el que se usa en Arduino. Funciona así: en lugar del programador ISP, hay un convertidor USB-TTL en la placa, que permite a Arduino (en su lado hay TTL – lógica transistor-transistor) literalmente comunicarse con una computadora (en su lado – USB ) e intercambiar datos. Pero para comunicarse con la computadora, debe haber un pequeño software ya cargado en arduino que se encarga de recibir el firmware, este es el «cargador de arranque», vive en la memoria del microcontrolador (también conocido como bootloader), que puede capturar datos provenientes de una computadora y cargarlos en la memoria Flash del microcontrolador. Cada vez que se inicia el microcontrolador, el cargador de arranque espera un comando de la computadora, algo como…, ¿quiere descargar un nuevo firmware? y si nadie le responde durante algún tiempo, lanza el firmware residente en la memoria del Mc. Esto tiene varios inconvenientes:

  • El cargador se encuentra en la memoria Flash y ocupa espacio (alrededor del 6%, que no es poco)
  • Cuando se conecta el microcontrolador, el firmware cargado no se inicia inmediatamente, cada vez, el cargador de arranque espera un comando de la computadora durante algún tiempo (un par de segundos) antes de transferir el control al programa en la memoria.

Ambas desventajas se pueden resolver parcial o completamente:

  • Puede actualizar un cargador de arranque no oficial que ocupa menos espacio en la memoria y se inicia más rápido.
  • Puede descargar los bocetos (programas) directamente a través del ISP, en este caso no habrá pérdida de espacio y retrasos en el inicio, ya que el gestor de arranque no estará en la memoria para nada.

Volviendo al convertidor USB-TTL: ¿por qué los desarrolladores de Arduino eligieron este método para descargar el firmware? Sí, todo es muy simple: un microcircuito convertidor USB-TTL es más económico que los microcircuitos que se pueden utilizar en los ISP (los microcontroladores suelen jugar el papel de estos), lo que reduce decentemente el coste de la plataforma. Pero lo más importante es que el uso de un convertidor USB-TTL agrega la capacidad de comunicarse con la placa usando una computadora (teléfono inteligente, tablet) sin usar hardware adicional, es decir, podemos controlar algunos dispositivos (si está incluido en el código del firmware) y recibir datos de Arduino, por ejemplo, lecturas de sensores. Pero lo más importante es que le permite depurar el código desde el Pc, manualmente si, pero aún así depurar.


Software.

En cuanto a la parte de software proporcionada por Arduino, se trata del Arduino IDE (Integrated Development Environment), que incluye un editor de código, un compilador y todo lo demás que necesita para descargar el firmware a la placa. Hablaremos de ello con más detalle en una lección separada.


Modelos Arduino.

Varios modelos de placas arduino
Varios modelos de placas arduino

Ahora llegamos a las placas Arduino en sí, de las cuales hay muchas en este momento debido a la apertura de la plataforma: todos los esquemas y códigos fuente son de dominio público, y puedes hacer tu propia versión de la placa y venderlo, que es lo que están haciendo activamente los chinos. El único punto: la palabra Arduino es una marca registrada, y tendrá que nombrar su placa de alguna manera diferente, de ahí que aparecieron todo tipo de Sparks, Elderberries, Espruino y otras placas llamadas compatibles con Arduino .
Hay muchos tipos de placas, pero utilizan los mismos modelos de microcontroladores. El tamaño de la memoria y el número de patas dependen del modelo de microcontrolador usado, bueno, hay algunos chips especiales. La mayoría de los modelos Arduino tienen MCU de 8 bits de AVR con un oscilador de cristal de 16 MHz (o inferior), es decir, las placas ATmega no difieren en rendimiento, solo difieren en tamaño de memoria, número de pines E/S e interfaces, temporizadores. Los modelos Arduino con Mc del tipo ARM, por ejemplo Arduino DUE, son mucho más potentes que sus contrapartes debido al procesador de 32 bits, pero esa es una historia completamente diferente.

ParámetroATtiny85ATmega328ATmega32u4ATmega2560
Numero de pines83244100
De ellos disponibles5232486
Memoria flash8 Kb32 Kb32 Kb256 Kb
Memoria EEPROM512 bytes1 Kb1 Kb4 Kb
Memoria SRAM512 bytes2 Kb2,5 kB8 Kb
Canales ADC36 (8 SMD)1216
Canales PWM36715
Temporizadores2х 8 bits2х 8 bits2х 8 bits2х 8 bits
  1x 16 bits2x 16 bits4x 16 bits
Interfaz de serieNox1x1x4
Interfaz I2CNosisisi
Interrupciones1 (6 PCINT)2 (23 PCINT)5 (44 PCINT)8 (32 PCINT)
Tableros basados ​​en élDigispark, LilyTinyUno, Nano, Pro Mini, Lilypad, FuerteLeonardo, Micro, Pro Micro, BS MicroMega, Mega Pro
Los modelos de placas arduino y sus características.

Por lo tanto, debe comprender de inmediato que, por ejemplo, Arduino Uno = Nano = Pro Mini = Lillipad en términos de sus capacidades e intercambiabilidad. O Leonardo = Pro Micro. Puede encontrar enlaces a Arduinos chinos económicos en todo Google. En el mismo lugar, encontrará enlaces a una serie de sensores, módulos y otro hardware que se puede conectar al Arduino. Hablaremos sobre las posibilidades de arduino para trabajar con otras plataformas en una de las siguientes lecciones.


Programación.

la programacion de arduino
La programación de arduino

Arduino está programado en el lenguaje de programación C / C ++ con la sintaxis correspondiente. El preprocesador y compilador incorporado (avr-gcc o Win-AVR) perdona muchos errores y hace mucho por el usuario de forma automática, ni siquiera lo sabemos y no pensamos en ello. Las funciones básicas para controlar los pines e interfaces del microcontrolador, las matemáticas y algunas otras funciones / macros se toman de un marco de código abierto para trabajar con microcontroladores llamado Wiring. De ahí que consta el conjunto básico de herramientas de Arduino. En este sentido, los propios desarrolladores de Arduino llaman al lenguaje “C ++ simplificado”, e incluso le dieron un nombre separado: Arduino Wiring.

Aquí es necesario separar el tocino de las chuletas: en el IDE de Arduino, tenemos una gran cantidad de funciones y herramientas diferentes disponibles:

  • Todas las posibilidades del lenguaje C++ que brinda el compilador: tipos de datos, operadores y en general toda la inmensa sintaxis. Programamos en el mismo C, como se puede programar en cualquier otro lugar.
  • El «núcleo» de Arduino es la biblioteca Arduino.h, que se incluye automáticamente en el código. Contiene funciones para administrar pines, interfaces y también tiene un conjunto de todo tipo de funciones y herramientas útiles. También es responsable de inicializar y configurar los periféricos del microcontrolador al inicio. Por cierto, el núcleo contiene bibliotecas estándar para comunicación Serie, Wire, SPI y EEPROM.
  • En la carpeta con el programa hay un conjunto de bibliotecas estándar: para pantallas LCD, motores paso a paso, un servo-accionamiento y algunas otras piezas de hardware.
  • El compilador viene con un conjunto de bibliotecas AVR de bajo nivel (sleep, progmem, watchdog y muchas otras).
  • El compilador te permite trabajar con el microcontrolador «directamente» usando sus registros (puede leer la hoja de datos toda lo noche).
  • También podemos escribir en ensamblador, tomando el control de cada ciclo de reloj del microcontrolador.

Si aprende a jugar libremente en Arduino y de repente cambia a programas de desarrollo en el mismo C++ en entornos de desarrollo más antiguos, se sorprenderá desagradablemente por la gran cantidad de código adicional que debe escribir a mano. Y viceversa, si una persona que sabe C++ mira un código arduino típico, dirá «¿cómo funciona?». El compilador en el IDE de Arduino está ajustado para máximo aprovechamiento y perdón de errores porque es una plataforma de aprendizaje.

Ahora volvamos a un concepto como biblioteca. La vida de un reproductor arduino ordinario está indisolublemente ligada a las bibliotecas, porque una gran comunidad a lo largo de los años de su existencia ha creado una gran cantidad de estas mismas bibliotecas para todas las ocasiones y para todos los sensores y módulos vendidos. Una biblioteca es un conjunto de archivos que contienen código adicional que podemos usar simplemente leyendo la documentación o mirando ejemplos. Este enfoque se denomina «caja negra», es posible que ni siquiera adivinemos qué horror y pesadilla (en términos de la complejidad del código) contiene la biblioteca, pero es fácil usar las capacidades que proporciona este código. Compraste un módulo, encontraste una biblioteca, abriste un ejemplo y eso es todo, el resultado funciona.


Oportunidades.

¿Por qué aprender a trabajar con arduino y la electrónica en general?

  • Este es un pasatiempo de «bricolaje» increíblemente interesante, técnico, que desarrolla el cerebro y relativamente barato con un sinfín de ideas y de realizaciones.
  • La capacidad de crear dispositivos electrónicos y máquinas herramienta altamente especializados, que no tienen análogos a la venta o son demasiado costosos. Incluso para necesidades personales o para el trabajo (un joyero conocido se hizo el controlador de un horno de mufla, que es muy caro).
  • La capacidad de crear nuevos dispositivos únicos para ingresar al crowdfunding y comenzar las ventas y su negocio.
  • Excelente práctica en programación y electrónica, especialmente antes de estudiar una especialidad relevante.
  • Oportunidades en general: automatización de procesos y «máquinas», regulación automática de procesos, control remoto, monitorización de diversas cantidades, dispositivos electrónicos portátiles y estacionarios para diversos fines.

Odiadores de la plataforma Arduino.

En el mundo de los programadores y desarrolladores serios, Arduino es muy denostado. ¿Por qué? Echemos un vistazo a algunos comentarios negativos populares sobre la plataforma.

  • En el IDE de Arduino, trabajar con el microcontrolador se simplifica tanto que el ingeniero de arduino no necesita saber nada sobre su arquitectura y cómo está generalmente programado y configurado: todo se hace en forma de funciones listas para usar y bastante comprensibles.
    • ¿Desde cuándo la comodidad y la sencillez se volvieron malas? Para un principiante, esta es la única forma de familiarizarse con el mundo de la robótica sin estudiar un montón de documentación y recibir una educación adecuada. Permítanme recordarles también que Arduino fue creado principalmente para entrenamiento, y en segundo lugar, para crear prototipos de dispositivos electrónicos de manera rápida y sencilla, este es su fin.
  • Todo esto está bien, por supuesto, pero el código escondido detrás de la pantalla del amigable «Arduino Wiring» es aterrador: detrás de funciones aparentemente inofensivas hay lienzos de código que verificarán, volverán a verificar, reconfigurarán lo que ya está configurado y harán muchas otras cosas aparentemente innecesarias. ¡Este lío funciona muy lentamente y ocupa mucho espacio!
    • Sí, las funciones estándar tienen un montón de protecciones contra tonto principiante, son pesados ​​y lentos. ¡Pero un novato no necesita escribir código donde la velocidad y la memoria son críticas! Y si es necesario, en este momento podrá escribir el código de manera óptima y encontrará análogos rápidos de las funciones de Arduino en algún lugar le la web o en cualquier otro lugar de Internet o las escribirá él mismo. Y una cosa más: el núcleo Arduino está diseñado de tal manera que proporciona compatibilidad de código y bibliotecas para todas las placas Arduino. ¿Ha comenzado a hacer un proyecto en Arduino NANO y no tiene suficiente memoria / pines? Transferimos el proyecto a Arduino MEGA y seguimos trabajando. ¿NANO es demasiado grande para el proyecto? Transferimos a ATTiny85 sin siquiera abrir la documentación: la mayoría de las bibliotecas funcionan en todas las placas compatibles con Arduino, esto es una gran ventaja, aunque a expensas del rendimiento y la memoria.
  • Las funciones estándar de Arduino.h describen una parte insignificante de todas las capacidades y configuraciones que tiene un microcontrolador.
    • ¡Y nadie te prometió todo! Las capacidades del Mc se revelan cuando se utilizan bibliotecas (consulte la lista de bibliotecas ), ya que la comunidad de la plataforma es realmente enorme. Siempre puede aprender a trabajar con hojas de datos y registros y configurar cualquier cosa y cómo desee manualmente.
  • El IDE de Arduino «oculta» importantes configuraciones de bajo nivel al usuario.
    • ¡Y hace lo correcto! Un error, y puedes quedarte con una piedra bloqueada. Si lo desea, a través del IDE de Arduino, puede flashear los fusibles y ajustarlo para otras frecuencias.
  • ¡Arduino para niños! Los tíos serios trabajan con «bare metal».
    • Eso es correcto?, para niños y amas de casa. La placa Arduino está concebida para la creación de maquetas, prototipos, se puede considerar como parte de un “kit de construcción” electrónico para entrenamiento. El tablero tiene todo lo necesario, ¿por qué no usarlo incluso como el corazón del proyecto?
  • ¡Arduino IDE para niños! Los tíos serios trabajan en entornos de desarrollo de adultos.
    • Es cierto?, pero hay una pequeña advertencia: Arduino IDE es oficialmente gratis, después de una instalación simple (Siguiente, Siguiente, Siguiente, Finalizar) está inmediatamente listo para funcionar: simplemente seleccione una placa de la lista y comience a escribir código. Los entornos de desarrollo de adultos requieren un enfoque adulto y la barrera de entrada para trabajar con ellos es desproporcionadamente alta. Además de la difícil instalación y configuración, encontrará configuraciones avanzadas del microcontrolador en modo manual, lectura de documentación y hojas de datos, una interfaz «adulta» y muchos matices en la programación y la configuración del compilador. Tomará mucho tiempo estudiar todo esto.
  • Arduino caminan en un círculo vicioso, nunca se desarrollarán más allá del LED parpadeante.
    • ¿Por qué? La plataforma no limita al desarrollador de ninguna manera …
  • No puedes crear algo realmente complejo e interesante en Arduino.
    • ¿Porqué entonces? El IDE de Arduino no limita al desarrollador de ninguna manera, puede abandonar completamente Arduino.h y comenzar a codificar desde cero utilizando registros e inserciones de ensamblador, es decir, exactamente igual que en un entorno de desarrollo adulto . ¿no es suficiente? Por alguna razón, basta con crear impresoras 3D y otras máquinas CNC multi-eje, cuyo firmware consta de decenas de miles de líneas de código.
  • ¡Y STM32 es mejor! ¡Y muchas veces más potente! ¡Y tiene más oportunidades! Y es mas barato !!!
    • Si si si. Pero no olvides el umbral de entrada y el tamaño de la comunidad con contenido, bibliotecas y ejemplos «para novatos», así como la complejidad de trabajar con STM en general, compare con el trabajo con Arduino. En cuanto a las capacidades y la velocidad de trabajo, para la mayoría de los proyectos de aficionados, Arduino (ATmega328 / 2560) será más que suficiente, especialmente si sabe cómo escribir un código óptimo .
  • La calidad del código bajado «de Internet» es terrible.
    • Sí, gracias a ejemplos estándar simples pero comprensibles, la audiencia de usuarios de arduino ha crecido muy rápidamente y literalmente inundó Internet con sus proyectos, atrayendo así a otros principiantes a este pasatiempo. El 99% de los ejemplos educativos, los ejemplos de trabajo con bibliotecas y módulos están escritos de manera simple y de forma no óptima: variables int para todo en una fila, el delay ubicuo, bucles de bloqueo, etc., además de las funciones de arduino impías. La gente toma estos ejemplos como base y continúa escribiendo. Pero estas personas están en el umbral de una puerta muy grande llamada robótica. Habiendo cruzado este umbral, descartando todos los ejemplos torcidos y aprendiendo cómo construir correctamente la estructura de su código, se encuentran en un mundo de infinitas posibilidades para la creatividad y la investigación, un mundo de proyectos infinitamente interesantes y diversos en Arduino. Para ello estoy escribiendo estas lecciones.

¿Qué más me gustaría decir sobre lo negativo de los «profesionales»? En la mayoría de los casos, son simplemente celosos: en «su tiempo», para crear incluso un proyecto simple basado en un microcontrolador, fue necesario gastar una gran cantidad de tiempo estudiando documentación en inglés para un modelo Mc específico, en todas las demás piezas de hardware y microcircuitos, en el proyecto tubo que aprender cómo trabajar en un entorno de desarrollo hostil, comprar un programador costoso, etc. Y hoy en día puede comprar una placa por 15 €, conectarla a USB, ejecutar un programa como «Bloc de notas con un botón de descarga» y comenzar a codificar utilizando una gran cantidad de bibliotecas y ejemplos listos para usar para casi cualquier hardware del mercado y encontrar respuesta a cualquier pregunta en Google.


Deja un comentario