ARDUINO: Qué es ? Para qué sirve ? Cómo y cuando se usa ?


Si buscan en estas líneas leer por enésima vez la historia de Mazimo Banzi, ése simpático gordito italiano parecido al de cazadores de tesoros en el canal de la historia o en su defecto por tercera o cuarta vez el mito o verdad vaya a saber uno del alumno Portugués al cual le robaron un proyecto escolar no sigan leyendo, seguramente me ponga pronto a hacer una nota englobando a ambas historias junto con mapas, fotos tomadas por mí en Ivrea, Italia en 2019 y mis conclusiones personales que nada tienen que ver con las distintas facetas de la verdad pero son sólo datos recopilados in situ.

La electrónica como toda ciencia y técnica no tiene límites en cuanto a aprendizaje y descubrimiento se refiere, día a día surgen nuevos componentes, nuevas técnicas, modernas herramientas e incluso tecnologías enteras que a veces, las mas, complementan las existentes como es el caso de Arduino aunque otras directamente las sacan de circulación como sucedió con las válvulas al aparecer el transistor de la Bell Laboratories. Por ende ningún electrónico que se precie de tal lo sabe todo ni mucho menos sabe suficiente; con suerte y mucho esmero puede saber bastante pero siempre hay sitio para mas conocimiento y siempre es necesario saber mas para no quedar relegado en el tiempo. Todo nuevo componente, toda nueva técnica o tecnología requiere que el técnico, aficionado o incluso ingeniero sepa de que se trata, en que le va a ser de utilidad, de que forma se emplea y en que situaciones.

Arduino es un conjunto de herramientas formado por las placas de desarrollo, el entorno de programación para computadora o IDE y un extensísimo repositorio mundial de librerías y material de consulta absolutamente libre y descentralizado de la propia empresa fundadora. Por supuesto que este repositorio creció así mucho después de lanzado el producto. Así podemos decir que tenemos el hardware, el software y el soporte respectivamente; partes mínimas e indispensables para cualquier herramienta que se precie de ser viable hoy en día. Mas allá de sus orígenes académicos a principios de siglo y ya muy lejos de dicho entorno puesto que hoy tiene un alcance total en todas las áreas donde se aplica la electrónica incluso en la producción se puede afirmar que Arduino hoy por hoy acerca por un lado a aquellos informáticos que todavía son muy temerosos del soldador pero quieren programar componentes o electrónica así como a aquellos técnicos, ingenieros o entusiastas de años en la electrónica que todavía miran el teclado con mas temor que respeto. Para los primeros años del siglo actual Arduino ofrecía una forma fácil, rápida y un poco mas accesible que las demás opciones en mercado por aquellos tiempos (pero ni remotamente cercano a barato) para hacer un desarrollo electrónico basado en un microcontrolador moderno, con poco tiempo de aprendizaje para su uso y con resultados mas que aceptables. Las placas Arduino empleaban un conector DB9 de puerto serie o COM para conectarse a la PC, PC que ejecutaba un muy sencillo pero suficiente entorno de desarrollo que a lo largo del tiempo se mantuvo así siendo este uno de los pilares de su éxito. Recién en el año 2019 Arduino decidió darle forma a un entorno o IDE versión PRO con algunas funciones extra. Aún está en una etapa incipiente de su desarrollo y se lo puede descargar sólo con fines de testeo mas no se lo recomienda para uso confiable aún.

Lo cierto es que allá por el año 2003 teníamos por un lado a una muy importante cantidad de electrónicos que no habían conseguido hacerse de la tecnología y el conocimiento necesario para programar microcontroladores en ASM ya sean de Microchip, de Atmel, de Motorola que luego sería Freescale y luego sería cadáver, de Textas y de tantos otros, cada empresa tenía sus formidables componentes y sus excelentes herramientas. Costosas herramientas difíciles de pagar desde los siempre improvisados talleres latinoamericanos, ni hablar de la mayoría de los laboratorios escolares e incluso compiladores que casi siempre eran pagos! Y si algo sabemos los electrónicos es que comprar libros no hace eruditos, luego de hacerse de los equipos para programar microcontroladores, luego de comprar los compiladores y luego de comprar los chips en si hay que aprender a utilizarlos y esto durante el tiempo que el electrónico va a desatender sus generalmente poco rentables actividades. No es difícil entender visto así porqué no prosperó demasiado este mundillo de la electrónica programable antes de Arduino. Excepcionalmente Microchip permitía con cierta economía hacer uso de sus productos, desde fines del siglo pasado herramientas como el PICStar Plus podían no ser necesarias gracias a programadores caseros que iban desde un puñado de componentes pasivos hasta sofisticados diseños pasando por todo tipo de equipos intermedios generalmente todos basados en el puerto paralelo de una computadora PC. Todavía esta disponible a modo histórico el esquema del Programador PIC Pablin! basado en puerto paralelo utilizando un excelente software libre llamado ICProg. Pero seguía siendo necesario tener el programador ya sea hecho por uno o comprado y eso espantó a mas de uno.

Y aquí la tienen una de las placas de la primera época de Arduino donde todavía se podía ver los nombres de sus creadores, la web hospedada en un sitio gratis, el clásico MADE IN ITALY y nada menos que a pasos de donde se inventó la primer computadora útil del mundo pero eso será texto de otras notas!, un microcontrolador colocado con un zócalo algo que aún hoy se ve en las placas originales y en algunas copias chinas, el conector de comunicaciones por puerto COM, un LED que mas luego explicaré porqué es tan importante, el oscilador con sus capacitores asociados, la entrada de alimentación y su regulador de tensión y unos cuantos conectores hembra rotulados para una facil identificación. Como se escribió además de un hardware que serían estas placas hace falta un software.

Esto es lo que se ve cuando uno corre en la computadora el entorno de desarrollo integrado o IDE de Arduino algo que para un informático si bien tiene sabor a poco al ver las llaves y funciones piensa para sus adentros "ah! Esto es C ojo, no es cualquier cosa..." y si lo ejecuta un electrónico de la vieja escuela que para lo único que vio un teclado fué para rescatar alguna pieza de su interior no se espanta con una tremenda cantidad de opciones, ventanas, menús, indicaciones y demás datos casi siempre irrelevantes a menos que hagan falta. Aquí está lo básico, mínimo, necesario y por sobre todo suficiente porque el resto viene por dentro, donde no se puede ver por mas que a uno le cuenten el cuentito que esto es libre y de código abierto. Un aspecto que resalta es que a los fuentes desarrollados para arduino se los llame libretos o sketch no son códigos fuentes o source files o proyects enviroments o sofisticadas denominaciones. Son libretos ya de por sí casi que da gusto leerlo! Por supuesto que esto no queda en una cara bonita, instalar Arduino en la PC es hacer soble clic en un archivo bajado de la web, no pregunta absolutamente nada, no ofrece ningún tipo de dificultad ni que compilador instalar, ni datos relativos a herramientas externas, ni nada. Simple es demasiado! RE Simple! Y tras ejecutar el IDE sale lo que se ve arriba donde deberemos escribir nuestro programa el cual tiene sus distintivas dos etapas, la configuración posterior al arranque del sistema microcontrolado y el bucle, ciclo infinito denominado loop que quedará ejecutándose en forma continua. Escrito el programa y teniendo la plaqueta Arduino conectada a la PC y a la alimentación bastará con presionar el segundo botón de la barra de botones del IDE el que tiene una flecha hacia la derecha para que el programa fluya vía comunicación serie desde la PC hacia el microcontrolador de la placa Arduino no sin antes compilarse que básicamente es un proceso informático por el cual las instrucciones que el programador escribió en el IDE en un formato amigable y entendible se convierten en una seguidilla de ceros y unos imposibles de comprender para la mayoría de los mortales denominado código de máquina. Dichos ceros y unos son los que en definitiva estando en su debido sitio en la memoria de programa del microcontrolador llevarán a cabo las instrucciones programadas. Todo programador sabe que lo primero que debe conseguir es hacer aparecer en pantalla de su computadora las palabras HOLA MUNDO, mas todo programador de microcontrolador sabe que debe conseguir hacer destellar una luz o LED, esto no es caprichoso en si, el hacer destellar un LED conectado a uno de los terminales de un microcontrolador denota que el programador logro por un lado entenderse con el lenguaje de programación de dicho elemento, conseguir que un terminal del mismo se comporte como una salida de corriente y esta corriente hacer brillar el LED en intervalos, intervalos que denotarán que el programador pudo dominar el factor tiempo algo que cuando se programaba en ensamblador o ASM no era tan simple de hacerse en forma controlada y precisa.

Aquí el primer programa, realizado al momento de escribir esta nota para el sitio y como única finalidad demostrar la simpleza pero no por ello menos potencia de esta herramienta. En la función setup se escriben aquellas sentencias o instrucciones que queremos se ejecuten por única vez al arrancar el programa. En este programa le pedimos que configure como salida el terminal del microcontrolador destinado al LED incorporado en la placa de fábrica, esto para evitarnos el tedioso trabajo de colocar un LED y una resistencia limitadora en serie en un protoboard. En que pin físicamente hablando se encuentra conectado el LED ? Vaya quien a saber! Eso no nos interesa porque LED_BUILTIN hace referencia a ese dato el cual el entorno de programación conoce. Esto en un microcontrolador PIC de fines de los años 90 sería impensable y mas en ensamblador! Pero no es un logro de Atmel el fabricante del microcontrolador empleado sino de la gente de Arduino a la hora de realizar el programa. Configurado el pin del microcontrolador destinado al LED como salida se cae el bucle infinito o ciclo perpetuo. En dicho ciclo primeramente se apaga el LED poniendo en bajo el terminal donde esta conectado, luego se hace una espera de 1.950 ms (casi 2 segundos) y luego se enciende el LED poniendo en alto el pin del micro y luego se hace una pequeña espera de sólo 50ms con lo cual tenemos un flash cada dos segundos. No es capricho este tiempo, aquellos informáticos que se están arrimando a programar Arduino estarán pensando 1.950 y ocho bits de uC... En fin, esto no es un curso pero todos y cada uno de ustedes en estas pocas líneas tendrá con que asombrarse.

Pasó el tiempo y el consorcio USB conformado por los grandes pulpos de la computación pusieron todo el dinero necesario y un poco mas también para que los fabricantes de computadoras dejen de colocar en sus chasis conectores para puerto serie y para puerto paralelo, los famosos DB9 y DB25 respectivamente. La gente de Arduino, conciente que era un camino sin retorno en tiempo prudente lanzaron al mercado placas Arduino con conexión USB con conector tipo B osea que ahora ni siquiera había que comprar un cable para DB9 como antes, basta con usar el de la impresora o escáner porque es el mismo! Otro gran acierto puesto que ya ni la fuente de alimentación externa era obligatoria, hoy si bien los Arduino siguen trayendo dicho conector tipo barril para cuando se lo usa desconectado de una PC la placa bien puede recibir alimentación desde el conector USB de la PC.

Por aquellos entonces Motorola ya se había desprendido de su división de microcontroladores y había pasado a ser Freescale, Texas no lograba terminar sus modernísimos dispositivos de 32 bits y puesto que sus micros de baja capacidad eran carísimos se estaba quedando sin mercado. La única que vio todo esto espectante y no hizo nada fue Microchip puesto que sus PIC's se vendían todos y cuando hacían partidas demás también se vendían y seguramente en algún meeting de esos que organizan las fábricas de componentes habrán comentado mas de una vez que la "moda" Arduino se pasaría pronto. Claro está que Arduino salvó las papas financieras de Atmel puesto que estaban en la quiebra para cuando nace Arduino. No hay que olvidarse que mientras Arduino permitía a casi cualquier electrónico o informático pero por sobre todo cualquier estudiante de bajo presupuesto hacer experiencias de forma amena y simple con un microcontrolador flash de 8 bits y 32KB de memoria de programa Microchip tenia como caballo de batalla al legendario PIC16F84A también flash, también de bits pero de sólo 1K de memoria de programa jamás Microchip podría ganar una batalla contra Arduino con ese componente, el único micro que por aquel entonces tenía Arizona Microchip compatible con el Atmega usado en los arduinos era el PIC18F452 un chip con un precio restrictivo incluso hoy día casi veinte años después. Para cuando Microchip quiso ver un PIC en un aplaca arduino esta idea llegó demasiado tarde, demasiado cara y con sabor a plagio.

Y como se programaba esta placa con tremendo microcontrolador ? Con el IDE de Arduino ! Porque una clave para que la plataforma Arduino tenga el éxito que tiene es el Wired que se encarga por dentro de un IDE austero casi carente de gracia de relacionar las instrucciones simples de Arduino con lo necesario para cada microcontrolador. En otras palabras la interfaz entre el sketch y el código fuente la hace el Wired y luego se pasa por el compilador. Por ello no se puede saber cuanto se ocupa de la memoria de programa hasta que el programa esta linkeado por el Wired, convertido a código de máquina por el compilador y recién ahí se puede saber que va a ocupar y no menos importante aunque hoy información despreciada por muchos que tiempo de máquina demandará. No hace falta aclarar porqué que Microchip vendió muy pocas placas de estas.  

Para que un programa compilado pueda ser grabado en un microcontrolador sin la utilización de un programador específico y sólo sea necesario una conexión de datos normal ya sea puerto serie directo o puerto serie a través del USB el microcontrolador debe contar con un programa anfitrión encargado de dicho diálogo con la computadora. En algunas circunstancias ese programa llamado BOOTLOADER puede afectarse ya sea por un error eléctrico a la hora de usar la placa o bien por un error de programación que termine en el quiebre de dicho programa. Para evitar tener que tirar la placa y comprar una nueva la misma cuenta con seis pines denominados JTAG a través de los cuales se puede reprogramar el microcontrolador vacío con un BOOTLOADER de arduino. De este proceso se encarga otro arduino que si funcione y un programa específico dentro del IDE algo demasiado fácil de hacer! 

La caprichosa forma de las placas Arduino se denomina Arduino Uno Form Factor y son la guía para cuanto módulo de expansión se le ocurra a los chinos fabricar, desde pantallas LCD con pulsadores hasta módulos celulares pasando por conexiones para muchos servos de RC o bien receptores de GPS. TODO lo que se te ocurra existe para enchufarle a un Arduino, sin soldador, sin ver en que pata va cada cosa, sin ver niveles lógicos ni de tensión. NADA, se enchufa y funciona.

Con el correr del tiempo nuevos microcontroladores cada vez mas potentes fueron saliendo, la última revelación de la industria es la firma 100% ESPRESSIF fabricante de los ESP8266 y los galardonados ESP32. Como era de esperarse también vienen en formato Arduino y también se programan usando una gran variedad de herramientas incluido el IDE de Arduino.

Aquí tenemos el clásico conector USB en este caso un Micro B, el conector barrilito de alimentación el módulo ESP32 y los componentes necesarios para que todo funcione en el entorno Arduino y con placas creadas para tal uso. Por lo que los pines son totalmente iguales a los de una placa Arduino Uno.

Trabajar con Arduino no significa entregar a un cliente un montón de plaquetas ensanguchadas unas con otras, cables del tipo conecta fácil y armazones de prototipar, Arduino es una herramienta y como tal una vez logrado el funcionamiento requerido se puede migrar hacia un circuito impreso dedicado donde el microcontrolador esté soldado en superficie sin zócalo, donde los componentes no sean propios de un desarrollo en etapa prototipo sino un producto final.

Este, por ejemplo, es un controlador de velocidad para motor brushless o sin escobillas. El proyecto está basado en Arduino y una vez lograda la electrónica apropiada para las potencias de un motor de este tipo (ver mosfets y drivers de mosfets) una vez lograda la fuente para el microcotrolador y un suministro estable de corriente (nótese el capacitor por fuera de la placa) se puede producir una placa de circuito impreso a medida y sin complicaciones por lo que Arduino no es solo un juguete o un elemento para aprender.

En estos momentos, marzo de 2020 y con todo esto del COVID-19 y la pandemia del coronavirus en mi país, Argentina, muchas personas están trabajando día y noche sin dormir para fabricar respiradores para asistir a los enfermos que son afectados y sus vidas peligran. Un gran amigo de este sitio y mío en lo personal que está abocado al 101% a esta tarea me comentó que al principio iba a utilizar PIC's para el control de estos equipos pero cuando desde el ministerio de salud de la nación le indicaron que prepare todo para que esto se pueda replicar en toda la Argentina se dio cuenta que no todos tienen el equipo necesario para programar PIC's en estos momentos el mas usado es el PICKit 2 que si bien es un equipo que se puede armar en casa lleva su tiempo y tiene su coste en cambio una placa Arduino se enchufa en la PC como cualquier impresora y se programa con el mismo cable! Así que el respirador que esta persona está desarrollando a contra reloj y por cuyo trabajo no puedo dejar de felicitarlo será comandado por una placa Arduino para su fácil réplica en todo sitio donde sea necesario.

Debe quedar mas que claro que trabajar con PIC's no implica ser programador en ensamblador ni mucho menos que trabajar con Arduino no implica ser un desarrollador de poca monta. Son cosas muy distintas. Los PIC's son sólo microcotroladores que en estos tiempos mayormente se programan en C y no en ensamblador en tanto Arduino es una herramienta completa formada por plaquetas que tienen en su centro un microcontrolador y un entorno de desarrollo o IDE con una de las librerías de soporte en línea mas grandes que existe sino la mas grande.

Es un dicho popular el famoso "mientras no falte todo bien y si sobra mejor" bueno aquí está un problema de Arduino que todo desarrollador deberá saber llevar para no volverse loco. Para la mayoría de los requerimientos de librerías hay demasiadas respuestas y si bien son todas muy parecidas son distintas entre sí y al ser Arduino libre, de código abierto y gratuito cada tanto se da el famoso "no te quejes si no anda 100% es gratis" y ahí es cuando otras empresas como CCS la desarrolladora del compilador C mas efectivo para microcontroladores PIC sacan ventaja. Hay que tener muy presente que no todo lo que se ofrece funciona totalmente, algunas cosas están muy bien logradas otras tienen muchas falencias y otras, las mas, con poco y esmerado trabajo quedan funcionando bien. Pero hay que prestar atención y no instalar librerías al tun tun para evitar problemas futuros.

Habiendo respondido con mucho detalle las primeras preguntas del título toca el cuando se usa ? y aquí el sentido común es quien manda. Si no se tienen conocimientos de microcontroladores y buscamos hacer nuestras primeras armas en esto Arduino es lo ideal, se deben hacer tantos proyectos como sea posible teniendo presente que mientras mas se practique al conocer el sistema mas se podrá conseguir a la hora de desarrollar un trabajo que nos encarguen! Si en cambio se tienen conocimientos de otras tecnologías como los PIC's y se nos pide algo que no amerite el uso de un Arduino por tamaño, por costo, por producción (a nadie se le ocurre abrir un televisor y encontrarse en su interior un Arduino Nano!) en esos casos se usan microcontroladores directamente que bien pueden ser PIC's, bien pueden ser Atmel usando el Atmel Studio o bien usando Arduino. De la forma que se escriba y suba el programa no cambia el resultado mientras funcione perfecto.  Sólo por establecer un punto de comparación les copio el fragmento de un trabajo realizado para un cliente quien me pidió que le haga un semáforo decorativo (solo el programa para el microcontrolador).

Esta persona iba a utilizar un 555 para generar los pulsos y un 4017 para la secuencia, algunos componentes discretos y bueno, para que tanto si al fin de cuentas se trata de gobernar el encendido de tres LED's! Así que que se usa ? Arduino o PIC ? Bueno, este cliente en particular ya usa PIC's en otros desarrollos que me encargó y tiene en sus existencias PIC12F508 que es un diminuto microcontrolador de 8 pines donde como máximo seis de ellas pueden ser entradas y salidas de uso general y las dos restantes 5V y masa, no requiere oscilador externo como un cristal o red RC, no requiere circuito de reset, no requiere nada mas que un capacitor de 100nF en paralelo a los pines 1 y 8 que son alimentación y masa respectivamente por cuestiones propias de desacople de la fuente! Para que hacerle usar un Arduino que vale mucho mas y va a tener el mismo resultado. Por supuesto que una llave permite poner el semáforo en modo secuencial o funcionamiento normal y en otra posición en amarillo intermitente. Ven en el fragmento del programa que la forma de escritura es la misma que Arduino, el C puro y que todo se demarca entre llaves y todo es entendible por lo que si en un futuro el que hoy está decidido a empezar con Arduino en el mundo de los dispositivos programables mañana siente que quiere hacer lo propio a los PIC's en lenguaje C de CCS que es el programa mostrado arriba podrá hacerlo casi sin esfuerzo. Hoy todo tiende a este tipo de programación.

No es menos importante la cantidad de contenido no apto para personas que razonan hay por ahí dando vueltas porque como muchos no son mas que entusiastas y ni conocimientos de electrónica tienen por ahí arman engendros que asustan y hasta son peligrosos! Mas de uno habrá volado un puerto USB o toda una computadora sin dudas pero lo importante es que la herramienta les haya permitido incursionar.

Pablo Canello, 25/MAR/2020