Archivo de la categoría: Librerías Arduino

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/

Librerías Arduino

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).

Como instalar librerías: http://arduino.cc/en/Guide/Libraries

Hay varios métodos de instalar librerías:

  • Mediante el IDE de Arduino de forma automática. Admite la instalación desde un fichero zip o desde una carpeta ya descomprimida.

  • Instalación Manual. Descomprimiendo en un directorio la librería y copiandolo en el directorio de librerías. Generalmente Mi Documentos – Arduino – libraries. Aquí se guardan las librerías contribuidas por el usuario como lo denomina el IDE.
  • Desde el gestor de librerías. A partir de la versión 1.6.2 del IDE de Arduino se incorpora el gestor de librerías que facilita el trabajo. Esta herramienta es accesible desde Programa → Incluir Librería → Gestionar Librerías. Desde aquí podemos ver las librerías instaladas, buscar librerías disponibles, instalar librerías y actualizarlas.
    Esta herramienta también nos permite gestionar las librerías instaladas manualmente.
    Desde C:\Users\nombre_usuario\AppData\Local\Arduino15, podemos ver en formato json el listado de librerías y placas disponibles desde el gestor de librerías y tarjetas.

La librerías instaladas se guardan en el directorio indicado desde las preferencias del IDE.

IMPORTANTE: Para añadir una librería a nuestro proyecto simplemente se añade a nuestro código la palabra clave #include seguido del nombre de la librería.

Práctica: Instalación de Librerías

Instalar varias librerías como las del siguiente capítulo https://aprendiendoarduino.wordpress.com/2016/06/28/instalacion-librerias/

Compara el funcionamiento y limitaciones de las librerías MsTimer2.h y Timer.h con el ejemplo https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Otros/compara_timers

Instalación Librerías

La instalación, actualización y manejo librerías en Arduino es un aspecto importante a la hora de usar Arduino.

Para aprender a instalar librerías lo mejor es practicar, veamos unos ejemplos de instalación de dos librerías muy útiles como son la MsTimer2 que nos ofrece muchas utilidades de temporización y la librería para manejar un elemento HW como la sonda de temperatura y humedad DHT22.

Cuando se va a instalar una librería, la primera tarea es leer la documentación y aprender a usarla, ya sea leyendo el código, viendo los ejemplos o revisando la documentación si está disponible.

Pasos para realizar las prácticas:

  • Leer la documentación y entender que hace la librería.
  • Descargar el .zip del repositorio de github. Botón Download zip
  • Instalar la librería desde el IDE de Arduino
  • Buscar si la librería está en el gestor de librerías e instalarla.
    NOTA: Antes de instalar con el gestor de librerías, desinstalar la librería si se ha instalado en el paso anterior. Para desinstalar, borrar el directorio de la librería y reiniciar el IDE de Arduino.
  • Abrir alguno de los ejemplo suministrados por las librerías, leer el código, entender que hace y ejecutarlo en Arduino.

Práctica. Librería MsTimer2.

Instalar la librería MsTimer2 que nos será de utilidad en el futuro. Ejecutar el programa de ejemplo incluido en la librería para hacer blink sin necesidad de usar la instrucción delay().

Instalar la librería manualmente y desde el gestor de librerías.

Documentación de la librería: http://playground.arduino.cc/Main/MsTimer2

Nueva versión de la librería: http://www.pjrc.com/teensy/td_libs_MsTimer2.html

Repositorio: https://github.com/PaulStoffregen/MsTimer2

Práctica. Librería Timer.

Instalar la librería timer y ejecutar los ejemplos blink2 y read_A0_flashLED.

Documentación de la librería: http://www.doctormonk.com/2012/01/arduino-timer-library.html

Repositorio: https://github.com/JChristensen/Timer

Práctica. Librería Time

Instalar la librería Time que añade funcionalidades de mantenimiento de fecha y hora en Arduino sin necesidad de un hardware externo. También permite obtener fecha y hora como segundo, minuto, hora, día, mes y año.

Ejecutar el ejemplo TimeSerial.

Librería: http://playground.arduino.cc/Code/Time

Documentación: http://www.pjrc.com/teensy/td_libs_Time.html

Repositorio: https://github.com/PaulStoffregen/Time

Práctica. Librería Sonda temperatura/humedad DHT.

Señal de comunicación:

Instalar la librería del sensor de temperatura y humedad DHT22, tanto de forma manual como con el gestor de librerías.

Web del sensor: http://www.seeedstudio.com/depot/grove-temperaturehumidity-sensor-pro-p-838.html

Documentación: http://www.seeedstudio.com/wiki/Grove_-_Temperature_and_Humidity_Sensor_Pro

Datasheet: https://arduino-info.wikispaces.com/file/view/DHT22.pdf/556588503/DHT22.pdf

Repositorio: https://github.com/Seeed-Studio/Grove_Temperature_And_Humidity_Sensor

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 son colecciones de código que facilitan la interconexión de sensores, pantallas, módulos electrónicos, etc. El entorno de arduino ya incluye algunas librerías de manera que facilita, por ejemplo, mostrar texto en pantallas LCD.

Existen infinidad de librerías desarrolladas por terceros en internet con sus correspondientes forks, que nos ayudarán a conectar prácticamente cualquier dispositivo a los Arduinos de forma muy sencilla.

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).

Como instalar librerías: http://arduino.cc/en/Guide/Libraries

Hay varios métodos de instalar librerías:

  • Mediante el IDE de Arduino de forma automática. Admite la instalación desde un fichero zip o desde una carpeta ya descomprimida.

  • Instalación Manual. Descomprimiendo en un directorio la librería y copiandolo en el directorio de librerías. Generalmente Mi Documentos – Arduino – libraries. Aquí se guardan las librerías contribuidas por el usuario como lo denomina el IDE.
  • Desde el gestor de librerías. A partir de la versión 1.6.2 del IDE de Arduino se incorpora el gestor de librerías que facilita el trabajo. Esta herramienta es accesible desde Programa → Incluir Librería → Gestionar Librerías. Desde aquí podemos ver las librerías instaladas, buscar librerías disponibles, instalar librerías y actualizarlas.
    Esta herramienta también nos permite gestionar las librerías instaladas manualmente.
    Desde C:\Users\nombre_usuario\AppData\Local\Arduino15, podemos ver en formato json el listado de librerías y placas disponibles desde el gestor de librerías y tarjetas.

Este enlace explica como actualizar una librería: https://github.com/firmata/arduino#updating-firmata-in-the-arduino-ide—arduino-164-and-higher

El propio IDE de Arduino ya trae integradas varias librerías, pero además podemos descargar otras e incorporarlas a nuestro IDE y luego usarlas en nuestros programas.

La librerías instaladas por nosotros se guardan en el directorio indicado desde las preferencias del IDE.

El listado de librerías incluidas en el IDE y algunas de terceros podemos verlo en este enlace y acceder a la documentación de cada una de ellas para saber como usarlas: http://arduino.cc/en/Reference/Libraries

La librerías incluidas en el IDE tienen ejemplos para comprender su uso. Toda la información en: http://www.arduino.cc/en/Tutorial/LibraryExamples

Por ejemplo, la librería para trabajar con pantallas LCD. En este enlace está la ducumentación para el uso de esta librerías así como los métodos que nos facilita para trabajar con este tipo de pantallas: http://arduino.cc/en/Reference/LiquidCrystal

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 y un conjunto de ejemplos y snippets para usar con Arduino en http://playground.arduino.cc/Main/SketchList

IMPORTANTE: Para añadir una librería a nuestro proyecto simplemente se añade a nuestro código la palabra clave #include seguido del nombre de la librería.

Para finalizar con las librerías, generalmente cada dispositivo que compramos, shield, sensor, actuador, etc… viene con su propia librería que debemos instalar para poder usarlo. Estas librerías podemos verlas, modificarlas o incluso añadir funcionalidades.

A la hora de elegir un elemento de hardware, uno de los argumentos importantes es la librería que nos ofrece el fabricante o la comunidad y su facilidad de uso.

Por ejemplo si compramos una sonda de temperatura y humedad de tipo DHT11 como esta: http://www.adafruit.com/product/386, para usarla necesitaremos su librería correspondiente.

En la web del fabricante o el vendedor deberemos tener disponible la librería y el datasheet del dispositivo, en este caso.

Arduino y IoT

Que es el IoT

Internet de las cosas (en inglés Internet of things, abreviado IoT) es un concepto que se refiere a la interconexión digital de objetos cotidianos con Internet.

Definición de wikipedia: https://es.wikipedia.org/wiki/Internet_de_las_cosas

Arduino es un elemento que nos permite de forma sencilla y económica conectar cualquier cosa a Internet. Con un Arduino y un sencillo módulo ethernet o wifi podemos conectar a Internet sensores para informar, controlar motores o bombillas desde cualquier parte del mundo o mandar un SMS o email cada vez que se abra la puerta de casa.

Como afecta IoT a nuestro dia a dia: http://socialgeek.co/tecnologia/8-formas-que-the-internet-of-things-impactara-dia-dia

IoT en 5 minutos con Arduino: http://hackaday.com/2016/01/08/internet-of-things-in-five-minutes/

Aplicaciones de IoT: https://temboo.com/iot-applications

Temboo es una plataforma de IoT que nos permite conectar fácilmente mediante una API un Arduino con Internet, mostrar los datos recogidos e interactuar con ellos desde un navegador web.

Una visión del IoT aplicado a la industria es lo denominado como Industria 4.0 o Industria conectada o IIoT que deriva del concepto de M2M (machine to machine) que se refiere al intercambio de información o comunicación en formato de datos entre dos máquinas remotas sin necesidad de conexión a Internet sino que puede ser en una red privada y crear una industria inteligente donde todos los elementos están interconectados y comparten los datos.

Definiciones de wikipedia:

Diferencias entre IoT y M2M: https://www.pubnub.com/blog/2015-01-02-iot-vs-m2m-understanding-difference/

Telefónica y IoT: http://www.thinkingthings.telefonica.com/

El coche autónomo, en el que trabajan grupos como Google, BMW, Volvo o Tesla, es toda una proeza de la robótica.La conducción autónoma se basa en las comunicaciones máquina a máquina (M2M), por las que los vehículos pueden intercomunicarse con las señales, los semáforos y los otros automóviles. Todo esto también tiene mucho que ver con las smart cities.

Elementos que intervienen en el IoT

Explicación gráfica de los elementos necesarios en IoT: http://www.libelium.com/products/meshlium/wsn/

  • Qué quieres medir?
  • Cómo lo quieres conectar?
  • Qué quieres hacer con los datos?

Elementos en IoT:

  • Plataformas Software, para tratar los datos recogidos por nuestros sensores y almacenarlos. Pueden ser plataformas de terceros o plataformas propias desarrolladas por nosotros o simplemente guardar en BBDD propias. 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 mostrar los datos recogidos, mandar avisos cuando se detecte un evento o la interconexión con otras plataformas o simplemente. Servicios ofrecidos por la plataforma carriots: https://www.carriots.com/que-es-carriots

A modo de resumen, estos son los elementos en el IoT:

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.

Proyectos de IoT con Arduino

Ahora vamos a conectar Arduino a Internet o a cualquier otro tipo de red, es este caso usaremos ethernet y WiFi.

Cliente Web Arduino

Arduino puede navegar y obtener datos de Internet.

Explicación: https://www.arduino.cc/en/Tutorial/WebClient

Instrucciones usadas:

Código: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio25-EthernetClient

NOTA: poner cada una una MAC y una IP diferente para que funcione. Para usar DHCP simplemente usar Ethernet.begin(mac).

También puedo obtener la fecha y hora de Internet mediante NTP: http://www.arduino.cc/en/Tutorial/UdpNtpClient

También puedo leer los datos de temperatura y humedad de aemet.es y mostrarlo por pantalla: https://github.com/jecrespo/Aprendiendo-Arduino-Proyectos/tree/master/Proyecto_1-Estacion_Meteorologica_Mejorada

Web Server embebido en Arduino

Instalar un servidor web embebido en Arduino y conectarse a Arduino a través de un navegador. El servidor muestra los valores leídos en las entradas analógicas y refresca el valor cada 5 segundos.

Explicación: http://www.arduino.cc/en/Tutorial/WebServer

Instrucciones usadas:

Código: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio26-EthernetServer

También puedo encender el built-in led desde una web embebida: https://github.com/jecrespo/Aprendiendo-Arduino/blob/master/Ejercicio27-Boton/Ejercicio27-Boton.ino

También se puede controlar los leds de un neopixel mediante una web en un Arduino Yun: https://github.com/jecrespo/NeoPixel

En este caso la web está en un servidor web del sistema operativo openWRT basado en linux y al interactuar con él la librería bridge se encarga de comunicar internamente linux con el microcontrolador del Arduino Yun.

Webserver con Ajax

Mediante Ajax podemos actualizar los datos de la web embebida en Arduino sin necesidad de cargar toda la web, sino solo mandando los datos actualizados, economizando los datos mandados a través de la red.

Ajax:

Ejemplo del webserver anterior que muestra los datos de las entradas analógicas pero con Ajax.

Código: https://github.com/jecrespo/Aprendiendo-Arduino-Proyectos/tree/master/Proyecto_9-Servidor_Web_%20Embebido/EthernetServer-Ajax

Ejemplo avanzado de regulador de encendido con ajax, ejercicio 42: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio42-Ajax

Grabar datos de Arduino en un Ordenador (datalogger)

Con Arduino conectado a una red, se pueden recoger los datos (datalogger) y mandarlos a un servidor (p.e. una Raspberry Pi) y guardarlos en una Base de Datos. Con estos datos almacenados podemos mostrarlos, analizarlos, etc…

Grabar Datos leídos por Arduino en la entrada analógica A0 y grabarlos en una BBDD dentro de una Raspberry Pi o de un servidor público.

Arduino llama a un servicio (p.e. en PHP) pasándole las variables que quiero almacenar y ese servicio se encarga de grabar en la BBDD que puede estar en el mismo servidor.

Métodos POST y GET de HTTP: http://www.w3schools.com/tags/ref_httpmethods.asp

Código: https://github.com/jecrespo/Aprendiendo-Arduino-Proyectos/tree/master/Proyecto_10-Grabar_Raspberry

BBDD: https://qvm602.aprendiendoarduino.com o IP Raspberry Pi

NOTA: modificar el sketch de Proyecto_10-Grabar_Raspberry.ino para que grabe solo el valor de la entrada analógica y el nº de Arduino con el de vuestro puesto. Probar a grabar tanto en la Raspberry Pi como en el servidor público www.aprendiendoarduino.com en la ruta que se indique.

Mandar mensajes de Arduino y visualizarlos en tiempo real

Arduino solicita un nombre y un mensaje que escribimos en el puerto serie y lo manda a un servidor. Desde el servidor vemos los mensajes en tiempo real. Por ejemplo serviría para enviar alarmas a un sistema de monitorización cuando Arduino detecta un evento (pulsar un botón, abrir una puerta, etc…).

Visualizar los mensajes: http://www.aprendiendoarduino.com/servicios/ o IP Raspberry Pi

Código: https://github.com/jecrespo/Aprendiendo-Arduino-Proyectos/tree/master/Proyecto_10-Grabar_Mensajes

NOTA: el código de Arduino Proyecto_10-Grabar_Mensajes.ino tiene doserrores al compilar y no error al ejecutar, detectarlos y corregirlos. Veamos quién es el primero en mandar un mensaje.

Uso de plataformas de IoT con Arduino

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

Algunas plataformas existentes son:

Más proyectos con Arduino en: https://aprendiendoarduino.wordpress.com/2015/04/16/tema-5-taller-de-proyectos-con-arduino/

Y para finalizar…

Recordad que para aprender más sobre Arduino hay muchos cursos y documentación en Internet y los cursos de http://www.aprendiendoarduino.com/.

Y también en las redes sociales:

Y todas las novedades sobre Arduino, futuros eventos, cursos, etc… mediante correo electrónico en la lista: http://list.aprendiendoarduino.com/mailman/listinfo/aprendiendoarduino.com.noticias

Librerías (Gestor de 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. Debemos ser capaces de buscar una librería, instalarla, aprender el funcionamiento y usarla en un sketch.

Las librerías son colecciones de código que facilitan la interconexión de sensores, pantallas, módulos electrónicos, etc. El entorno de arduino ya incluye algunas librerías de manera que facilita, por ejemplo, mostrar texto en pantallas LCD.

Existen infinidad de librerías desarrolladas por terceros en internet con sus correspondientes forks, que nos ayudarán a conectar prácticamente cualquier dispositivo a los Arduinos de forma muy sencilla.

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

  • 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).

Como instalar librerías: http://arduino.cc/en/Guide/Libraries

Hay varios métodos de instalar librerías:

  • Mediante el IDE de Arduino de forma automática. Admite la instalación desde un fichero zip o desde una carpeta ya descomprimida.

instalar libreria

  • Instalación Manual. Descomprimiendo en un directorio la librería y copiandolo en el directorio de librerías. Generalmente Mis Documentos – Arduino – libraries, pero la ruta se define desde propiedades. En esta ruta se guardan las librerías “contribuidas por el usuario” como lo denomina el IDE.
  • Desde el gestor de librerías. A partir de la versión 1.6.2 del IDE de Arduino se incorpora el gestor de librerías que facilita el trabajo. Esta herramienta es accesible desde Programa → Incluir Librería → Gestionar Librerías. Desde aquí podemos ver las librerías instaladas, buscar librerías disponibles, instalar librerías y actualizarlas.
    Esta herramienta también nos permite gestionar las librerías instaladas manualmente.
    Desde C:\Users\nombre_usuario\AppData\Local\Arduino15, podemos ver en formato json el listado de librerías y placas disponibles desde el gestor de librerías y tarjetas.

Este enlace explica como actualizar una librería: https://github.com/firmata/arduino#updating-firmata-in-the-arduino-ide—arduino-164-and-higher

El propio IDE de Arduino ya trae integradas varias librerías, pero además podemos descargar otras e incorporarlas a nuestro IDE y luego usarlas en nuestros programas.

Las librerías instaladas por nosotros se guardan en el directorio indicado desde las preferencias del IDE.

2016-03-19 (7)

El listado de librerías incluidas en el IDE y algunas de terceros podemos verlo en este enlace y acceder a la documentación de cada una de ellas para saber como usarlas: http://arduino.cc/en/Reference/Libraries

La librerías incluidas en el IDE tienen ejemplos para comprender su uso. Toda la información en: http://www.arduino.cc/en/Tutorial/LibraryExamples

Por ejemplo, la librería para trabajar con pantallas LCD. En este enlace está la ducumentación para el uso de esta librerías así como los métodos que nos facilita para trabajar con este tipo de pantallas: http://arduino.cc/en/Reference/LiquidCrystal

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 y un conjunto de ejemplos y snippets para usar con Arduino en http://playground.arduino.cc/Main/InterfacingWithHardware

IMPORTANTE: Para añadir una librería a nuestro proyecto simplemente se añade a nuestro código la palabra clave #include seguido del nombre de la librería.

Para finalizar con las librerías, generalmente cada dispositivo que compramos, shield, sensor, actuador, etc… viene con su propia librería que debemos instalar para poder usarlo. Estas librerías podemos verlas, modificarlas o incluso añadir funcionalidades.

Por ejemplo si compramos una sonda de temperatura y humedad de tipo DHT11 como esta: http://www.adafruit.com/product/386, para usarla necesitaremos su libreria correspondiente.

En la web del fabricante o el vendedor deberemos tener disponible la librería y el datasheet del dispositivo, en este caso.

Práctica: Instalar mediante cualquiera de los tres métodos la librería MSTimer2:

Ver los ejemplos incluidos en la librería MSTimer2 y como hacer el programa blink con MSTimer2.

Lenguaje de programación Arduino

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 unas librerías 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

En Internet hay muchos recursos para aprender a programar en C:

Elementos básicos en la programación en C++:

  • {} entre llaves. Las llaves sirven para definir el principio y el final de un bloque de instrucciones. Se utilizan para los bloques de programación setup(), loop(), if.., etc.
  • ; punto y coma. El punto y coma “;” se utiliza para separar instrucciones en el lenguaje de programación de Arduino.
  • /*… */ bloque de comentarios. Los bloques de comentarios, o comentarios multi-línea son áreas de texto ignorados por el programa que se utilizan para las descripciones del código o comentarios que ayudan a comprender el programa.
  • // línea de comentarios. Una línea de comentario empieza con / / y terminan con la siguiente línea de código. Al igual que los comentarios de bloque, los de línea son ignoradas por el programa y no ocupan espacio en la memoria.

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

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

 

También disponemos de varias cheat sheets o chuletas para cuando se empieza a programar: