Introducción a Arduino®. El Arduino UNO R3 y sus características.
Definición de Arduino®
Arduino® es una plataforma abierta basada en un hardware (placa con un microcontrolador) y un software (ambiente de programación) que sirve para facilitar el uso de la Electrónica y la Programación en proyectos de automatización en múltiples áreas de aplicación. Se fundamenta en el hardware y software libres, lo que permite la manufactura de las placas Arduino así como el uso y distribución del software por cualquier persona.
Arduino es una tarjeta o placa electrónica programable con el lenguaje Arduino. Esta tarjeta contiene un microcontrolador de la empresa Atmel y los elementos necesarios para su funcionamiento. Esta tecnología, por tanto, está conformada de dos partes fundamentales: hardware (tarjeta programable) + software (lenguaje de programación).
Está destinado a cualquier usuario que desarrolla prototipos electrónicos, proyectos interactivos, automatización electrónica o dispositivos digitales que puedan detectar y controlar objetos del mundo real. Arduino se enfoca en la versatilidad, facilidad de uso y accesibilidad de la electrónica y programación de microcontroladores en proyectos multidisciplinarios. Esta plataforma permite a los fabricantes crear diferentes tipos de placas a las que el usuario final puede darles múltiple aplicación dependiendo de sus necesidades.
Siendo una plataforma de hardware libre, ofrece las bases para que cualquier persona o empresa pueda crear sus propias placas, pudiendo ser diferentes entre ellas, pero igualmente funcionales al partir de la misma base (el hardware libre es aquel cuyas especificaciones y diagramas eléctricos son de acceso y uso público, de manera que cualquiera puede replicarlos). Lo mismo se aplica al software libre Arduino IDE (Entorno de Desarrollo Integrado), que es un ambiente de programación con el que cualquier persona puede crear aplicaciones (programas) para las placas Arduino, de manera que se les puede dar todo tipo de utilidades (el software libre es aquel cuyo código es accesible por cualquiera para que pueda utilizarlo y modificarlo).
Las tarjetas o placas Arduino están disponibles comercialmente en forma de placas ensambladas o también en forma de kits DIY "Hazlo tú mismo" (Do It Yourself). El sitio web de Arduino tiene una sección especial donde se puede descargar (gratis) el software Arduino IDE, compatible con Windows, Mac y Linux.
Existen varios tipos de tarjetas Arduino, entre las más conocidas tenemos: Uno, Mega, Nano, Due, Pro Micro, Pro Mini, Leonardo, Mega ADK y Lilypad.
Cómo funciona una tarjeta Arduino®?
Después que la tarjeta ha sido programada por el usuario, el microcontrolador a bordo ejecuta a muy alta velocidad las instrucciones almacenadas en su memoria cada vez que se conecta la energía. La ejecución de instrucciones se realiza secuencialmente desde la primera hasta la última; si en cualquier momento se interrumpe la energía el microcontrolador empezará nuevamente desde el principio la próxima vez que se encienda. El mismo efecto se obtiene cuando el usuario presiona momentáneamente el botón de Reset. Normalmente la placa Arduino recibe datos o señales de entrada, por ejemplo de algún sensor, realiza operaciones con dicha información, toma una decisión en función de las instrucciones programadas y, por último, envía una o varias señales de salida, generalmente hacia un módulo de control de un actuador o algún dispositivo de visualización LED o LCD.
Cuáles son las características de Arduino®?
Arduino fue pensado como un sistema integral que facilite en todos los sentidos la difusión y aplicación de la Electrónica con microcontroladores; con esta idea principal en mente ha sido desarrollado alrededor de las siguientes características fundamentales:
- Código Abierto (Hardware y Software libres). Toda la información para la enseñanza, el aprendizaje y el desarrollo de proyectos, así como los diagramas eléctricos, el software y las actualizaciones son de libre acceso y distribución sin costo alguno.
- Flexibilidad y Versatilidad. Cada tarjeta Arduino puede adaptarse para operar en múltiples aplicaciones. Los pines del microcontrolador son fácilmente accesibles a través de terminales hembra o macho comunes.
- Amplia compatibilidad. El entorno de programación Arduino IDE es totalmente compatible con los sistemas operativos más populares: Windows, MAC y Linux, pudiendo operar incluso en versiones antiguas de estos sistemas y en computadoras con recursos limitados de hardware.
- Lenguaje de programación de fácil comprensión. Basado en el popular C++, el lenguaje Arduino es sumamente fácil de entender y aplicar exitosamete desde el principio (tiene una magnífica curva de aprendizaje).
- Bajo precio. Las placas Arduino se caracterizan por su bajo costo lo que contribuye enormemente a su gran difusión. Por ejemplo, el Arduino Uno tiene tan solo un precio de US$10.00 aproximadamente (Ecuador, año 2020).
- Re-usabilidad. El mismo hardware puede emplearse una y otra vez para infinidad de aplicaciones con sólo modificar las conexiones y la programación.
- Gran comunidad de desarrolladores. Actualmente hay miles de personas conformando la comunidad de Arduino, los cuales se encargan de ayudar en la solución de problemas, responder las preguntas de los usuarios, elaboración de la documentación, desarrollo y actualización de librerías, actualizaciones del Arduino IDE y todo lo relacionado con el uso y mantenimiento de la plataforma.
¿Para qué sirve Arduino®?
Las placas Arduino sirven para ejecutar los programas del usuario escritos en el lenguaje de programación de Arduino. Estos programas son almacenados en el microcontrolador a bordo disponible para el usuario y contienen todas las instrucciones que interactúan con los circuitos electrónicos del mundo real conectados a la misma placa.
En la mayoría de aplicaciones las tarjetas Arduino se complementan con el uso de dispositivos de entrada o salida (Sensores, Actuadores, Módulos y Shields), con los cuales conforman un Sistema Microcontrolado que sirve para realizar automatización o control electrónico en sectores como la industria, los sistemas de vigilancia y seguridad, el comercio, la robótica, las máquinas CNC e impresoras 3D, la medicina, la domótica, la industria automotriz, la exploración terrestre, marítima y espacial, el hogar, la agricultura, la educación, los aficionados a la Electrónica y en general en cualquier proyecto, sea grande o pequeño, donde se vea la necesidad de conseguir algún grado de automatización electrónica. Se puede afirmar que en la actualidad casi no existe límite al rango de aplicaciones debido al grado de avance y difusión de la Electrónica con microcontroladores.
Los dispositivos de entrada son aquellos que se conectan en los pines que han sido configurados como entrada, entre los más importantes tenemos: sensores, detectores, interruptores, teclados, pulsadores, receptores de datos, etc. Los dispositivos de salida son aquellos que se conectan en los pines que han sido configurados como salida, los más comunes son: diodos LED, pantallas (displays) LCD, displays 7 segmentos, matrices LED, buzzers (zumbadores), transmisores de datos, relés, motores de corriente directa, motorreductores, motores paso a paso, servomotores, solenoides, electroválvulas, electroimanes, etc.
Generalmente, una tarjeta Arduino por sí sola no sirve para implementar un sistema de control electrónico con fines prácticos, ya que está diseñada fundamentalmente para ejecutar las instrucciones almacenadas en su memoria (la parte lógica o inteligente del sistema) tomando decisiones para generar señales de salida en función del programa almacenado y de las señales de entrada provenientes de otros dispositivos; por esta razón, para interactuar con el mundo real cada tarjeta requiere el apoyo de familias de elementos complementarios conocidos como módulos, shields y actuadores, los cuales se encargan de transformar las magnitudes físicas del entorno en señales eléctricas y viceversa. Adicionalmente todo el sistema requiere una fuente de energía que debe estar en capacidad de suministrar la potencia eléctrica necesaria para el funcionamiento normal de todas las partes del conjunto.
Los Módulos son elementos que se conectan externamente por medio de cables a una placa Arduino para añadir alguna funcionalidad (por ejemplo, un sensor de movimiento). Los módulos más populares son: Bluetooth, Wifi, RFID, I2C para LCD, L298N y A4988 para motores, sensores de temperatura, humedad, luz, distancia, movimiento, etc.
Los Shields o Escudos son elementos que pueden ser enchufados directamente sobre una placa para añadir características complementarias (por ejemplo, un shield Ethernet) y ofrecen caracteristicas más completas que un módulo, se identifican fácilmente ya que se acoplan directamente sobre la tarjeta Arduino sin cables. Los shields pueden agregar funcionalidades como las siguientes: control de motores, relés, protoboards, bus CAN, comunicación RS-485, conectores, comunicación inalámbrica, Ethernet, GSM, etc. La diferencia fundamental entre un Módulo y un Shield es la forma de conexión y las caracteristicas que poseen: los módulos se conectan por medio de cables y tienen menos caracteristicas, mientras que los shields se enchufan directamente y ofrecen caracteristicas más avanzadas.
Un Actuador es un dispositivo capaz de transformar energía eléctrica en una magnitud física, generalmente un movimiento, con la finalidad de generar un efecto sobre un proceso automatizado. Los actuadores más conocidos son los motores de corriente continua, los motorreductores, los servomotores, las electroválvulas y los electroimanes.
Cómo se programa una tarjeta Arduino®?
Las instrucciones se escriben en una computadora personal de uso común, usando el ambiente o entorno de programación conocido como Arduino IDE. Este software permite escribir un programa (sketch) en lenguaje Arduino y transferirlo (descargarlo) a la placa Arduino a través del puerto USB del computador. Para simplificar la tarea de programación se emplean las Librerías o Bibliotecas de funciones, algunas de las cuales vienen incluidas con la instalación del Arduino IDE, mientras otras deben ser añadidas por el usuario dependiendo de las necesidades del proyecto. Toda la documentación del lenguaje Arduino, así como el software Arduino IDE y las librerías son distribuidas libremente, sin costo y sin ninguna limitación ya que Arduino es una plataforma de código abierto.
La placa Arduino® UNO R3
La placa Arduino® UNO R3 (Rev3), también conocido como Arduino 1, es una tarjeta electrónica de la familia Arduino® que incorpora un microcontrolador Atmega328P de Atmel disponible para las aplicaciones del usuario. Esta placa emplea como chip de comunicación USB un Atmega16U2 e incluye en la misma tarjeta los elementos necesarios de polarización, conexión y programación. Para la conexión de los dispositivos de entrada y salida dispone de una serie de pines o terminales hembra identificados de acuerdo a las funciones que cada uno de ellos puede desempeñar.
El Arduino® UNO R3 tiene un fusible reiniciable que protege los puertos USB de su computadora contra cortocircuitos y sobrecorriente. Aunque la mayoría de las computadoras proporcionan su propia protección interna, el fusible proporciona una capa adicional de protección. Si el consumo es más de 500 mA del puerto USB, el fusible interrumpirá automáticamente la conexión hasta que se elimine el corto o la sobrecarga.
Se agregaron pines SDA y SCL que están cerca del pin AREF y otros dos pines nuevos colocados cerca del pin RESET, el IOREF que permite que los escudos se adapten al voltaje proporcionado por la placa. En el futuro, los escudos serán compatibles tanto con la placa que usa el AVR, que funciona con 5V, como con el Arduino Due que funciona con 3.3V. El segundo es un pin no conectado, que está reservado para futuros propósitos.
Programación
El Arduino® UNO R3 incorpora un conector USB a través del cual se transfiere el programa desde el computador hacia el microcontrolador Atmega328 por medio de un cable de interconexión.
Se puede programar con el Software Arduino IDE. Seleccione "Arduino Genuino UNO del menú Herramientas > Tarjeta (de acuerdo con el microcontrolador de su tarjeta). El ATmega328P viene preprogramado con un gestor de arranque (bootloader) que le permite cargar un nuevo código sin el uso de un programador de hardware externo. Se comunica utilizando el protocolo STK500 original. También puede omitir el gestor de arranque y programar el microcontrolador a través del conector header ICSP (Programación en serie en el circuito) utilizando un Arduino ISP o similar.
El ATmega16U2 se carga con un gestor de arranque DFU, que puede activarse mediante una resistencia que lleva la línea HWB del ATmega16U2 a tierra, lo que facilita la puesta en modo DFU. Luego puede usar el software FLIP de Atmel (Windows) o el programador DFU (Mac OS X y Linux) para cargar un nuevo firmware. También puede usar el header ISP con un programador externo (sobrescribiendo el gestor de arranque DFU).
Pines de Alimentación
La alimentación de 5V para el funcionamiento del Arduino Uno se obtiene del puerto USB del computador a través del mismo cable de programación, pero esta fuente está limitada a una corriente máxima de 500mA y sólo sirve para realizar algunas pruebas que requieren poca corriente mientras el Arduino Uno está conectado al computador. En aplicaciones prácticas se debe conectar una fuente externa (7-12Vcd) en el jack de alimentación o en el pin Vin incluido en la misma tarjeta; este es el voltaje de entrada al regulador incorporado de 5V del cual se alimentará la tarjeta Arduino. Para alimentar dispositivos externos se pueden emplear reguladores diseñados para ese propósito, por ejemplo el módulo LM2596 se puede alimentar desde el mismo pin Vin y obtener 5V con una corriente de hasta 3A. Si la fuente conectada al pin Vin es de 12V también puede servir para alimentar otros dispositivos de 12V.
La placa Arduino UNO R3 se puede alimentar a través de la conexión USB o con una fuente de alimentación externa. La fuente de alimentación se selecciona automáticamente. La alimentación externa (no USB) puede provenir de un adaptador AC/DC de pared o de una batería. El adaptador se puede conectar con un enchufe de centro positivo de 2.1 mm en el conector de alimentación de la placa. Los cables de una batería se pueden insertar en los pines GND y Vin del conector POWER. La placa puede funcionar con una fuente externa de 6 a 15 voltios. Sin embargo, si se alimenta con menos de 7V, el pin de 5V puede suministrar menos de cinco voltios y la placa puede volverse inestable. Si usa más de 12V, el regulador de voltaje puede sobrecalentarse y dañar la placa (dependiendo de la corriente de salida del regulador). El rango recomendado es de 7 a 12 voltios (el voltaje de alimentación tiene que ser menor a medida que se incrementa la demanda de corriente, de lo contrario el regulador se dañará por exceso de potencia). Lo más recomendado es mantener el voltaje de alimentación tan bajo como sea posible, especialmente cuando se conectan varias cargas de 5V (chequear que el regulador no se sobrecaliente cuando todas las cargas están funcionando). Si la temperatura del regulador es excesiva, lo más aconsejable es el empleo de una fuente regulada de 5V de buena calidad para alimentar tanto al Arduino UNO en el pin de 5V como a las cargas externas. El pinout de la alimentación es el siguiente:
Vin (ENTRADA): El voltaje de entrada a la placa cuando se utiliza una fuente de alimentación externa (que no sean los 5 voltios de la conexión USB u otra fuente de alimentación regulada). Puede ingresar voltaje a través de este pin o, si ingresa voltaje a través del jack de alimentación, acceder a ese voltaje a través de este pin. Este es el voltaje de entrada al regulador incorporado de 5V.
5V (SALIDA): Este pin envía 5V desde el regulador incorporado en la tarjeta. La placa se puede alimentar con el jack de alimentación (7-12V), el conector USB (5V) o el pin VIN de la placa (7-12V). Cuando se alimenta por el jack o el pin VIN se recomienda trabajar con el menor voltaje posible (7V) para reducir al minimo el calentamiento del regulador de voltaje y la probabilidad de daño por exceso de temperatura. Conectar una fuente de voltaje al pin de 5V es una conexión que no toma en cuenta al regulador de voltaje y puede dañar su placa; esta práctica no es muy aconsejable, aunque se puede hacer con una fuente regulada de 5V de buena calidad, de esta forma es posible alimentar también otros elementos con 5V sin tener que preocuparse por el calentamiento del regulador incorporado. Una buena opción es emplear un módulo LM2596 calibrado a 5V o un adaptador de 5V (comprobar con un voltimetro el valor del voltaje antes de conectarlo al pin 5V del Arduino UNO R3).
3V3 (SALIDA): Un suministro de 3.3 voltios generado por el regulador a bordo. La salida máxima de corriente es de 50 mA.
GND: Pines de tierra.
IOREF: Este pin en la placa proporciona la referencia de voltaje con la que opera el microcontrolador. Un shield configurado correctamente puede leer el voltaje del pin IOREF y seleccionar la fuente de alimentación adecuada (5V o 3.3V).
En esta página se analizan los distintos modos de alimentación de las placas Arduino® más famosas, con el fin de superar las dudas que puedan tener los usuarios y brindar consejos útiles.
Pines de Entrada y Salida (Pinout)
La siguiente imagen muestra el pinout de la tarjeta UNO R3 compatible con Arduino®:
Cada uno de los 14 pines digitales del Arduino UNO R3 se puede usar como entrada o salida, utilizando las funciones pinMode(), digitalWrite() y digitalRead(). Operan a 5 voltios. Cada pin puede proporcionar o recibir 20mA como condición de funcionamiento recomendada y tiene una resistencia pull-up interna (desconectada por defecto) de 20-50k ohm. Un máximo de 40mA es el valor que no debe superarse en ningún pin de E/S para evitar daños permanentes en el microcontrolador.
Además, el pinout permite identificar algunos pines que tienen funciones especializadas:
Comunicación Serie: 0 (RX) y 1 (TX). Se utiliza para recibir (RX) y transmitir (TX) datos TTL en serie. Estos pines están conectados a los pines correspondientes del chip serial USB a TTL ATmega16U2.
Interrupciones externas: 2 y 3. Estos pines se pueden configurar para activar una interrupción en un valor bajo, un borde ascendente o descendente, o un cambio en el valor. Vea la función attachInterrupt () para más detalles.
PWM: 3, 5, 6, 9, 10 y 11. Proporciona una salida PWM de 8 bits con la función analogWrite().
SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Estos pines admiten la comunicación SPI utilizando la biblioteca SPI.
LED: 13. Hay un LED incorporado accionado por el pin digital 13. Cuando el pin tiene un valor ALTO, el LED está encendido, cuando el pin está BAJO, está apagado.
TWI: pin A4 o SDA y pin A5 o SCL. Admite la comunicación TWI utilizando la biblioteca Wire.
El pinout del Arduino UNO R3 muestra 6 entradas analógicas, etiquetadas de A0 a A5, cada una de las cuales proporciona 10 bits de resolución (es decir, 1024 valores diferentes). Por defecto miden desde tierra hasta 5 voltios, aunque es posible cambiar el extremo superior de su rango utilizando el pin AREF y la función analogReference(). Hay un par de otros pines en esta placa:
AREF: Tensión de referencia para las entradas analógicas. Usado con analogReference().
RESET: Conecte este pin a nivel BAJO para reiniciar el microcontrolador. Normalmente se usa para agregar un botón de reinicio a los escudos (shields) que bloquean el que está en la propia placa.
Pines de Comunicación
El Arduino UNO R3 tiene varias facilidades para comunicarse con una computadora, otra placa u otros microcontroladores. El ATmega328 proporciona comunicación en serie UART TTL (5V), que está disponible en los pines digitales 0 (RX) y 1 (TX). Un ATmega16U2 en la placa canaliza esta comunicación en serie a través de USB y aparece como un puerto virtual para el software en la computadora. El firmware 16U2 utiliza los controladores USB COM estándar y no se necesita un controlador externo. Sin embargo, en Windows, se requiere un archivo .inf. El software (IDE) incluye un monitor serial que permite enviar datos de texto simples desde y hacia la placa. Los LED RX y TX en la placa parpadearán cuando los datos se transmitan a través del chip USB a serial y la conexión USB a la computadora (pero no para la comunicación en serie en los pines 0 y 1).
Una biblioteca SoftwareSerial permite la comunicación en serie en cualquiera de los pines digitales del Arduino UNO R3. El ATmega328 también es compatible con la comunicación I2C (TWI) y SPI. El software (IDE) incluye una biblioteca Wire para simplificar el uso del bus I2C. Para la comunicación SPI, use la biblioteca SPI.
Reset automático (por software)
En lugar de requerir una presión física del botón de reinicio antes de la carga de un programa, la placa Arduino UNO R3 está diseñada de una manera que le permite reiniciarse mediante el software que se ejecuta en una computadora conectada. Una de las líneas de control de flujo de hardware (DTR) del ATmega16U2 está conectada a la línea de reinicio del ATmega328 a través de un condensador de 100 nanofaradios. Cuando esta línea se activa (nivel bajo), la línea de reinicio cae lo suficiente como para reiniciar el chip. El software IDE utiliza esta capacidad para permitirle cargar código simplemente presionando el botón Cargar en la barra de herramientas de la interfaz. Esto significa que el gestor de arranque puede tener un tiempo de espera más corto, ya que el descenso de DTR puede estar bien coordinado con el inicio de la carga. Esta configuración tiene otras implicaciones. Cuando el Arduino UNO R3 está conectado a una computadora con Mac OS X o Linux, se restablece cada vez que se realiza una conexión desde el software (a través de USB). Durante el siguiente medio segundo más o menos, el gestor de arranque se ejecuta. Si bien está programado para ignorar los datos mal estructurados (es decir, cualquier cosa que no sea una carga de código nuevo), interceptará los primeros bytes de datos enviados a la placa después de que se inicia una conexión. Si un sketch que se ejecuta en la tarjeta recibe una configuración de una vez u otros datos cuando se inicia por primera vez, asegúrese de que el software con el que se comunica espera un segundo después de abrir la conexión y antes de enviar estos datos. La placa Arduino UNO R3 contiene una pista que se puede cortar para desactivar el reinicio automático. Las almohadillas a cada lado de la traza se pueden soldar para volver a habilitarlo. Está etiquetado "RESET-EN". También puede desactivar el reinicio automático conectando una resistencia de 110 ohmios de 5V a la línea de reinicio.
Tipos de Arduino® UNO R3
Existen distintos tipos de Arduino® Uno R3, todos con las mismas caracteristicas electricas y capacidades funcionales:
Arduino® Uno Original
Fabricado en Italia o Estados Unidos, suele tener un precio relativamente elevado, existe una versión con Atmega328P tipo DIP28 y otra versión con Atmega328P tipo SMD como microcontrolador principal, ambas con el Atmega16U2 como chip de comunicación serie con el computador. Se identifican fácilmente por su color verde azulado (no son totalmente azules), su presentación (vienen en una caja, con manual de usuario y carta de agradecimiento de la compañía) y su alto precio.
UNO R3 con Atmega16U2 para Arduino®
Son placas genéricas, en su mayoria de origen Chino, de bajo precio en comparación con el original y se pueden conseguir con Atmega328P tipo DIP28 o tipo SMD como microcontrolador principal, además vienen con el Atmega16U2 como chip de comunicación. Son las tarjetas que se asemejan más en diseño y funcionamiento al Arduino Uno original, pudiendo reemplazarlo en la mayoría de proyectos sin diferencias apreciables. Se identifican por su color azul y su presentación (vienen en una funda plástica gris antiestática, sin manual de usuario):
UNO R3 con CH340G para Arduino®
Tarjetas genéricas de origen Chino con funcionalidad similar al Arduino Uno R3 original, aunque se han tenido reportes de que no operan en algunos proyectos avanzados, posiblemente por diferencias de diseño con respecto al original. Presentan varias hileras de agujeros para la soldadura de pines adicionales y se reemplaza el ATmega16U2 por el CH340G como chip de comunicación serial (esto hace que sea necesario la instalación de un driver en el computador del usuario), tienen bajo precio y también están disponibles con los dos tipos de encapsulado del Atmega328P, aunque el más popular es con la versión Atmega328P tipo SMD.
En general, tanto el Arduino UNO R3 Original como las demás versiones funcionan correctamente siempre y cuando el usuario tome las precauciones necesarias para mantener los parametros electricos de funcionamiento dentro de los limites máximos establecidos en las especificaciones dadas por el fabricante. Para encontrar mayores detalles acerca de las especificaciones electricas se recomienda revisar la hoja de datos (datasheet) del Atmega328P de Atmel. Las placas genéricas son compatibles con el software oficial de Arduino® y con los módulos, shields y accesorios creados para las placas originales, así que la programación es la misma y el desarrollo o construcción de tus proyectos es igual.