Intro a ecosistema Arduino
Jun 12, 2021 ‧ 14 min estimados ‧ #arduino #open-hardware #electronics #firmware |
Contenido |
Arduino es una de las plataformas más conocidas y utilizadas en el mundo maker. Lo que vas a ver en este documento son los siguientes temas:
Arduino es una compañía de desarrollo de software y hardware libres, y una comunidad internacional que diseña y manufactura placas de desarrollo para dispositivos programables. Se enfoca en acercar y facilitar el uso de la electrónica y programación de sistemas embebidos a personas con distintos niveles de formación y para múltiples propósitos.
Los productos de software y hardware que vende la compañía son distribuidos bajo licencia GNU y permiten la manufactura de las placas y distribución del software por cualquier persona o entidad. Las placas Arduino están disponibles comercialmente en forma de placas ensambladas y también para montarlas por tu propia cuenta (DIY).
Gracias a que crearon un sistema de desarrollo abierto, un lenguaje de programación fácil de aprender y una comunidad en torno a estas premisas, se creó una de las plataformas más grandes en el rubro que facilita y promueve la implementación de sistemas embebidos para todo tipo de proyectos.
El propósito de Arduino es que pueda ser usado por la mayoría de las personas, incluso sin tener un fuerte entrenamiento en programación o electrónica. Las principales ventajas de Arduino son su costo, facilidad de aprender la herramienta, un software de desarrollo sencillo, no necesita un programador externo y es un desarrollo libre que permite crear proyectos que se pueden comercializar.
Es importante que sepas Arduino se conoce por su framework de programación así como también por las placas electrónicas que fueron comercializadas por el proyecto y que utilizan el framework de desarrollo para crear aplicaciones.
Veamos algunas ventajas que ofrece la plataforma a la hora de crear proyectos:
Las placas oficiales de Arduino vienen provistas con microcontroladores Atmel AVR generalmente, y en los últimos años se han comenzado a implementar microcontroladores ARM de 32 bits.
Además de los microcontroladores, las placas vienen equipadas con un conversor USB-Serie que te permite programarlas fácilmente con una PC a través de un puerto USB. También tienen pines de expansión que disponibilizan hacia el exterior los pines del microcontrolador, permitiendo conectar todo tipo de sensores y actuadores.
Veamos ahora algunas de las placas más conocidas del mundo Arduino. Si querés ver la lista completa de productos podés acceder a este link.
Las placas Arduino marcaron un estándar en cuanto al form factor, es decir la forma y tamaño que tienen, principalmente por sus pines de expansión. A partir de cada modelo de placas, tanto los desarrolladores de Arduino como la comunidad fueron creando diferentes placas de expansión - conocidas como shields - que le dan funcionalidad extra a las características básicas provistas por cada placa.
Los shields son componentes realmente útiles que te permiten ampliar las funciones que podés realizar conectándolos a los pines de expansión de la placa, sin necesidad de soldaduras ni protoboard.
Los desarrolladores de Arduino fueron sacando una gran cantidad de shields para múltiples propósitos y en esta imagen podemos ver algunos de ellos.
El uso de shields fue realmente innovador ya que te permite conectar todo tipo de sensores y actuadores, controlar motores, conectarte por protocolos inalámbricos como WiFi o LoRa, conectar displays LCD, sensores de movimiento, de gestos y muchos más. Por lo general los shields son apilables, de manera que podés stackear distintas funcionalidades conectando un shield sobre otro, como vemos en la imagen siguiente.
Además de las placas oficiales, al contar con software y hardware libre, otras empresas y entidades comenzaron a desarrollar placas basadas en las oficiales y en algunos casos clones más económicos. Debido a que el nombre Arduino está reservado para las placas oficiales de la compañía, es común ver que las placas que son compatibles con Arduino tengan el sufijo "ino" en su nombre. Algunos ejemplos son Diavolino, Freeduino y Iteaduino que vemos en esta imagen.
Además, otras compañías que ya contaban con placas de desarrollo o diferentes kits comenzaron a soportar el framework de desarrollo Arduino para programar sus placas, y por ese motivo nos encontramos con que existen cientos de placas compatibles con Arduino. Si te interesa conocer algunas de ellas podés verlas en este link.
Previo a la existencia de Arduino como proyecto, Hernando Barragán trabajó en la creación de Wiring como trabajo de maestría en el año 2003, que consistía en crear herramientas simples y económicas para realizar proyectos digitales por personas sin altos conocimientos técnicos. El proyecto Wiring era una placa de desarrollo, un IDE y una biblioteca de funciones para programar fácilmente el microcontrolador de la placa.
En el año 2005, en el Instituto Ivrea (IDII) de Italia, Massimo Banzi, David Mellis, Gianluca Martino y David Cuartielles agregaron soporte a Wiring para el microcontrolador ATmega8 - más económico que el inicial Atmega168 -, pero en lugar de continuar el desarrollo bajo el proyecto Wiring, se separaron y lo renombraron como Arduino. El nombre Arduino viene de un bar donde algunos de los fundadores del proyecto solían reunirse. El bar hace alusión a Arduino de Ivrea, Rey de Italia durante el siglo XI.
Para la producción en serie de la primera versión de Arduino se tomó en cuenta que el coste no fuera mayor de 30 euros, que fuera ensamblado en una placa de color azul, debía ser Plug and Play y que trabajara con todas las plataformas informáticas tales como MacOSX, Windows y GNU/Linux. Las primeras 300 unidades de Arduino se las dieron a los alumnos del Instituto IVREA con el fin de que las probaran y empezaran a diseñar sus primeros prototipos.
Hoy, y luego de ser una de las plataformas de sistemas embebidos más completas, haber vendido millones de placas alrededor del mundo, y contar con una gran comunidad que aporta el desarrollo de software y hardware, Arduino está más vigente que nunca y ha logrado acercar a toda clase de público a la creación de novedosos sistemas y aplicaciones del mundo real.
El IDE de desarrollo Arduino tiene un editor de texto para escribir el código, un área de mensajes, una consola de texto, una barra de herramientas con botones para funciones comunes y una serie de menús. En esta imagen podemos ver cómo es el IDE.
Los programas escritos con el IDE Arduino se denominan sketches y se guardan con la extensión de archivo .ino. El área de mensajes proporciona comentarios para guardar, exportar y visualizar errores. La consola muestra la salida de texto del IDE y la esquina inferior derecha muestra la placa y el puerto serie configurado. Los botones de la barra de herramientas te permiten crear, abrir y guardar sketches, abrir el monitor en serie, y demás tareas.
La estructura básica de un programa se compone de al menos dos funciones que contienen las instrucciones de un programa.
void setup(){ |
La función setup() se ejecuta por única vez al iniciar el programa y se encarga de inicializar la placa, de configurar adecuadamente los puertos de entrada y salida, sensores y actuadores. En la función loop() se ejecuta el lazo infinito del programa que tiene la lógica de la aplicación.
Una función es un bloque de código que tiene un nombre y un conjunto de instrucciones a ejecutar cuando es llamada. Las funciones obligatorias son setup() y loop() y luego podés crear tus propias funciones o llamar a funciones de terceros para realizar ciertas acciones. Gracias a la firma de código de las funciones - es decir cómo están construidas -, gran parte del programa se puede reutilizar en múltiples placas y para diferentes propósitos. La siguiente función se encarga de hacer un blink de un LED cada 200 ms.
void BlinkLed(led){ delay(100); digitalWrite(led, LOW); delay(100); |
Veamos ahora algunas de las funciones más comunes dentro del entorno Arduino.
pinMode()
Esta instrucción se usa en la parte de inicialización y sirve para configurar un PIN como OUTPUT o INPUT.
pinMode(pin, OUTPUT); // configure 'pin' as output |
Los terminales de Arduino están configurados como por defecto como entradas en estado de alta impedancia. Los pines configurados como OUTPUT pueden proporcionar salidas de corriente para alimentar por ejemplo un LED y pueden alimentar cargas de mayor consumo como relés o motores a través de los drivers correspondientes.
digitalRead()
Lee el valor de un pin definido como digital y devuelve un resultado booleano HIGH o LOW.
state = digitalRead(Pin); // read the pin and store value in 'state' var |
digital Write()
Envía a un pin definido como digital el valor booleano HIGH o LOW.
digitalWrite(pin, HIGH); // write at terminal pin the value HIGH |
analogRead()
Lee el valor de un determinado pin definido como entrada analógica. El rango de posible lectura está determinado por la precisión del conversor analógico digital, que para la mayoría de los dispositivos suele ser de 10 bits.
adcValue = analogRead(pin); // reads ADC and save its value in adcValue |
analogWrite()
Se usa para escribir un valor analógico en un pin utilizando modulación por ancho de pulso (PWM).
analogWrite(pin, adcValue); // writes analog adcValue into pin |
delay()
Detiene la ejecución del programa la cantidad de tiempo en milisegundos que se le pasa como argumento.
delay(1000); // stops the program for 1000 ms |
millis()
Devuelve el número de milisegundos transcurrido desde el inicio del programa hasta el momento actual. Este número generalmente puede almacenar un valor aproximado de 9 horas de funcionamiento antes de volver a cero.
ellapsedMs = millis() // saves in ellapsedMs time passed |
Serial.begin()
Se usa generalmente en la función setup() para abrir el puerto serie y setear el baudrate - velocidad - de transmisión de datos en serie. Los valores de velocidad más utilizados son 9600 y 115200 baudios.
void setup(){ |
Serial.write()
Imprime los datos en el puerto serie. La escritura de datos por el puerto serie abarca diferentes funciones similares como Serial.print(), Serial.println(), Serial.printf(), entre otras.
Serial.print("Hello World from Arduino!"); |
Serial.read()
Lee datos desde el puerto serie. Si encuentra datos los va devolviendo de a uno y cuando no hay más devuelve -1.
serialValue = Serial.read(); |
Con las funciones que vimos hasta ahora tendrás un panorama general básico de lo que podés hacer con Arduino. Veamos ahora un ejemplo integrador de un programa que enciende un LED cuando se pulsa un botón e imprime los milisegundos transcurridos desde que se inició el programa.
void setup(){ |
En el ejemplo anterior no están configurados los pines ya que el programa tiene meramente fines demostrativos. |
A lo largo de este artículo hemos visto las partes más generales del ecosistema Arduino. Al abarcar diversas aristas relacionadas con desarrollo de hardware, software, firmware, de promover la educación y de crear proyectos integradores, cada una de estas partes necesita de su área de conocimiento específica, por lo que te recomendamos seguir investigando esta gran plataforma desde su página oficial. Más allá de eso, y a modo de resumen, en este artículo vimos los siguientes temas.
Este material es distribuido bajo licencia Creative Commons BY-SA 4.0. Podés encontrar detalles sobre el uso del material en este link.