Arduino es una plataforma (hardware & software) de prototipado electrónico basado en los principios de Open Hardware, la idea detras de su creación ha sido proveer a artistas, diseñadores, hobbistas y cualquier otra persona interesada en desarrollar objetos o ambientes interactivos una forma fácil y económica de llevar a la práctica dichas ideas. Este post tiene por misión describir el módelo básico el Arduino UNO y además darnos un poco de contexto respecto a la familia de tarjetas que componen la plataforma Arduino.
El proyecto Arduino, se inició en el año 2005 en el Instituto de Diseño Interactivo de Ivrea (ciudad del noroeste de Italia), gracias al trabajo de Massimo Banzi, David Cuartielles y Gianluca Martino, sobre un proyecto de tesis llamado Wiring del diseñador colombiano Hernando Barragán. Wiring está a su vez basado sobre un IDE llamado Processing que fue desarrollado en el MIT MediaLab por Casey Reas y Benjamin Fry para enseñar programación a artistas visuales y diseñadores. El proyecto Wiring aún está en desarrollo y tiene la meta ambiciosa de ser compatible con muchas arquitecturas de harware, una de ellas los microcontroladores Atmel AVR de 8 bits, es decir se puede usar Wiring para programar tarjetas Arduino. El proyecto Arduino aunque se promociona como una solución hardware y software es en realidad un diseño de tarjeta muy sencillo que estandariza la distribución de los pines de un ATmega328 (para el caso del Arduino UNO) y permite la creación de un ecosistema de tarjetas hijas compatibles que extendienden las funcionalidades de la tarjeta principal, dichas tarjetas hijas reciben el nombre de shields.
La popularidad de la plataforma Arduino tiene sus orígenes en estos factores:
- Es una plataforma abierta y toda la documentación de cómo crear las tarjetas está disponible en línea. No se requiere el pago de derechos de autor por usarla y mientras se mantenga la debida mención de la autoría intelectual puede duplicarse, razón por la cual una avalancha de clones chinos ha aparecido en el mercado.
- El microcontrolador utilizado en el Arduino UNO es un Atmel ATmega328, que se pueden conseguirse hasta por $1.70 si se compra en grandes volúmenes o por menos de $3 si se compra por unidad, lo cual hace fácil y barato reemplazar el microcontrolador de una tarjeta dañada durante un experimento.
- Es multiplataforma debido a que su entorno de desarrollo (IDE) basado en Wiring/Processing está escrito en Java y los drivers para cada plataforma están incluídos en el paquete que se descarga como un archivo comprimido (*.zip para Windows).
- La comunidad detras de Arduino es inmensa y existe una infinidad de bibliotecas listas para usar que permiten conectar un Arduino a casi cualquier cosa imaginable.
Una de las mayores fortalezas de un Arduino UNO es su sencilles y robustez, sin embargo esa es también la fuente de su mayor limitación, un microcontrolador de 8 bits que corre a 16 MHz y sólo ofrece 2 KB de memoria RAM. En dicho hardware no podemos imaginar que corra ningun sistema operativo moderno, pero si tiene un pequeño sistema monitor que es capaz de lanzar a ejecución un simple programa almacenado en su memoria flash, es en dicha memoria flash donde cargamos nuestro programa usando el IDE Arduino que está disponible de forma gratuita en el website del proyecto.
El Arduino UNO tienes estas características básicas:
Microcontrolador | ATmega328 |
Voltaje de operación | 5V |
Voltaje de entrada (recomendado) | 7-12V |
Límites de voltaje de entrada | 6-20V |
Número de entradas/salidas digitales | 14 (of which 6 provide PWM output) |
Número de entradas analógicas | 6 |
Máxima corriente en un pin (en 5 V) | 40 mA |
Máxima corriente en un pin (en 3.3 V) | 50 mA |
Memoria Flash | 32 KB (ATmega328) of which 0.5 KB used by bootloader |
SRAM | 2 KB (ATmega328) |
EEPROM | 1 KB (ATmega328) |
Velocidad de reloj | 16 MHz |
Como se puede observar, la tarjeta ofrece un número adecuado de entradas/salidas para proyectos sencillos, si deseamos un poco más de entradas salidas tenemos el Arduino Leonardo que ofrece un máximo de 20 entras/salidas digitales y 12 entras analógicas, todo ello en el mismo factor de forma de un Arduino UNO, para ello los pines sobre los conectores está multiplexados y se pude reasignar su función por software. En caso de necesitar muchas más entradas/salidas o memoria RAM (pero no poder de cálculo) la otra opción que tenemos es el Arduino Mega 2560, que ofrece 54 pines de entrada/salida digital, 16 pines de entrada analógica y 8 KB de memorira RAM. Aunque el Arduino DUE (el primer Arduino con un procesador ARM), puede ser externamente parecido al Mega y de hecho comparte con este la distribución de los pines de expansión, el hecho de que el DUE opere a 5 V hace que muchos de los shields existentes no puedan operar sin modificaciones con el DUE, razón por la cual no ha tenido toda la aceptación que debería.
Si nuestras opciones requiren algo mucho más potente que un Arduino DUE, no hay una vía clara aún. La único alternativa existente ahora (Octubre 2013) es el Arduino YUN, que no es más que un Arduino Leonardo con una conexión de puerto serial con un Atheros AR9331 (el mismo chip que es el corazón del popular TP-Link TL-WR703N), razón por la cuál la distribución de Linux que usa el YUN que se llama "Linino" está basada sobre OpenWRT y no permite hacer mucho con ella aparte de pasar mensajes entre el puerto serie que conecta el Leonardo con el AR9331. Para proyectos más complejos que requerían ejecutar algoritmos complejos y usar mucha RAM, hasta esta semana la única alternativa era comenzar a mirar más alla de la familia Arduino, sin embargo en el último Maker Faire en Roma, hace un par de días atras se ha anunciado la disponibilidad en el segundo trimestre del 2014 del Arduino TRE que es un híbrido entre un Leonardo y un BeagleBone Black.