IMPORTANTE
Gracias a la web oficial de Arduino he podido solventar innumerables dudas, sobre todo de programación.
En su página principal dispone de un buscador en su margen superior derecho, en el cual podemos incluir instrucciones las cuales no entendamos bien su funcionamiento, nos direccionará a otra ventana que de forma clara reducida nos explicará su funcionamiento incluso a través de algún caso práctico.
Sea cual sea el uso que le queramos dar a un Arduino una parte importante (y la primera) es analizar el uso que le vamos a dar, con el cual determinar los requerimientos que debe cumplir el Arduino.
Con este paso previo realizado, seleccionaremos el Arduino adecuado, toda la información la tenemos disponible en la web oficial de Arduino (https://www.arduino.cc/), será importante saber manejarnos en su web puesto que puede que la necesitemos para consultar información como:
1.Características técnicas de los productos Arduino
2.Descargar el software de Arduino
3.Resolver dudas sobre programación
4.Incluso compra de Arduino oficiales
Si nos dirigimos al apartado de products>arduino, visualizaremos una tabla con todos los productos de Arduino y, si seleccionamos el que nos interesa (en nuestro caso UNO), accederemos a su información técnica que se nos presentará en tres apartados:
1.Overview: descripción breve de las características básicas de producto seleccionado.
2.Tech Specs: tabla con las principales características del producto.
3.Documentation: amplía las características vistas en la tabla anterior y profundiza en algunas de ellas.
En el siguiente capítulo analizaremos la tabla con las principales características del Arduino UNO, puesto que para empezar a trabajar con él será más que suficiente.
IMPORTANTE
A la vista salta la gran diferencia de estudiar las características de un Arduino, para lo cual debemos analizar una tabla frente a un MCU con un manual extenso.
Es de agradecer esta simpleza, en los manuales se profundiza sobre la arquitectura interna de un MCU, que es importante pero para un principiante irrelevante y lioso.
IMPORTANTE
Al ser el voltaje de operación de 5V, no podemos interactuar de forma directa con muchos de los elementos de nuestro día a día como puede ser una bombilla. Al principio puede suponer algo confuso que el voltaje de trabajo sea de 5V y que podamos alimentar nuestro Arduino a través del conector Jack con una tensión de 7 a 12V (con un límite de 6 a 20V). El hardware del Arduino dispone de una electrónica que reduce la tensión de entrada a 5V para poder alimentar su MCU. Uno de los parámetros más importantes es la limitación de intensidad (20mA), el no cumplir esta especificación junto con la limitación de tensión son las principales causas de daño.
Debemos tener en cuenta que la limitación de 20mA no significa que por un pin no puedan salir más de esos Amperios, sino que no debe de salir más. Un Arduino no produce potencia eléctrica, lo que hace es “distribuir“ esa potencia de la fuente de alimentación, por lo tanto si le demandamos 100mA por uno de sus pines, el Arduino lo que hará será “pillar“ esa intensidad y la sacará por el ese pin, el problema es que al pasar esa intensidad a través del MCU del Arduino este se dañará.
Las limitaciones de potencia eléctrica junto con el número de pines digitales, señales pwm y entradas analógicas son las características más básicas que nos pueden hacer elegir un Arduino frente a otro.
Si necesitamos leer 10 sensores analógicos, regular 10 leds, monitorizar 20 pulsadores el Arduino UNO no sería el ideal puesto que no dispone del hardware necesario. Para el desarrollo de los casos prácticos de este libro se ha utilizado el Arduino UNO y así se reflejará en los programas y esquemas, pero si se dispone de otro modelo de Arduino se pueden realizar todos los casos del mismo modo.
Si términos como intensidad o tensión resultan nuevos y por lo tanto confusos, antes de crear los primeros circuitos abordaremos este tema.
A continuación se revisarán las principales características del Arduino UNO (recogidas en la tabla de Tech Specs ).
1.Microcontroller-Atmega328P: nos indica el MCU que incorpora y, si hacemos click en esta referencia, podemos acceder a su manual.
2.Operating Voltage-5V: tensión máxima con la que puede trabajar el MCU del Arduino, por lo tanto es la tensión máxima que disponemos para interactuar con el entorno (encender luces, comprobar pulsadores).
3.Input Voltage (recommended)-7-12V: como ya se mencionó, en la mayoría de las placas de Arduino han incorporado un conector Jack para alimentar un Arduino a través de una pila, batería o cargador. Esta solución no era imprescindible pero si resulta cómoda, para implementar soluciones con Arduino. Tal y como nos indican la tensión recomendada sería entre 7 y 12 V.
4.Input Voltage (limit)- 6-20V: estos límites nos definen la tensión máxima y mínima a la que podemos alimentar un Arduino, debemos alejarnos de estos valores para evitar malos funcionamientos o calentamiento de la placa.
5.Digital I/O Pins -14 (of which 6 provide PWM output): el Arduino UNO dispone de 14 pines digitales que se pueden comportar como entradas o salidas, por ser digitales los pines pueden estar “encendidos“ o “apagados“. Esto, junto con el hecho de que puedan ser entradas o salidas, nos permitirá encender o apagar un led (en caso de estar configurado como salida) o saber si un pulsador se ha pulsado (en caso de estar configurado como entrada). Además nos indican que 6 de estos 14 pines pueden generar señales PWM, lo que por ejemplo nos permite regular un motor o una luz. Profundizaremos en esto con casos prácticos.
6.PWM Digital I/O Pins-6: hace referencia a los pines que generan señales PWM del apartado anterior.
7.Analog Input Pins-6: estos pines nos permiten tomar lecturas de señales que varian entre 0 y 5V. Como puede ser el caso de sensores que devuelven un valor de tensión en función de la cantidad de una magnitud física medida.
8.DC Current per I/O Pin-20mA: limitación de intensidad que puede entrar o salir por cada uno de los pines del Arduino.
9.DC Current for 3.3V Pin-50mA: como veremos, todos los pines de un Arduino aparecen referenciados por una etiqueta, que nos indicará su función. En la parte de potencia del hardware del Arduino UNO tenemos un pin de 3,3V que ofrece esa tensión de forma constante y a diferencia del resto de pines permite “sacar“ hasta 50mA.
10.Flash Memory-32 KB (ATmega328P) of which 0.5 KB used by bootloader: posiblemente en cuanto a las características que ofrece esta tabla las memorias son las más difíciles de evaluar o comparar con otros Arduinos. La memoria FLASH es en la que se almacena el programa que carguemos en nuestro Arduino, que en el caso del Arduino UNO tiene un límite de grabaciones de 10.000. Vemos que nos indican que la memoria tiene una capacidad de 32KB pero que 0.5KB de los 32 ya vienen ocupados por algo que llaman bootloader. Esto es un gestor de arranque que permite que los MCU que incorporan los Arduinos funcionen en la plataforma Arduino, no es más que un programa que instalan en la fabricación del Arduino y que si nosotros compramos el MCU por separado no lo tendrá grabado y deberemos ser nosotros el que se lo carguemos.
11.SRAM-2 KB (ATmega328P): esta memoria es la que utiliza el MCU para trabajar con los datos temporales, es decir, los que necesita en cada momento para realizar las operaciones que hubiésemos programado. Estos datos se pierden al apagarse el Arduino. Esta memoria no tienen límite de escrituras(tampoco es que la utilicemos directamente lo podemos considerar como un mecanismo interno para que pueda funcionar el Arduino ).
12.EEPROM-1 KB (ATmega328P): esta memoria permite almacenar datos y aunque se apague el Arduino podemos recuperarlos una vez se encienda, tiene un límite de 100.000 escrituras. Esta memoria si puede ser programada pero no lo haremos en este libro.
13.Clock Speed-16 MHz: define “la rapidez“ con la que opera un Arduino y también interviene en temporizaciones que realizamos con Arduino.
14.LED_BUILTIN-13: este hardware dispone de un led en la placa asociado al estado del pin 13.
15.Length-68.6 mm: el largo del Arduino UNO.
16.Width-53.4 mm: el ancho del Arduino UNO.
17.Weight-25g: peso del Arduino UNO.
A continuación realizaremos una comparativa del resto de Arduinos con respecto al Arduino UNO, quedándonos con las características principales.
•Genuino 101: Voltaje de trabajo 3,3V pero permite 5V por los pines, 4 pines PWM, dispone de acelerómetro, giróscopo y bluetooth.
•MEGA 2560: 54 pines I/O digitales, 15 pines PWM, 16 entradas analógicas.
•Micro: 20 pines I/O digitales, 7 pines PWM, 12 entradas analógicas.
•MKR1000: voltaje de trabajo 3,3V, 8 pines I/O digitales, 12 pines PWM, 7 entradas analógicas, 1 salida analógica, conexión por WIFI y 7mA por pin.
•PRO: voltaje de trabajo 3,3V o 5V y 40mA de limitación por pin.
•PRO MINI: voltaje de trabajo 3,3V o 5V 40mA de limitación por pin, no incluye programador.
•Genuino ZERO: voltaje de trabajo 3,3V, 20 pines I/O digitales, 10 pines PWM,1 salida analógica y 7mA de limitación por pin.
•DUE: voltaje de trabajo 3,3V, 54 pines I/O digitales, 12 pines PWM, 12 entradas analógicas, 2 salida analógica, 130mA de limitación por todos los pines, salvo 800mA por 3,3V y 5V(cada uno).
•ETHERNET: 14 pines I/O digitales, 4 pines PWM, 6 entradas analógicas, 40mA de limitación por pin, conexión a internet a través de cable de red y posibilidad de conectar una tarjeta microSD.
•LEONARDO 10: 20 pines I/O digitales, 7 pines PWM, 12 entradas analógicas y 40mA de limitación por pin.
•MEGA ADK: 54 pines I/O digitales, 15 pines PWM, 16 entradas analógicas, 40mA de limitación por pin un conector USB para comunicación con dispositivos Android.
•MINI:8 entradas analógicas y hasta 40 mA por pin.
•NANO: 22 pines I/O digitales, 12 pines PWM, 8 entradas analógicas y hasta 40mA de limitación por pin.
•YÚN: 20 pines I/O digitales, 7 pines PWM, 12 entradas analógicas, hasta 40mA de limitación por pin y conexión a intenert por WIFI o cable.
•Si abrimos la web de Arduino y accedemos al apartado de products
encontraremos una tabla
en donde podemos revisar más en detenimiento cada una de las características de los dispositivos mencionados en los puntos anteriores.
IMPORTANTE
El hecho de que el hardware sea libre no significa que sea gratuito, lo cual resulta lógico puesto que su fabricación conlleva unos gastos.
En la definición de Arduino nos referíamos a él como una plataforma libre, por ende, el hardware de Arduino por formar parte de la plataforma de Arduino debe ser libre. Volviendo a la web de Arduino y a los detalles técnicos de este hardware, si nos dirigimos al apartado de documentation , encontraremos una serie de archivos disponibles para su descarga (son archivos con información sobre el diseño del hardware).
El hardware libre o “open source“ (fuente abierta) ofrece una serie de libertades en cuanto a su diseño:
•Estudiarlo.
•Modificarlo.
•Reutilizarlo.
Comparte ciertas similitudes con el software libre, que tiene más antecedentes que el hardware libre.
Para que todo esto sea posible los usuarios deben tener acceso a los archivos de diseño, bajo una licencia que permita cada una de las libertades anteriormente mencionadas.
La licencia del hardware de Arduino es Creative Commons Attribution Share-Alike. Esta licencia, entre otros derechos, otorga la libertad de comercialización, siempre y cuando el que lo quiera hacer lo ponga en conocimiento de Arduino y publique sus diseños bajo la misma licencia.
Por lo tanto, nos podemos encontrar en el mercado con placas oficiales y no oficiales; esto permite que podamos comprar placas de Arduino por unos pocos euros (de hecho ese era uno de los objetivos de los fundadores de Arduino).
En el apartado anterior pudimos ver cómo existen grandes diferencias entre ciertos Arduinos: las más básicas son las de potencia eléctrica y número de entradas y salidas.
Pero existen otras como la implementación de periféricos (Ethernet, WIFI, SD…). El hardware Arduino es modular, lo que quiere decir que si el modelo del que partimos no dispone de ciertos periféricos podemos añadir módulos para ampliar sus funcionalidades.
Estos módulos son más conocidos como Shields (escudos). Disponemos de todo tipo de Shields: GSM, WIFI, ETHERNET, SD, potencia, RFID, pantallas táctiles. etc. A todo esto podemos añadir una gran cantidad de sensores. Por lo tanto, Arduino nos permite interactuar con la tecnología de otra forma, ya no como usuarios sino como desarrolladores, y por lo tanto entender mejor el mundo tecnológico que nos rodea.
No cabe duda de que todos estos recursos, unidos al bajo coste, convierten a Arduino en la herramienta ideal para el aprendizaje teniendo cada vez mayor implantación en las aulas . El hardware oficial de Arduino está certificado por la Comisión Federal de Comunicaciones estadounidense y por la europea, cumpliendo con las normativas referentes a emisiones electromagnéticas.
IMPORTANTE
El hecho de que Arduino cumpla las normativas electromagnéticas nos asegura que las señales que se generan en los dispositivos electrónicos no generen interferencias entre ellas, entre esas señales podemos encontrar:
WIFI
Bluetooth
Telefonía
etc.
IMPORTANTE
¿Qué es una librería?
El término “librería” hace referencia a un programa que tenemos o podemos tener instalado en nuestro IDE, que podemos usar en cualquier momento.
Que incorpora funciones que nos facilitan la programación y que simplemente haciendo referencia al inicio del programa del uso de una determinada librería, adquirimos los permisos para usar sus funciones.
Llegado el momento veremos como utilizar las funciones de una librería
1.Una vez que disponemos de nuestro Arduino lo conectamos a nuestro PC y empezamos a desarrollar nuestro programa. Para ello necesitamos un entorno de programación. Arduino dispone de un entorno de programación integrado conocido como IDE de Arduino. A partir de ahora nos referiremos a este entorno de programación como IDE de Arduino .
2.El IDE de Arduino es un entorno multiplataforma: lo podemos instalar en cualquier sistema informático (Windows, Mac Os o Linux).
3.Este entorno nos permite escribir un programa, verificarlo (comprobar errores) y cargarlo a nuestro Arduino. Dispone de una herramienta como es el Monitor Serie que permite recibir o enviar información a través del puerto USB de nuestro PC. Si, por ejemplo, programamos nuestro Arduino para que, cuando reciba un mensaje por el puerto USB que ponga «encender leds», debe encender los leds que tenga conectados a sus salidas, a través del Monitor Serie, podemos enviar el mensaje «encender leds». Entonces, si programamos adecuadamente el Arduino, podemos controlarlo a través del IDE.
4.El Monitor Serie también permite mostrar información que reciba por el puerto USB del PC. Si, por ejemplo, programamos nuestro Arduino para que tome las lecturas de unos sensores a los cuales esté conectado, y que envíe esos valores por el puerto USB, podemos visualizarlos en el IDE de Arduino. Por lo tanto, también podemos decir que con el IDE podemos monitorizar un Arduino. Y por supuesto, con la programación adecuada podemos controlar y monitorizar nuestro Arduino simultáneamente.
5.Disponemos de un creador de gráficas que nos permite representar datos que recibamos por el puerto USB de nuestro PC. También disponemos de ejemplos y librerías para que nos sea más sencillo aprender a programar. Las librerías que tiene instaladas son las oficiales.
¿Un Arduino solo se puede programar con el IDE de Arduino? ¿El IDE de Arduino solo puede programar Arduinos? No, podemos programar un Arduino con otro entorno de programación siempre y cuando sean compatibles. Si tenemos práctica con un entorno de programación determinado podemos comprobar si es posible programar con ese software nuestro Arduino, seguramente necesitemos instalar alguna extensión. Y con el IDE de Arduino pasa lo mismo, con las extensiones correctas podemos programar otros módulos.
En conclusión, Arduino pone a nuestra disposición un entorno sencillo y gratuito que nos permitirá de una forma rápida empezar a crear nuevos proyectos.
IMPORTANTE
El lenguaje máquina nos obliga a conocer la estructura y funcionamiento interno de un MCU , lo cual suele ser complejo, pero nos permite optimizar nuestro programa.
Por su importancia, a lo largo del libro haremos algunos casos con este tipo de lenguaje, para disponer de una báse sólida en cuanto a programación de MCU.
Con nuestro Arduino conectado a nuestro ordenador y el IDE instalado, solo nos falta empezar a programar. En cuanto al lenguaje de programación (idioma artificial diseñado para expresar instrucciones que pueden ser llevadas a cabo por una máquina), podemos diferenciar varios niveles. El lenguaje a más bajo nivel sería el lenguaje máquina: es el lenguaje capaz de almacenar e interpretar una máquina, en nuestro caso, un MCU.
En los inicios de los MCU, estos se programaban en lenguaje máquina (a día de hoy también se hace). El lenguaje máquina consiste en instrucciones a nivel binario, lo que nos obliga a encadenar una cierta cantidad de ellas para poder realizar tareas sencillas. Además, cada máquina puede tener su propio lenguaje.
Con este lenguaje de programación surgen ciertos inconvenientes: primeramente, un mismo programador debe aprender un lenguaje diferente para cada máquina. Por lo general, no son lenguajes intuitivos (lo que los hace difíciles de recordar) y programas sencillos pueden llegar a alcanzar un gran tamaño.
Un programa desarrollado en lenguaje máquina se convierte en difícil de interpretar y modificar. Viendo todo esto, se empezó a evolucionar en la programación hasta llegar a lo que conocemos a día de hoy como lenguaje a alto nivel o lenguaje estructurado.
Existen varios lenguajes a alto nivel: C, Python, C++, Java… El lenguaje a alto nivel está formado por instrucciones más complejas que el lenguaje máquina, lo que significa que una instrucción en este lenguaje puede equivaler a varias en lenguaje máquina.
Con esto conseguimos programas más cortos, más fáciles de interpretar y modificar. El lenguaje a alto nivel que emplea el IDE de Arduino se basa en el lenguaje C, aunque es cierto que la mayoría de los lenguajes comparten estructuras o funciones similares, como pueden ser los bloques de control de flujo (if, esle, while). Aparte del lenguaje compartido con C, dispone de instrucciones propias para un Arduino.
Independientemente de si programamos en lenguaje estructurado o máquina, la carga de un programa al MCU del Arduino conlleva una serie de pasos que se conoce como compilación. La compilación se puede considerar como una traducción del programa que hemos desarrollado a un lenguaje que pueda almacenar e interpretar el MCU.
El proceso de compilación es complejo, puesto intervienen varios pasos:
•Precompilador
•Compilador
•Linker
•Carga de programa
Por la complejidad de cada uno de estos procesos no entraremos a estudiarlos, pero debemos recalcar que hoy en día podemos programar una máquina en lenguaje estructurado porque los entornos de programación han evolucionado, introduciendo una serie de procesos para la traducción y carga de un programa.
The free excerpt has ended.