Entrada destacada

Qué es Arduino

Arduino es una plataforma de hardware libre, basada en una placa con un microcontrolador y un entorno de desarrollo, diseñada para facilitar el uso de la electrónica en proyectos multidisciplinares.

Hardware Libre: http://es.wikipedia.org/wiki/Hardware_libre

Por otro lado Arduino nos proporciona un  software consistente en un entorno de desarrollo (IDE) que implementa el lenguaje de programación de arduino y el bootloader ejecutado en la placa. La principal característica del software de programación y del lenguaje de programación es su sencillez y facilidad de uso.

¿Para qué sirve Arduino? Arduino se puede utilizar para desarrollar elementos autónomos, conectándose a dispositivos e interactuar tanto con el hardware como con el software. Nos sirve tanto para controlar un elemento, pongamos por ejemplo un motor que nos suba o baje una persiana basada en la luz existente es una habitación, gracias a un sensor de luz conectado al Arduino, o bien para leer la información de una fuente, como puede ser un teclado, y convertir la información en una acción como puede ser encender una luz y pasar por un display lo tecleado.

Hay otro factor importante en el éxito de Arduino, es la comunidad que apoya todo este desarrollo, comparte conocimiento, elabora librerías para facilitar el uso de Arduino y publica sus proyectos para que puedan ser replicados, mejorados o ser base para otro proyecto relacionado.

En resumen:

Arduino = HW + SW + Comunidad

HW Arduino

El HW de Arduino es básicamente una placa con un microcontrolador. Un microcontrolador (abreviado µC, UC o MCU) es un circuito integrado programable, capaz de ejecutar las órdenes grabadas en su memoria. Está compuesto de varios bloques funcionales, los cuales cumplen una tarea específica. Un microcontrolador incluye en su interior las tres principales unidades funcionales de una computadora: unidad central de procesamiento, memoria y periféricos de entrada/salida.

Características de un Microcontrolador:

  • Velocidad del reloj u oscilador
  • Tamaño de palabra
  • Memoria: SRAM, Flash, EEPROM, ROM, etc..
  • I/O Digitales
  • Entradas Analógicas
  • Salidas analógicas (PWM)
  • DAC (Digital to Analog Converter)
  • ADC (Analog to Digital Converter)
  • Buses
  • UART
  • Otras comunicaciones.

Arduino dispone de una amplia variedad de placas y shields para usar dependiendo de nuestras necesidades.

Las shields son placas de circuitos modulares que se montan unas encima de otras para dar funcionalidad extra a un Arduino. Esta Shields son apilables.

Las shields se pueden comunicar con el arduino bien por algunos de los pines digitales o analógicos o bien por algún bus como el SPI, I2C o puerto serie, así como usar algunos pines como interrupción. Además estas shields se alimenta generalmente a través del Arduino mediante los pines de 5V y GND.

Cada Shield de Arduino debe tener el mismo factor de forma que el estándar de Arduino con un espaciado de pines concreto para que solo haya una forma posible de encajarlo.

Las placas y shields oficiales de Arduino pueden verse en:

Cabe destacar alguna placas Arduino:

Es la placa estándar y posiblemente la más conocida y documentada. Salió a la luz en septiembre de 2010 sustituyendo su predecesor Duemilanove con varias mejoras de hardware que consisten básicamente en el uso de un USB HID propio en lugar de utilizar un conversor FTDI para la conexión USB. Es 100% compatible con los modelos Duemilanove y Diecimila. Viene con un Atmega328 con 32Kbytes de ROM para el programa.
Esquematico: http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf
Microcontrolador: http://www.atmel.com/devices/atmega328p.aspx
Planos del Arduino UNO: https://www.arduino.cc/en/Main/ArduinoBoardUno#documentation

Es con mucha diferencia el más potente y el que más pines i/o tiene, apto para trabajos ya algo más complejos aunque tengamos que sacrificar un poco el espacio, cuenta con el microcontrolador Atmega2560 con más memoria para el programa, más RAM y más pines que el resto de los modelos.
Esquematico: http://www.arduino.cc/en/uploads/Main/arduino-mega2560_R3-sch.pdf
Microcontrolador: http://www.atmel.com/devices/atmega2560.aspx
Planos del Arduino MEGA: http://www.arduino.cc/en/Main/ArduinoBoardMega2560

  • Arduino MKR1000https://www.arduino.cc/en/Main/ArduinoMKR1000
    Versión para IoT con procesador Atmel ARM Cortex M0+ de 32bits ATSAMW25 que es el mismo procesador que Genuino Zero pero con wifi integrado, chip de cifrado y antena integrada.

  • Arduino Yun – http://www.arduino.org/products/boards/4-arduino-boards/arduino-yun
    Con MCU Atmel AVR de 8 bits ATmega32U4 y procesador MIPS Qualcomm Atheros AR9331 a 400 MHz con wifi integrado y SO linux Linino basado en OpenWRT y ethernet. Su principal característica es la capacidad de comunicar la MCU con el SO linux mediante un puerto serie interno.

Placas Compatibles Arduino

El HW Arduino no solo se queda en las placas oficiales, sino que en los últimos años han aparecido muchas placas de prototipado basadas en los mismos o diferentes microcontroladores que bien por acuerdos con Arduino, por los propios fabricante de los microcontroladores o por la propia comunidad de usuarios, estas placas tienen soporte del IDE de Arduino y es posible programarlas como el resto de Arduinos oficiales con el mismo lenguaje de programación.

Placas no oficiales Arduino con soporte para el IDE de Arduino son: https://github.com/arduino/Arduino/wiki/Unofficial-list-of-3rd-party-boards-support-urls

Cabe destacar las siguientes placas no oficiales:

SW Arduino

El software de Arduino es un IDE, entorno de desarrollo integrado (siglas en inglés de Integrated Development Environment). Es un programa informático compuesto por un conjunto de herramientas de programación.

El IDE de Arduino es un entorno de programación que ha sido empaquetado como un programa de aplicación; es decir, consiste en un editor de código, un compilador, un depurador y un constructor de interfaz gráfica (GUI). Además incorpora las herramientas para cargar el programa ya compilado en la memoria flash del hardware.

Es destacable desde la aparición de la versión 1.6.2 la incorporación de la gestión de librerías y la gestión de placas muy mejoradas respecto a la versión anterior y los avisos de actualización de versiones de librerías y cores.

Todos lo cambios en la versiones pueden verse en: https://www.arduino.cc/en/Main/ReleaseNotes

Código fuente del IDE de Arduino está disponible en: https://github.com/arduino/Arduino/  y las instrucciones para construir el IDE desde código fuente pueden verse en: https://github.com/arduino/Arduino/wiki/Building-Arduino

Podemos también ver los problemas/bugs detectados de la versión actual y hacer un seguimiento de ellos en: https://github.com/arduino/Arduino/issues

La dirección para descargarse el IDE de Arduino es: https://www.arduino.cc/en/Main/Software

Además del IDE instalado en local, hay disponible un IDE on-line dentro del entorno Arduino Create https://create.arduino.cc/ que es una plataforma on-line integrada que permite escribir código, acceder a contenido, configurar placas y compartir proyectos, muy enfocado al Internet de las Cosas (IoT).

También existen otros IDEs alternativos como Atmel Studio http://www.atmel.com/Microsite/atmel-studio

Comunidad Arduino

Un factor del éxito de Arduino ha sido la comunidad que está apoyando este proyecto y que día a día publica nuevo contenido, divulga y responde a las dudas.

En Internet hay disponible todo tipo de cursos, tutoriales, herramientas de consulta, proyectos, etc… que ayudan a que se pueda usar Arduino con facilidad.

El primer sitio donde empezar para trabajar con Arduino es http://www.arduino.cc/ y el segundo sitio el playground de Arduino http://playground.arduino.cc/

Arduino playground es un wiki donde todos los usuarios de Arduino pueden contribuir. Es el lugar donde publicar y compartir código, diagrama de circuitos, tutoriales, trucos, cursos, etc.. y sobretodo el lugar donde buscar cuando tengamos dudas, un problema, una librería adecuada para nuestro proyecto, etc… Esa la base de datos de conocimiento por excelencia de Arduino.

También existen lugares no oficiales de Arduino donde resolver nuestras dudas:

Otro lugar de encuentro de la comunidad son diversos portales donde se publican proyectos con Arduino:

Por último, también hay espacios locales para la comunidad, son los llamados hacklabs hackerspace, makerspace, etc.. que aunque hay ciertas diferencias entre unos y otros, se trata de un sitio físico donde gente con intereses en ciencia, nuevas tecnologías, y artes digitales o electrónicas se puede conocer, socializar y colaborar. Puede ser visto como un laboratorio de comunidad abierta, un espacio donde gente de diversos trasfondos puede unirse. Pone al alcance de aficionados y estudiantes de diferentes niveles la infraestructura y ambiente necesarios para desarrollar sus proyectos tecnológicos.

Un ejemplo de ello es el URmaker: http://www.unirioja.es/urmaker/

Arduino vs Raspberry Pi

Desde hace tiempo han irrumpido en el mercado distintas soluciones de placas PC  también llamadas “Single Board Computer” (SBC), como Raspberry Pi, Beaglebone, etc…

Existe la creencia popular que Arduino es una Raspberry Pi pero con menos capacidades. Obviamente si comparamos los valores de memoria RAM, frecuencia de CPU y capacidad de almacenamiento, podemos creer que así es, pero se trata de dos placas con funcionalidades diferentes.

Las diferencias principales entre una Raspberry Pi y un Arduino son:

  • Número de entradas y salidas disponibles y sus capacidades de corriente y voltaje.
  • La programación, Arduino se usa para programación en tiempo real, en Raspberry Pi se usa para programación intensiva con gran cantidad de datos.
  • Como se ejecuta la aplicación del usuario

Raspberry Pi:

Arduino:

Analogía: Arduino es un Autómata programable y Raspberry Pi es un Ordenador, así que a la hora de decidirse que utilizar para un proyecto deberíamos pensar si usar un autómata o un ordenador.

Comparativa:

Conexiones Raspberry Pi:

Conexiones Arduino:

IMPORTANTE: Todos los pines de Raspberry Pi tienen un nivel lógico de 3.3V incluido puerto serie, bus I2C y SPI. Los pines de Raspberry Pi no soportan entradas de 5V. Para Arduino UNO el nivel lógico es de 5V.

Cada pin de Raspberry Pi soporta un máximo de 16mA hasta un total de 51mA para toda la placa. Arduino Uno soporta un máximo de 40mA por pin (20mA recomendado) y hasta 300mA en total para la placa.

Segunda Reunión Makers Logroño. Preparando el Arduino Day

El jueves 16 febrero nos volvimos a reunir los makers en el UR-Maker, el makerspace de la Universidad de La Rioja con el objetivo de hacer propuestas para el próximo Arduino Day que se celebrará el 1 de Abril.

Estas fueron las propuestas provisionales:

  • Alpha: Charla “Makerspaces. Experiencia Montando un Makerspace” en UR-Maker
  • José Ignacio: Taller de robots sigue-líneas (Lugar por definir)
  • Julio: Charla “Experiencia desde cero con Arduino” en COITIR
  • Vicente: Charla “Experiencia montando una impresora 3D“en COITIR
  • Juan: Taller para niños de Impresión 3D y makey-makey (Lugar por definir)
  • Enrique: Charla de aprox. 1 hora “IoT. Conectando Dispositivos con Arduino” en Think TIC
  • Enrique: Taller de aprox. 3 horas “Taller IoT. Conectando Dispositivos con Arduino” en Think TIC
  • Web de la charla y taller IoT Arduino de Enrique: http://www.aprendiendoarduino.com/arduino-day-2017/
  • Juan: Experiencia piloto 🙂 de las Primeras Jornadas del Arduino y el Chuletón en la sociedad gastronómica la trastienda. Será una comida junto con otras acciones por definir.

A media que se vayan cerrando los eventos iremos informando a través de las redes sociales y de la lista de correo. El medio de comunicación que seguiremos usando es la lista de correo de noticias de www.aprendiendoarduino.com

Lista de correo, apuntarse en http://list.aprendiendoarduino.com/mailman/listinfo/aprendiendoarduino.com.noticias o mandar un correo a aprendiendoarduino@gmail.com

Email contacto de Enrique Crespo: aprendiendoarduino@gmail.com

Twitter Enrique Crespo: @jecrespom

Juan también ha publicado en el blog un resumen de la reunión: https://makerslarioja.wordpress.com/2017/02/18/resumen-2-encuentro-maker-en-la-universidad-de-la-rioja/

Fotos:

Reunión Makers Logroño en makerspace UR-Maker

El jueves 2 de febrero de 2017 nos juntamos de una forma casi espontánea un grupo de aficionados a la impresión 3D, Arduino y Hardware Libre en general, lo que puede considerarse como el primer encuentro de makers de Logroño.

Fue un encuentro donde se dio a conocer el primer makerspace de La Rioja: el Área UR-maker de la Universidad de La Rioja y compartimos un rato de conversación sobre makers, makerspaces, impresión 3D, máquinas CNC, cortadoras laser, Arduino, ESP8266, Raspberry Pi y en general del HW libre.

En esta reunión hablamos sobre la comunidad maker de Logroño y surgieron varias iniciativas que paso a enumerar:

  • Alpha nos presentó el área UR-maker y ofreció el espacio para futuras acciones con las limitaciones que explicó en la reunión.
  • Ernesto Rodríguez habló del Think TIC donde ya se han impartido cursos y jornadas sobre impresoras 3D, Arduino y otros temas relacionados. Es otro punto de encuentro que tenemos los makers.
  • José María Labarquilla del COITIR también nos hablo del colegio de ingenieros como espacio para futuros eventos maker.
  • Juan Nieto ha creado el blog https://makerslarioja.wordpress.com/ donde ha publicado un post sobre el primer encuentro de makers.
  • José Ignacio Casis nos enseñó su trabajo con la papelera loca http://www.larioja.com/logrono/201612/18/papelera-loca-logrono-20161218180525.html y el BB-8 impreso en 3D controlado con Arduino.
  • José Ignacio Casis también nos propone sacar a la calle a los makers con una carrera de coches en la calle.
  • Para comunicar próximos eventos, novedades y acciones maker, usaremos la lista de correo de noticias de www.aprendiendoarduino.com que ya usamos como medio para reunirnos. Para darte de alta en la lista de correo ir a: http://list.aprendiendoarduino.com/mailman/listinfo/aprendiendoarduino.com.noticias
  • También podéis usar el correo de Enrique Crespo aprendiendoarduino@gmail.com para comunicar cualquier iniciativa, dudas o simplemente suscribiros a la lista de correo.

El próximo evento que haremos es el Arduino Day que aún no hay fecha para este año pero se espera que sea para principios de abril. Lo tomamos como fecha para hacer talleres, concursos y eventos en Logroño.

Espero no haberme dejado nada y sino un correo a aprendiendoarduino@gmail.com para añadir al post.

Enlaces:

Fotos:

Ejemplos Prácticos

Cronómetro para Charlas

Cronómetro que indica mediante leds los minutos transcurridos y señala mediante colores el tiempo de cada parte programada según sea programada.

Código: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Otros/Neopixel_contador

Hardware usado:

Monitorización de Temperatura

Visualización en tiempo real de datos de temperatura en diversos lugares:

Hardware usado:

Envío de mensajes y SMSs en Tiempo Real

Enviar desde Arduino mensajes a una plataforma de visualización de mensajes en tiempo real. Arduino comunica alertas, estados, etc… que sea programado.

Enviar esos mismos mensajes por SMS a un móvil de forma que arduino deja un mensaje pendiente de enviar en la plataforma y otro Arduino remoto se encarga de revisar mensajes pendientes y los envía por SMS.

Hardware usado:

Obtención de datos agroclimáticos (Open Data)

En este ejemplo se van a obtener los datos agroclimáticos ofrecidos por el Servicio de Información Agroclimática de La Rioja (SIAR) para la toma de decisiones locales con un Arduino en función de esos datos. De esta forma podría, por ejemplo, podría programar riegos en un cultivo mediante la apertura de válvulas o puesta en marcha de bombas de regadío sin necesidad de instalar mis propios sensores. Estos además del ahorro económico, supone poder crear un sistema más sencillo y que consuma menos energía al no tener que alimentar los sensores, algo importante en sistemas instalados en el campo donde no hay acceso a la red eléctrica. Por otra se trata de datos de calidad ya validados.

Estos datos también se pueden combinar con los datos locales obtenidos por los sensores de Arduino, ya sea localmente o una una base de datos propia.

Más información sobre los datos publicados: https://seminariomirianandres.unirioja.es//wp-content/uploads/2016/12/si_ma_20161220.pdf

Web del servicio http://apisiar.larioja.org/help. Este servicio se encuentra aún en pruebas y para usarlo es necesario estar registrado.

Características de los datos:

  • Datos cada media hora. 21 parámetros
  • Parámetros climáticos: Tª; HR; Viento; Radiación; Lluvia; Tª suelo; Humectación
  • Datos en tiempo real. Comunicación remota vía GPRS
  • Datos diarios, mensuales

Código: https://github.com/jecrespo/apisiar_arduino

Hardware usado:

De la misma forma podrían obtenerse datos meteorológicos de AEMET (Agencia Estatal de Meteorología).

Datos abiertos AEMET: http://www.aemet.es/es/datos_abiertos

Instrucciones: https://opendata.aemet.es/centrodedescargas/inicio, es necesario solicitar una API KEY y esta tiene una caducidad de 90 días.

Ejemplo en HTTP:

GET /opendata/api/valores/climatologicos/inventarioestaciones/estaciones/?api_key=jyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJqbW9udGVyb2dAYWVtZXQuZXMiLCJqdGkiOiI3NDRiYmVhMy02NDEyLTQxYWMtYmYzOC01MjhlZWJlM2FhMWEiLCJleHAiOjE0NzUwNTg3ODcsImlzcyI6IkFFTUVUIiwiaWF0IjoxNDc0NjI2Nzg3LCJ1c2VySWQiOiI3NDRiYmVhMy02NDEyLTQxYWMtYmYzOC01MjhlZWJlM2FhMWEiLCJyb2xlIjoiIn0.xh3LstTlsP9h5cxz3TLmYF4uJwhOKzA0B6-vH8lPGGw HTTP/1.1
Host: opendata.aemet.es
Cache-Control: no-cache

Códigos de municipio: http://www.ine.es/daco/daco42/codmun/codmunmapa.htm

Documentación: https://opendata.aemet.es/dist/index.html

Programación Arduino

La programación de Arduino es la programación de un microcontrolador. Esto era algo más de los ingenieros electrónicos, pero Arduino lo ha extendido a todo el público. Arduino ha socializado la tecnología.

Programar Arduino consiste en traducir a líneas de código las tareas automatizadas que queremos hacer leyendo de los sensores y en función de las condiciones del entorno programar la interacción con el mundo exterior mediante unos actuadores.

Arduino proporciona un entorno de programación sencillo y potente para programar, pero además incluye las herramientas necesarias para compilar el programa y “quemar” el programa ya compilado en la memoria flash del microcontrolador. Además el  IDE nos ofrece un sistema de gestión de librerías y placas muy práctico. Como IDE es un software sencillo que carece de funciones avanzadas típicas de otros IDEs, pero suficiente para programar.

Estructura de un Sketch

Un programa de Arduino se denomina sketch o proyecto y tiene la extensión .ino. Importante: para que funcione el sketch, el nombre del fichero debe estar en un directorio con el mismo nombre que el sketch.

No es necesario que un sketch esté en un único fichero, pero si es imprescindible que todos los ficheros estén dentro del mismo directorio que el fichero principal.

void setup() {
 // put your setup code here, to run once:
}

void loop() {
 // put your main code here, to run repeatedly:
}

La estructura básica de un sketch de Arduino es bastante simple y se compone de al menos dos partes. Estas dos partes son obligatorios y encierran bloques que contienen declaraciones, estamentos o instrucciones.

Adicionalmente se puede incluir una introducción con los comentarios que describen el programa y la declaración de las variables y llamadas a librerías.

setup() es la parte encargada de recoger la configuración y loop() es la que contiene el programa que se ejecuta cíclicamente (de ahí el término loop –bucle-). Ambas funciones son necesarias para que el programa trabaje.

La estructura del sketch está definida en el siguiente enlace: http://arduino.cc/en/Tutorial/Sketch

Se puede resumir un sketch de Arduino en los siguientes diagramas de flujo:

Un ejemplo puede ser el diagrama de flujo de un sistema de arranque y parada de un motor DC:

Esquema de conexiones:

El código asociado a este diagrama se puede encontrar en https://github.com/jecrespo/Aprendiendo-Arduino-Proyectos/tree/master/Proyecto_02-Motor_DC_Controlado

Lenguaje de Programación Arduino

El lenguaje de programación de Arduino es C++. No es un C++ puro sino que es una adaptación que proveniente de avr-libc que provee de una librería de C de alta calidad para usar con GCC (compilador de C y C++) en los microcontroladores AVR de Atmel y muchas utilidades específicas para las MCU AVR de Atmel como avrdude: https://learn.sparkfun.com/tutorials/pocket-avr-programmer-hookup-guide/using-avrdude

Las herramientas necesarias para programar los microcontroladores AVR de Atmel son avr-binutils, avr-gcc y avr-libc y ya están incluidas en el IDE de Arduino, pero cuando compilamos y cargamos un sketch estamos usando estas herramientas.

Aunque se hable de que hay un lenguaje propio de programación de Arduino, no es cierto, la programación se hace en C++ pero Arduino ofrece una api o core que facilitan la programación de los pines de entrada y salida y de los puertos de comunicación, así como otras librerías para operaciones específicas. El propio IDE ya incluye estas librerías de forma automática y no es necesario declararlas expresamente. Otra diferencia frente a C++ standard es la estructuctura del programa que ya hemos visto anteriormente.

Toda la información para programar Arduino se encuentra en el reference de la web de Arduino: https://www.arduino.cc/en/Reference/HomePage y es la capa superior que ofrece Arduino para programar los microcontroladores de una forma sencilla y con un lenguaje de programación entendible fácilmente.

Un manual sencillo de entender para la programación es el “arduino programming notebook” de brian w. Evans. Puedes consultarlo o descargarlo desde:

En contraposición al core de Arduino, es posible usar comandos estándar de C++ en la programación de Arduino siempre que estén incluidos en el avr libc:

Cuando compilamos y cargamos el programa en Arduino esto es lo que ocurre:

Además todo esto no solo es válido para las placas Arduino, sino para muchas otras placas y microcontroladores que usando el mismo lenguaje de programación tenemos soporte para compilarlo y transferir el código binario a la memoria flash del microcontrolador.

Un ejemplo de uso de funciones AVR que no dispone el entorno de Arduino es cuando queremos hacer delays muy pequeños. La función delayMircoseconds() puede hacer el delay más pequeño con el lenguaje de Arduino que es de 2 microsegundos.

Para delays menores es necesario usar ensamblador y en concreto la función ‘nop’ (no operation. Cada llamada a ‘nop’ ejecuta un ciclo de reloj que para 16 MHz es un retraso de 62,5 ns.

__asm__("nop\n\t"); 
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t");

Otra característica propia de la programación de microcontroladores en C++ son el acceso a los elementos de HW mediante la lectura y escritura en los registros del microcontrolador.

Los registros son unas zonas concretas de la memoria RAM accesibles directamente desde la CPU o desde otros elementos del microcontrolador que permite hacer operaciones directas.

Cálculos de la velocidad de las operaciones en Arduino: http://forum.arduino.cc/index.php?topic=200585.0

Librerías

Las librerías son trozos de código hechos por terceros que usamos en nuestro sketch. Esto nos facilita mucho la programación y hace que nuestro programa sea más sencillo de hacer y de entender. En este curso no veremos como hacer o modificar una librería pero en este curso debemos ser capaces de buscar una librería, instalarla, aprender a usar cualquier librería y usarla en un sketch.

Las librerías normalmente incluyen los siguientes archivos comprimidos en un archivo ZIP o dentro de un directorio. Estas siempre contienen:

  • Un archivo .cpp (código de C++)
  • Un archivo .h o encabezado de C, que contiene las propiedades y métodos o funciones de la librería.
  • Un archivo Keywords.txt, que contiene las palabras clave que se resaltan en el IDE (opcional).
  • Muy posiblemente la librería incluye un archivo readme con información adicional de lo que hace y con instrucciones de como usarla.
  • Directorio denominado examples con varios sketchs de ejemplo que nos ayudará a entender cómo usar la librería (opcional).

La instalación de librerías se puede hacer directamente desde el gestor de librerías o manualmente.

En el Arduino Playground también tenemos un listado mucho más amplio de librerías, ordenadas por categorías: http://playground.arduino.cc/Main/LibraryList

También tenemos información de como interactuar con diferente HW en http://playground.arduino.cc/Main/InterfacingWithHardware

Además de estas librerías “oficiales” que podemos obtener desde el gestor de librerías y las publicadas en el playground de Arduino, existen muchos desarrollos disponibles en Internet y los propios fabricantes de componentes HW publican las librerías para poder usarlo o incluso la propia comunidad de usuarios.

Ejemplo de librería: https://github.com/jecrespo/simpleNTP

Ejemplo de Programación

Como ejemplo del proceso de programación con Arduino es el contador de minutos para charlas hecho con una matriz 8×8 de leds tricolor: https://www.adafruit.com/product/1487

Este contador marca los minutos que llevas durante la charla y marca en bloque de 10 colores para indicar la finalización de cada capítulo de 10 minutos

Pasos:

  1. Leer caracteristicas del HW y como conectarlo: https://learn.adafruit.com/adafruit-neopixel-uberguide
  2. Elegir una librería para manejarlo: http://fastled.io/
  3. Instalar la librería: https://github.com/FastLED/FastLED
  4. Leer cómo manejar la librería: https://github.com/FastLED/FastLED/wiki/Basic-usage
  5. Escribir el código y publicarlo: https://github.com/jecrespo/Aprendiendo-Arduino/blob/master/Otros/Neopixel_contador/Neopixel_contador.ino

Computación Física

La computación física (physical computing) se refiere al diseño y construcción de sistemas físicos que usan una mezcla de software y hardware para medir e interactuar con el medio que le rodea.

La computación física significa la construcción de sistemas físicos interactivos mediante el uso de software y hardware que pueden detectar y responder al mundo analógico. En un sentido amplio, la computación física es un marco creativo para entender la relación de los seres humanos con el mundo digital. En el uso práctico, el término describe con mayor frecuencia proyectos artesanales, de diseño o de hobby que utilizan sensores y microcontroladores para traducir entradas analógicas a un sistema de software y controlar dispositivos electromecánicos tales como motores, servos, iluminación u otro hardware.

La computación física es un enfoque para aprender cómo los seres humanos se comunican a través de computadoras que comienza por considerar cómo los seres humanos se expresan físicamente. La interacción clásica con los ordenadores es a través de teclados, ratones, pantalla, altavoces, etc… y toda la programación se hace con esos límites. En el caso de la computación física, no existen esos límites sino los del ser humano que interactúa.

Programación en Tiempo Real (RTC)

En informática, la programación en tiempo real (RTC) o reactive computing describe sistemas de hardware y software sujetos a una “restricción en tiempo real”, por ejemplo, un evento a una respuesta del sistema. Los programas en tiempo real deben garantizar la respuesta dentro de las limitaciones de tiempo especificadas. A menudo se entiende que las respuestas en tiempo real están en el orden de milisegundos, ya veces microsegundos. Un sistema no especificado como en tiempo real normalmente no puede garantizar una respuesta dentro de un periodo de tiempo, aunque pueden darse tiempos de respuesta reales o esperados.

Un sistema en tiempo real ha sido descrito como aquel que “controla un entorno recibiendo datos, procesándolos y devolviendo los resultados lo suficientemente rápido para afectar el entorno en ese momento”. El término “tiempo real” se utiliza en el control de procesos y sistemas empresariales significa “sin demora significativa”.

El software en tiempo real puede usar:

Con Arduino hacemos una programación en tiempo real recibiendo continuamente datos de los sensores o de los puertos de comunicación, analizandolos y respondiendo al entorno mediante los actuadores o las comunicaciones en un tiempo muy rápido.

Los sistemas operativos en tiempo real (RTOS) son sistemas que responden a la entrada inmediatamente. Se utilizan para tareas tales como la navegación, en las que el ordenador debe reaccionar a un flujo constante de nueva información sin interrupción. La mayoría de los sistemas operativos de uso general no son en tiempo real porque pueden tardar unos segundos, o incluso minutos, en reaccionar.

Implementación de multitarea:

Existen sistemas operativos en tiempo real (RTOS) para Arduino como freeRTOS: http://www.freertos.org/

freeRTOS en Arduino: https://feilipu.me/2015/11/24/arduino_freertos/

De Arduino al Procesado de Datos Masivo

Arduino es una herramienta perfecta para la recogida de todo tipo de datos en cualquier lugar y condición, comprobación, pre-procesado y normalización de los datos y finalmente transporte de esos datos de una forma rápida y segura al lugar donde se van a almacenar para posteriormente ser procesados y analizados.

Arduino es capaz de recoger datos, tratarlos en tiempo real (limitado por su capacidad de procesamiento) y comunicarse con el sistema de almacenamiento de datos.

Al ser Arduino un elemento barato y con muchas capacidades de comunicación es posible usarlo en la captura de datos distribuidos y desplegar tantos sensores como sea necesario creando una red de sensores fácilmente escalable.

Y obtener datos distribuidos para visualizarlos y analizarlos:

La adquisición de datos (DAQ) es el proceso de medir un fenómeno eléctrico o físico como voltaje, corriente, temperatura, presión o sonido. Un sistema DAQ consiste de sensores, hardware de medidas DAQ y un PC donde almacenar y tratar los datos. Comparados con los sistemas de medidas tradicionales, los sistemas DAQ basados en PC aprovechan la potencia del procesamiento, la productividad, la visualización y las habilidades de conectividad de los PCs estándares en la industria proporcionando una solución de medidas más potente, flexible y rentable.

Un sistema DAQ básico sería un Arduino que recoge los datos, los procesa y los guarda en una tarjeta SD o un PC conectado, pero con Arduino podemos ir más allá y crear una red de sistemas DAQ interconectados que procesan los datos que capturan y los mandan a una base de datos o repositorio único o distribuido.

Elementos que intervienen

A la hora de recoger datos para su procesamiento debemos responder estas preguntas:

  • ¿Qué quieres medir? – Sensores
  • ¿Cómo lo quieres conectar? – Comunicaciones /Protocolos
  • ¿Donde vas a almacenar los datos? – Plataformas
  • ¿Qué quieres hacer con los datos? – Herramientas de procesado

Todo esto está relacionado con el denominado Internet de las Cosas (IoT).

Elementos que intervienen:

  • Protocolos de comunicación, lenguaje para comunicar el HW y el SW. HTTP, fiware, MQTT, API REST,…

  • Plataformas Software, almacenar y tratar los datos recogidos por nuestros sensores. Pueden ser plataformas de terceros o plataformas propias desarrolladas por nosotros o simplemente guardar en BBDD. Por ejemplo: Carriots, Thingspeak, Temboo, Thinger, etc…
    Además todas estas plataformas SW que están en la nube, deben estar soportadas por un HW de servidores, unas BBDD de gran capacidad y una infraestructura segura que los hospede.
  • Servicios, son los servicios que ofrecen las plataformas como la visualización de los datos recogidos, análisis de los datos, envío de avisos cuando se detecte un evento, interconexión con otras plataformas, etc…
    Servicios ofrecidos por la plataforma carriots: https://www.carriots.com/que-es-carriots

A modo de resumen, estos son los elementos:

Sensor — MCU — Comunicación — Protocolo — Plataforma — Servicios

Uno de los retos del IoT es mandar datos de cualquier sensor a través de cualquier protocolo a cualquier plataforma de forma inalámbrica y usando la menor energía posible (baterías) y todo esto mediante una comunicación segura (cifrada).

Plataformas

Podemos usar de forma gratuita diversas plataformas para conectar nuestro Arduino con ellas y usarlas para mostrar datos, analizar los datos, responder a ciertos eventos, realizar interacciones con Arduino, etc…

Algunas ejemplos de plataformas son:

Aplicaciones de Arduino

Existen multitud de entornos de aplicación de Arduino: automatización industrial, domótica, herramienta de prototipado, plataforma de entrenamiento para aprendizaje de electrónica, tecnología para artistas, eficiencia energética, monitorización, adquisición de datos, DIY, aprendizaje de habilidades tecnológicas y programación, etc…

En la educación tanto en institutos en secundaria y bachillerato como en formación profesional y la universidad, Arduino ha entrado con mucha fuerza para entrenar habilidades y como herramienta pedagógica.

Que se puede hacer con Arduino: https://aprendiendoarduino.wordpress.com/2016/06/26/que-puede-hacer-arduino/

Algunos ejemplo de aplicaciones de Arduino:

Arduino en la Industria

Arduino cada vez se está implantando más y más en la industria y no solo como una herramienta de prototipado, sino que los sistemas de control (autómatas) se están abriendo cada vez más. Algunos ejemplos de uso de Arduino:

Prototipo de zapatillas John Luck ciclismo con medida de potencia  con Arduino:

HW Usado:

Empresas que usan Arduino para I+D:

Arsys:

  • Monitorización en Tiempo real
  • Avisos precoces
  • Control remoto de instalaciones
  • Eficiencia energética
  • Automatización de procesos
  • Automatización de informes/Cuadros de mando
  • Mantenimientos Predictivos
  • PRL

Arduino nos permite recoger y almacenar millones de datos de todo tipo: temperatura, humedad, consumos eléctricos, presión, velocidad de ventiladores, condiciones de maquinaria, alarmas externas, etc… y es posible analizarlos de una forma visual, correlar eventos, buscar patrones o relaciones, etc… puesto que todas estas variable interactúan unas con otras.

Google usa los datos ambientales, de consumo eléctrico, etc… para conseguir unos data center más eficiente mediante el uso de redes neuronales. Se calcula el PUE (Power usage effectiveness) cada 30 segundos, se hace seguimiento constante de una serie de variables y han construido unos modelos capaces de predecir y mejorar la eficiencia del data center.

Más información:

Además el uso extensivo de data mining en los data centers va a cambiar la estructura de los data centers con el uso de FPGAs, GPUs y superordenadores más optimizados para tareas de dataminig que un servidor actual: http://datacenterfrontier.com/machine-learning-changing-the-data-center/