Archivo de la categoría: Hardware

Placas Arduino

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

Un shield es una placa compatible que se puede colocar en la parte superior de los arduinos y permite extender las capacidades del arduino. De estas hablaremos en profundidad más adelante.

Primer Arduino:

Arduino Uno

Web: http://arduino.cc/en/Main/ArduinoBoardUno

Es la placa estándar y 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 Atmega328p con 32Kbytes de ROM para el programa.

Este es el Arduino que vamos a usar en el curso.

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

Arduino Mega

Web: http://arduino.cc/en/Main/ArduinoBoardMega2560

Es con mucha diferencia el más potente de las placas con microcontrolador de 8 bits 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

Mega ADK es una placa basada en el Mega2560 pero con un USB host adicional para conectar móviles basados en Android:

Web: https://www.arduino.cc/en/Main/ArduinoBoardMegaADK

Getting Started con ADK: https://www.arduino.cc/en/Guide/ArduinoADK

Arduino Ethernet

Web: http://arduino.cc/en/Main/ArduinoBoardEthernet

Incorpora un puerto ethernet, está basado en el Arduino Uno y nos permite conectarnos a una red o a Internet mediante su puerto de red.

Arduino Due

Web: http://arduino.cc/en/Main/ArduinoBoardDue

Arduino con la mayor capacidad de procesamiento, basado en un microcontrolador de 32 bit y arquitectura ARM: Atmel SAM3X8E ARM Cortex-M3 CPU. Este arduino está alimentado a 3.3V y dado que gran parte de los shields, sensores, actuadores para Arduino y compatible son a 5V lo limita, pero cada vez se ven más elementos donde se puede elegir el voltaje entre 3.3 y 5V.

Importante: 12-bit ADC

Microcontrolador: http://www.atmel.com/devices/sam3x8e.aspx

Arduino Leonardo

Web: http://arduino.cc/en/Main/ArduinoBoardLeonardo

La diferencia de este arduino con el resto es que trae un único MCU ATmega32u4 que tiene integrado la comunicación USB, lo que elimina la necesidad de un segundo procesador. Esto tiene otras implicaciones en el compartimento del arduino al conectarlo al ordenador, lo que no lo hace apto para iniciarse con él.

Microcontrolador: http://www.atmel.com/devices/atmega32u4.aspx

Los Arduinos basados en el microcontrolador 32u4 permiten aparecer al Arduino conectado al ordenador como un ratón o teclado nativo, simulando un dispositivo de este tipo.

Getting Started: https://www.arduino.cc/en/Guide/ArduinoLeonardoMicro

Librería MouseKeyboard: https://www.arduino.cc/en/Reference/MouseKeyboard

Arduino Micro

Web: http://arduino.cc/en/Main/ArduinoBoardMicro

También basado en el ATmega32u4 pero mucho más compacto.

Ejemplo de placa para uso de Arduino pequeños con bornas: https://spiercetech.com/shop/home/17-arduino-nano-30-controller-terminal-breakout-board.html

Arduino Mini

Web: http://arduino.cc/en/Main/ArduinoBoardMini

Versión miniaturizada de la placa Arduino UNO basado en el ATMega328. Mide tan sólo 30x18mm y permite ahorrar espacio en los proyectos que lo requieran. Las funcionalidades son las misma que Arduino UNO. Necesita un programador para conectarlo al ordenador: http://arduino.cc/en/Main/USBSerial

Arduino Lilypad

Web: http://arduino.cc/en/Main/ArduinoBoardLilyPad

Diseñado para dispositivos “wearables” y e-textiles. Para coser con hilo conductor e instalarlo sobre prendas.

Más información para fabricar wearable con arduino en: http://lilypadarduino.org/

Arduino Yun

El Arduino Yun es un Arduino que es diferente a lo que son el resto de Arduino porque además de llevar un microcontrolador, incorpora un Microprocesador MIPS con un Sistema Operativo Linux embebido. La ventaja que aporta Arduino Yun y sus derivados es que el microcontrolador y el microprocesador están conectado mediante un puerto serie y además Arduino nos ofrece una serie de herramientas/librerías que facilita la interconexión entre ellos.

Arduino Yun (MCU + MP con Linux): http://arduino.cc/en/Main/ArduinoBoardYun

Guía con Open WRT: https://www.arduino.cc/en/Guide/ArduinoYun

Guía con LininoOS: https://www.arduino.cc/en/Guide/ArduinoYunLin

Arduinos para Wearables

Nuevos Arduinos incorporados recientemente

Arduino 101

Web: https://www.arduino.cc/en/Main/ArduinoBoard101

Es el sucesor del Arduino UNO con procesador Intel Curie Quark de 32 bit diseñado para ofrecer el mínimo consumo de energía, 384 KB de memoria flash, 80 KB de SRAM, un sensor DSP integrado, bluetooth de baja energía, acelerómetro y giroscopio de 6 ejes.

Video de 101: https://blog.arduino.cc/2016/01/13/unboxing-and-setup-of-arduino-101/

Código Firmware: https://github.com/01org/corelibs-arduino101 que no hace falta instalarlo porque ya viene integrado en el IDE de arduino.cc y desde el gestor de librerías se instala en: C:\Users\<user>\AppData\Local\Arduino15\packages\Intel\hardware\arc32\1.0.5

Review completa del 101: http://www.kitguru.net/components/cpu/james-morris/intel-genuino-101-review/

Genuino MKR1000

Web: https://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 Leonardo ETH

Web: https://www.arduino.cc/en/Main/ArduinoBoardLeonardoEth

Es un Arduino Leonardo con ethernet proporcionado por el controlador W5500. Se trata de la versión actualizada del Arduino Ethernet.

Documentación: http://labs.arduino.org/Arduino%20leonardo%20eth

Getting Started: http://labs.arduino.org/Getting+Started+with+Arduino+Leonardo+Eth

Arduino MKRFOX1200

Es la última incorporación de Arduino anunciado en abril de 2017. En una placa de desarrollo pensada para el IoT con conectividad Sigfox. Comparte muchas características con otras placas de la familia MKR como em microcontrolador SAM D21 32-bit Cortex-M0+.

Incluye un módulo ATA8520 con conectividad sigfox de amplia cobertura y bajo consumo capaz de funcionar durante 6 meses con dos pilas AA. También incluye una suscripción por dos años a la red Sigfox: http://www.sigfox.com/en

Comprar: https://store.arduino.cc/homepage/arduino-mkrfox1200

Web: https://blog.arduino.cc/2017/04/18/introducing-the-arduino-mkrfox1200/

Otros Arduinos oficiales

Existen aun mas Arduino oficiales:

Otros Arduinos de arduino.org

Se trata de placas diseñadas por arduino.org pero que no han sido ofertados oficialmente por arduino.cc. Estas placas tienen soporte del IDE oficial de Arduino.

Retirados

Hay modelos retirados, pero la documentación sigue disponible y es posible aun comprarlas por terceros que las fabrican o fabricarlas uno mismo.

Placas Compatibles Arduino

La marca Arduino está protegida y solo puede usarse por Arduino, pero debido a que se trata de hardware libre, existen multitud de placas disponibles que bien son clones, placas derivadas (forks) u otras placas totalmente independientes pero que la comunidad ha desarrollado el código para poder programarlas con el lenguaje de programación de Arduino.

Cuando hablamos de placas compatibles con Arduino, son aquellas que se pueden programar con el IDE de Arduino.

Listado no oficial de placas de terceros soportadas por el IDE de Arduino: https://github.com/arduino/Arduino/wiki/Unofficial-list-of-3rd-party-boards-support-urls

Funduino

Web: https://www.funduinoshop.com/epages/78096195.sf/en_GB/?ViewObjectPath=%2FShops%2F78096195

Chipkit

Web: http://chipkit.net/

ESP8266

Web: https://espressif.com/en/products/hardware/esp8266ex/overview

Moteino

Web: https://lowpowerlab.com/guide/moteino/

Resumen

Arduino.cc products: https://www.arduino.cc/en/Main/Products

Arduino.org products: http://www.arduino.org/products/boards

Como distinguir un arduino oficial de una copia: http://arduino.cc/en/Products/Counterfeit

Guía para comparar Arduino:  https://learn.sparkfun.com/tutorials/arduino-comparison-guide

Arduino Intel Edison + Intel IoT Analytics

Este artículo está motivado por mi asistencia al hackathon celebrado entre el 25 y 27 de marzo de 2017 en el World Hosting Days en Europa Park, Rust, Alemania. Más información: http://worldhostingdays.com/global/

Datos del hackathon: http://worldhostingdays.com/global/side-event/cloud-community-hackathon

En mi caso fui a participar en el proyecto conjunto de 1and1 e Intel donde el objetivo era comprobar las características del microprocesador Intel Edison manejando sensores y actuadores en combinación con el motor de analíticas de Intel para IoT hospedado en el cloud de 1and1. Los detalles del proyecto pueden verse en: http://worldhostingdays.com/global/project/1and1

El kit de herramientas que dispusimos fue:

  • Cloud infrastructure
    • Open IoT Connector hosted by 1&1 which connects devices to the cloud. http://streammyiot.com/
    • 1&1 Analytic Cloud Environment with MQTT broker and Node.js.

También dispusimos de la API para interactuar con el cloud de 1&1:

Arduino Edison

Intel Edison es un módulo de computación de Intel que es posible usarlo con el formato de Arduino. Está centrado en el IoT y wearables. Tiene un sistema linux yocto embebido pero es capaz de ejecutar los Sketch de Arduino que al ser compilados se guardan en un directorio del sistema de ficheros y es ejecutado. También dispone de conectividad Wi-Fi y Bluetooth.

El Intel Edison es un pequeño módulo desarrollado por Intel y orientado a la electrónica embebida incluso en proyectos comerciales. Es una pequeña placa llena de posibilidades y no es para menos ya que en su diminuto tamaño encontramos un Intel® Atom™ SoC dual-core con WiFi, Bluetooth LE integrado. Una funcionalidad importante es que dispone de un conector genérico de 70 pines para poder conectar todo tipo de periféricos y placas desarrolladas para esta plataforma.

Está pensado para aplicaciones de bajo consumo pero gracias al amplio soporte de software proporcionado por Intel, puede ser utilizado en poco minutos incluso por principiantes en electrónica.

Web Intel Edison:

Wikipedia: https://en.wikipedia.org/wiki/Intel_Edison

El kit de Arduino Edison incluye los pines hembra de Arduino, que permite conectar la mayoría de placas shields de Arduino al módulo de forma nativa. Todos los pines del 0 al 13 (junto con AREF y GND), pines analógicos 0 a 5, alimentación, ICSP y el UART están en el mismo sitio que el Arduino UNO R3 para guardar la máxima compatibilidad.  Además la placa del Intel Edison incluye un zócalo para tarjetas de memoria Micro SD, un conector Micro USB conectado al UART2 y un conector estándar USB 2.0. En la documentación se dispone de librerías para gestionar los pines de Arduino disponibles.

Arduino Edison HW guide: http://www.intel.com/content/dam/support/us/en/documents/edison/sb/edison-arduino-hardware-guide.pdf

Arquitectura Intel Edison (microprocesador):

  • Dual-core Intel® Atom™ processor at 500 MHz
  • 1 GB DDR3 RAM, 4 GB eMMC flash
  • 40 multiplexed GPIO interfaces
  • Bluetooth* 4.0, Wi-Fi*
  • Yocto Project*, Brillo*
  • Arduino* compatible
  • Open-source software development environment
  • C/C++, Python*, Node.js*, HTML5, JavaScript*

Características: http://download.intel.com/support/edison/sb/edison_pb_331179002.pdf

Arduino Edison: https://www.arduino.cc/en/ArduinoCertified/IntelEdison

Características de la placa:

  • 20 digital input/output pins, including 6 pins as PWM outputs.
  • 6 analog inputs.
  • 1 UART (Rx/Tx).
  • 1 I2C.
  • 1 ICSP (In-system programming ) 6-pin header (SPI).
  • Micro USB device connector OR (via mechanical switch) dedicated standard size USB host Type-A connector.
  • Micro USB device (connected to UART).
  • SD card connector.
  • DC power jack (7 to 15VDC input).

Documentación: https://software.intel.com/es-es/iot/hardware/edison/documentation

Intel ha desarrollado sus propias herramientas para programar el microprocesador Intel Edison, que ofrece más potencia a la hora de programarlo que con el lenguaje de Arduino y su IDE, pero tiene la desventaja de tener que aprender su SDK. El SDK puede encontrarse en descargas: https://software.intel.com/es-es/iot/hardware/edison/downloads

Al igual que el Arduino UNO el kit de Intel® Edison para Arduino hace posible tener 20 pines digitales de entrada/salida, 6 de los cuales pueden usarse como entradas analógicas. El Intel® Edison tiene 4 salidas PWM que pueden configurarse mediante jumpers para usarse en cualquiera de los 6 pines que soportan PWM en el Arduino UNO (pins 3, 5, 6, 9, 10, or 11).

Los pines de entrada/salida (I/O) y los analógicos pueden ser configurados para funcionar a 5V o 3.3V. Los pines en modo salida soportan hasta 24mA a 3.3V y 32mA a 5V

Arquitectura:

Para usar el microprocesador Intel Edison, hay también disponible una breakout board:

Breakout board: http://download.intel.com/support/edison/sb/edisonbreakout_hg_331190006.pdf

Esta breakout board ha sido diseñada para exponer los pines nativos a 1.8V del Intel® Edison y poder trabajar con ella. La placa se compone de una fuente de alimentación, una cargador de batería, USB OTG power switch, UART to USB bridge, USB OTG port y I/O header.

Pinout: http://www.intel.com/content/www/us/en/support/boards-and-kits/000006090.html

Hardware Guide: http://download.intel.com/support/edison/sb/edisonmodule_hg_331189004.pdf

Compra:

Comparativa de Intel Edison:

Edison no es una raspberry Pi, principalmente porque no hay una salida de video en Edison. Aquí hay una buena comparativa: https://www.sparkfun.com/news/1603

Más información de Intel Edison en: https://www.arduino.cc/en/ArduinoCertified/IntelEdison

Arduino Edison tiene una distribución de Yocto Linux corriendo en su interior. Más información sobre el proyecto Yocto en: https://en.wikipedia.org/wiki/Yocto_Project

Programación Arduino Edison

Arduino Edison es posible programarlo con el IDE de Arduino y es posible desde el sketch de Arduino hacer peticiones al kernel de Linux con llamadas al sistema.

Enlaces imprescindibles para empezar con Arduino Edison:

Para poder usar Arduino Intel Edison con el IDE de Arduino, es necesario instalar el paquete para las Intel i686 Boards.

Los entornos de desarrollo para Intel Edison son:

IDEs para hardware Intel: https://software.intel.com/es-es/iot/tools-ide/ide

Development environment:

Supported sensors:

Sensor kits:

Intel XDK IoT Edition (programar con node.js):

Procedure to Autostart the Arduino Sketch on Intel® Edison: https://software.intel.com/en-us/blogs/2015/08/01/procedure-to-autostart-the-arduino-sketch-on-edison

Modo AP en Intel Edison: https://software.intel.com/en-us/getting-started-with-ap-mode-for-intel-edison-board

Ejemplos de uso de Arduino Edison:

Arduino Galileo

Existen otros Arduinos con microprocesadores Intel, uno de ellos es el más reciente Arduino 101 que es el mismo concepto que Arduino UNO, pero con concepto de SoC del Arduino Edison también existe el Arduino Galileo. Este es un Arduino anterior y con menos capacidades que el Edison.

Para usar el Arduino Galileo con el IDE de Arduino es necesario instalarse el el paquete para las Intel i586 Boards.

Arduino Galileo (retirado): https://www.arduino.cc/en/ArduinoCertified/IntelGalileo

Arduino Galileo Gen2: https://www.arduino.cc/en/ArduinoCertified/IntelGalileoGen2

Web Intel: https://software.intel.com/es-es/iot/hardware/galileo

Wikipedia: https://en.wikipedia.org/wiki/Intel_Galileo

Arduino Galileo también usa Yocto Linux.

Edison vs Galileo:

Plataforma Cloud IoT de Intel

Una vez aclarado qué es Arduino Edison y que ya sabemos que podemos programarlo como cualquier otro Arduino, veamos cómo combinar nuestra experiencia con Arduino con la plataforma cloud IoT de Intel para hacer proyectos de IoT.

Intel al igual que otras muchas empresa ha desarrollado sus recursos para IoT. La Web de recursos para IoT de Intel: https://software.intel.com/es-es/iot/home

Visión de Intel en el IoT: http://www.intel.la/content/www/xl/es/internet-of-things/overview.html

La plataforma cloud IoT de Intel está disponible en http://streammyiot.com/ y es posible registrarse y usarla de forma gratuita.

Intel® IoT Analytics Platform:

  • Provides seamless Device-to-Device and Device-to-Cloud communication.
  • Ability to run rules on your data stream that trigger alerts based on advanced analytics.
  • Foundational tools for collecting, storing, and processing data in the cloud.
  • Free for limited and noncommercial use.

Con los datos recogidos con esta plataforma luego es posible extraerlos, transformarnos, cargarlos y utilizarlos. Cuando son enormes cantidades es cuando se usa el big data: https://software.intel.com/en-us/bigdata

Esta plataforma IoT está alojado el los servidores cloud de 1&1: https://www.1and1.com/dynamic-cloud-server

Para empezar a usar esta plataforma tenemos toda la documentación en:

Tutorial excelente para uso de Arduino edison con Intel IoT Analytics: http://www.instructables.com/id/Intel-IoT-Analytics-Dashboard/

Otro tutorial: https://medium.com/@shonsh/visualizing-sensor-data-using-intel-iot-analytics-d2d1de9ae118#.5ktwz5lyl

Otras plataformas de cloud analytics con las que conectar el Arduino Edison: https://software.intel.com/en-us/iot/cloud-analytics:

Uso de la Plataforma Intel IoT Analytics

Una vez aprendidos los conceptos vamos a ponerlos en práctica conectando el Arduino Edison a la plataforma Intel IoT Analytics, para ellos comencemos a recoger datos.

La programación del HW IoT tiene dos partes: recoger datos de los sensores y la de enviar los datos. Para empezar primero debemos configurar una cuenta de IoT analytics y luego seguir con la conectividad.

Pasos a dar para poner a subir datos a la plataforma:

IMPORTANTE

Para entender la estructura en que los datos se guardan en la plataforma leer: https://github.com/enableiot/iotkit-api/wiki/Api-Home#data-structure

Una vez instalado todo vemos el dashboard:

Para mandar datos desde Arduino Edison a la plataform Intel IoT Analytics podemos hacerlo vía HTTP o MQTT. En este caso vamos a usar HTTP.

Disponemos de un repositorio en github con muchos ejemplo para el IoT Kit Intel: https://github.com/enableiot/iotkit-samples

Y un muy buen ejemplo de uso de la API client for python lo tenemos en: https://github.com/enableiot/iotkit-samples/blob/master/api/python/iotkit_client.py

Estas mismas llamadas para guardar datos en la plataforma usando la API se pueden aplicar a Arduino para que guarde los datos.

Para obtener el token de usuario: https://github.com/enableiot/iotkit-api/wiki/Authorization

POST /v1/api/auth/token HTTP/1.1
Host: 109.228.56.48
Content-Type: application/json

{
    "username": "aprendiendoarduino@gmail.com",
    "password": “password"
}

 

Dar de Alta un dispositivo: https://github.com/enableiot/iotkit-api/wiki/Device-Management

PUT /v1/api/accounts/4d6398a7-49aa-45f0-8b53-54896778a736/devices/90-A2-DA-10-B3-BD/activation HTTP/1.1
Host: 109.228.56.48
Authorization: Bearer APIKEY
Content-Type: application/json

{ 
     "activationCode": "activationcode"
}

Añadir un componente a un dispositivo: https://github.com/enableiot/iotkit-api/wiki/Device-Management#add-a-component-to-a-device

POST /v1/api/accounts/4d6398a7-49aa-45f0-8b53-54896778a736/devices/90-A2-DA-10-00-00/components HTTP/1.1
Host: 109.228.56.48
Authorization: Bearer APIKEY
Content-Type: application/json
Cache-Control: no-cache

{ 
	"cid": "436e7e74-6771-4898-9057-26932f5eb7e1",
	"name": "temperatura",
	"type": "temperature.v1.0"
}

Código Arduino para poner en un actuador y que reaccione: https://github.com/enableiot/iotkit-samples/blob/master/arduino/IoTkit/examples/IoTKitActuationExample/IotKitActuationExample.ino

Data API para envío y recepción de datos: https://github.com/enableiot/iotkit-api/wiki/Data-API

Rule Management: https://github.com/enableiot/iotkit-api/wiki/Rule-Management

Alert Management: https://github.com/enableiot/iotkit-api/wiki/Alert-Management

Error Handling: https://github.com/enableiot/iotkit-api/wiki/Error-Handling

Hackathon WHD

Ahora que ya sabemos como manejar la plataforma y como mandar los datos desde el Arduino Edison, en el Hackathon del WHD planteamos un proyecto de una planta solar inteligente que en función de la demanda energética, es capaz de activar o desactivar paneles monitorizados en tiempo real y detectar cualquier incidencia o avería, dentro del proyecto de Intel y 1&1: http://worldhostingdays.com/global/project/1and1

El material usado en el hackathon fue:

Repositorio con documentación y ejemplo para el hackathon del WHD: https://github.com/srware/WHD.global-2017

Repositorio de todo el trabajo hecho en el hackathon: https://github.com/jecrespo/aprendiendoarduino-iot/tree/master/04-Intel%20IoT%20Analytics

El grupo de Españoles trabajando con Arduino:

En el hackathon:

Para conectar a red Arduino Edison:

Cómo cargar un programa en el Edison: https://www.arduino.cc/en/Guide/IntelEdison

Comandos interesantes en yocto linux

  • configure_edison –help
  • iotkit-admin
  • systemctl stop iotkit-agent
  • systemctl start iotkit-agent
  • systemctl status iotkit-agent -l
  • iotkit-admin catalog
  • iotkit-admin register
  • iotkit-admin observation

Dentro del Arduino Edison debe estar instalada la versión de yocto con el iotkit, que es un agente al que puede llamar para hacer determinadas tareas en la plataforma IoT de Intel. Explicación: “The agent is a program that runs as a daemon on the device, listening for simple messages from other processes and handling the necessary message formatting and security to send observations to the cloud. The agent comes with another program, iotkit-admin, which provides many utility functions, such as testing the network, activating a device, registering time series, and sending test observations. The agent is controlled by systemctl, the systemd service manager.”

Cuando cargamos un sketch de Arduino en el Edison, este se pierde después de reiniciar la placa. Para que funcione en el reinicio poner este fichero en el systemctl: /etc/systemd/system/arduino-sketch.service

Contenido del fichero:

systemctl daemon-reload
systemctl status arduino-sketch.service
systemctl enable arduino-sketch.service

Para resolver los problemas con el timezone debo realizar estos pasos

  • timedatectl status
  • ls -l /etc/localtime
  • cd /usr/share/zoneinfo (ver dónde está configurado)
  • timedatectl set-timezone Europe/Paris (y pongo esta)

Para ver el catálogo: iotkit-admin catalog

Para registrar componentes:

  • iotkit-admin register panel_temperature temperature.v1.1
  • iotkit-admin register solar_radiation radiation.v1.0
  • iotkit-admin register onoffButton button.v1.1
  • iotkit-admin register alarm powerswitch.v1.0
  • iotkit-admin register status powerswitch.v1.0

Para cambiar protocolo:

  • iotkit-admin protocol ‘mqtt’
  • iotkit-admin protocol ‘rest+ws’

Con estos detalles que aprendimos de la gente de Intel que estuvo en el hackathon pudimos hacer nuestro proyecto de una planta solar conectada y el resultado se puede ver en https://github.com/jecrespo/aprendiendoarduino-iot/tree/master/04-Intel%20IoT%20Analytics

Vídeo del resultado:

Y nuestra presentación: https://www.slideshare.net/jecrespo/whd-global-2017-smart-power-plant

Nuestro proyecto: https://www.1and1.com/cloud-community/develop/hackathon-projects/11-and-intel/smart-solar-power-plant/

Y finalmente nuestro proyecto fue presentado en el WHD:

Más fotos y publicaciones de

Durante el hackathon se presentó la cloud community de 1&1: www.1and1.com/cloud-community

HW IoT

Esta conferencia sobre IoT con Arduino fue expuesta el 1 de abril de 2017 con motivo del Arduino Day. Puedes ver el video de la conferencia completa en http://www.innovarioja.tv/index.php/video/ver/1661


Dispositivos Hardware, son los dispositivos que van a medir y los que van a interactuar con el exterior.

El primer elemento, el que está más cerca de las “cosas” es el HW que se encarga de medir e interactuar con las “cosas” y procesar esos datos:

El elemento HW programable capaz de interactuar con estos dispositivos es el microcontrolador o el microprocesador.

El HW libre por excelencia es Arduino como microcontrolador y Raspberry Pi como microprocesador, con menor potencia física pero mayor potencia de cálculo.

Dentro del HW libre no solo debemos quedarnos con Arduino, sino que existen otros dispositivos compatibles que se programar igual que Arduino:

Y muchas más que aparecen cada día.

No solo para prototipos, PLC basado en Arduino: https://www.industrialshields.com/

Qué es Arduino

Esta conferencia sobre IoT con Arduino fue expuesta el 1 de abril de 2017 con motivo del Arduino Day. Puedes ver el video de la conferencia completa en http://www.innovarioja.tv/index.php/video/ver/1661


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

Definición de Arduino en la web oficial: https://www.arduino.cc/en/Guide/Introduction

Otras definiciones de Arduino:

Arduino es una plataforma abierta que facilita la programación de un microcontrolador. Los microcontroladores nos rodean en nuestra vida diaria, usan los sensores para escuchar el mundo físico y los actuadores para interactuar con el mundo físico. Los microcontroladores leen sobre los sensores y escriben sobre los actuadores.

En palabras de David Cuartielles: “Actualmente todo lo que nos rodea en la vida es digital (entendido como hacer operaciones matemáticas complejas y comunicar con otros dispositivos), cualquier cosa lleva un microchip, desde el microondas a un coche. Arduino lleva uno de esos microchips y te permite aprender a manejar como funciona el mundo en el que vivimos hoy en día y cómo interactúa el hombre con el mundo digital. Arduino es la puerta hacia tomar control de cómo funcionan las cosas actualmente y en el futuro. Así que encender el ordenador y empezar a programar.

El HW Arduino:

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.

El software hecho para Arduino es portable, es decir, el mismo firmware que hemos hecho para un Arduino/Microcontrolador, sirve para otras placas Arduino u otras placas compatibles Arduino como el ESP8266.

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.

La expresión local de la comunidad Arduino son los makerspaces como el UR-maker de la Universidad de La Rioja: http://www.unirioja.es/urmaker/

Para recibir información de los eventos de la comunidad maker de Logroño inscribirse en la lista de correo noticias@aprendiendoarduino.com o mandar un correo a aprendiendoarduino@gmail.com para inscribirse.

En resumen:

Arduino = HW + SW + Comunidad

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

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

En este momento hay 883 librerías oficiales de Arduino, listado: http://www.arduinolibraries.info/ y cada semana aumenta.

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

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

Toda la información para programar Arduino se encuentra en el reference de la web de Arduino: https://www.arduino.cc/en/Reference/HomePage

Aplicaciones Arduino

Desde los inicios de Arduino y el HW Open Source, la industria encontró una forma sencilla y barata de implementar el Internet de las cosas y la Industria 4.0. Con estas herramientas es posible realizar tareas como:

  • Machinery automation.
  • Installation Control. (Thermal, Climate conditioning, Water treatment, Chemical products, Food, etc.).
  • Industrial monitoring.
  • Data acquisition.
  • etc.

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.