Archivo de la etiqueta: Arduino

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: https://store.arduino.cc/arduino-uno-rev3

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: https://store.arduino.cc/arduino-mega-2560-rev3

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: https://store.arduino.cc/arduino-ethernet-rev3-without-poe

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: https://store.arduino.cc/arduino-due

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: https://store.arduino.cc/arduino-leonardo-with-headers

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 Leonardo ETH

Web: https://store.arduino.cc/arduino-leonardo-eth  

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 Micro

Web: https://store.arduino.cc/arduino-micro

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: https://store.arduino.cc/arduino-mini-05

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 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): https://store.arduino.cc/arduino-yun

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

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

Familia MKR

La familia de Arduino MKR son uan serie de placas con un factor de forma diferente al de Arduino mucho más pequeño y basados todos en el microcontrolador de 32 bits de Atmel SAMD21. Estas placas están pensadas principalmente para IoT.

Arduino MKRZero

Web: https://store.arduino.cc/arduino-mkrzero

Primero modelo de la familia MKR y heredero del Arduino Zero.

Arduino MKR1000 WIFI

Web: https://store.arduino.cc/arduino-mkr1000

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.

El ATSAMW25 está compuesto por tres principales bloques:

  • SAMD21 Cortex-M0+ 32bit low power ARM MCU
  • WINC1500 low power 2.4GHz IEEE® 802.11 b/g/n Wi-Fi (mismo que el wifi 101 shield)
  • ECC508 CryptoAuthentication

Arduino MKR FOX 1200

Web: https://store.arduino.cc/arduino-mkrfox1200

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

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

Arduino MKR WAN 1300

Web: https://store.arduino.cc/mkr-wan-1300

Presentado el 25 de septiembre de 2017 en la maker faire de NY: https://blog.arduino.cc/2017/09/25/introducing-the-arduino-mkr-wan-1300-and-mkr-gsm-1400/

Arduino + LoRa:

Arduino MKR GSM 1400

Web: https://store.arduino.cc/mkr-gsm-1400

Presentado el 25 de septiembre de 2017 en la maker faire de NY: https://blog.arduino.cc/2017/09/25/introducing-the-arduino-mkr-wan-1300-and-mkr-gsm-1400/

Arduino + GSM:

Accesorios para Arduinos MKR

Otros Arduinos oficiales

Existen aun mas Arduino oficiales:

Otros:

Todos los productos de Arduino: https://www.arduino.cc/en/Main/Products

Arduinos para Wearables

Arduino Lilypad

Web: https://store.arduino.cc/lilypad-arduino-main-board

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/

Otros:

Retirados

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

Arduino 101

Web: https://store.arduino.cc/genuino-101

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/

Intel ha descontinuado la gama de microcontroladores usados en diversos Arduinos, lo que parece el fin de la asociación entre Intel y Arduino, más aun cuando Arduino ha firmado un acuerdo con ARM.

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

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

Anuncios

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

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.

Arduino no solo proporciona las placas (Hardware), sino que nos proporciona un software consistente en un entorno de desarrollo (IDE), un lenguaje de programación simplificado para el HW y el bootloader ejecutado en la placa. La principal característica del software (IDE) 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.

Arduino promete ser una forma sencilla de realizar proyectos interactivos para cualquier persona. Para alguien que quiere hacer un proyecto, el proceso pasa por descargarnos e instalar el IDE buscar un poco por internet y simplemente hacer “corta y pega” del código que nos interese y cargarlo en nuestro HW. Luego hacer los cableados correspondientes con los periféricos y ya tenemos interaccionando el software con el Hardware. Todo ello con una inversión económica mínima: el coste del Arduino y los periféricos.

Arduino es una tecnología que tiene una rápida curva de aprendizaje con básicos conocimientos de programación y electrónica, que permite desarrollar proyectos en el ámbito de las Smart Cities, el Internet de las cosas, dispositivos wearables, salud, ocio, educación, robótica, etc…

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

Otras definiciones de Arduino:

Que es arduino en un minuto (video): http://learn.onemonth.com/what-is-arduino

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

Mitos sobre Arduino que todo el mundo cree y no son verdad: https://www.baldengineer.com/5-arduino-myths.html

Primer Arduino:

Arduino simplifica el trabajo con microcontroladores y ofrece las siguientes ventajas: barato, multiplataforma, entorno de programación sencillo, software libre y extensible mediante librerías en C++, hardware libre y extensible.

Al trabajar con Arduino, se manejan conceptos de diferentes tecnologías que a priori no tienen nada que ver entre ellos pero que los unifica: electronica digital y analogica, electricidad, programación, microcontroladores, tratamiento de señales, protocolos de comunicación, arquitectura de procesadores, mecánica, motores, diseño de placas electrónicas etc…

Diez razones para usar Arduino: http://www.modulo0tutoriales.com/10-razones-para-usar-arduino/

¿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 o mostrar por un display lo tecleado.

Con Arduino  es posible automatizar cualquier cosa para hacer agentes autónomos (si queréis llamarles Robots también). Controlar luces y dispositivos, o cualquier otra cosa que se pueda imaginar, es posible optar por una solución basada en Arduino. Especialmente en desarrollos de dispositivos conectados a Internet, Arduino es una solución muy buena.

Qué puede hacer Arduino? https://aprendiendoarduino.wordpress.com/2016/06/26/que-puede-hacer-arduino/

Entornos de aplicación de Arduino? https://aprendiendoarduino.wordpress.com/2016/06/26/entornos-de-aplicacion-arduino/

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.

El hardware de Arduino usa microcontroladores generalmente Atmel AVR. Los microcontroladores más usados en las plataformas Arduino son el Atmega168, Atmega328, Atmega1280, ATmega8 por su sencillez, pero se está ampliando a microcontroladores Atmel con arquitectura ARM como el Atmel SAMD21 o los ST STM32, y también Intel.

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

Placas Arduino: https://aprendiendoarduino.wordpress.com/2017/06/19/placas-arduino-2/

Un shield es una placa compatible que se puede colocar en la parte superior de los arduinos y permite extender las capacidades del arduino.

Shields Arduino: https://aprendiendoarduino.wordpress.com/2017/06/20/shields-arduino-3/

HW Compatible Arduino

Además del HW oficial de Arduino tenemos infinidad de placas compatibles con Arduino.

Dentro del HW compatible con Arduino podemos distinguir tres tipos:

Listados de placas Arduino y compatibles:

Dentro del entorno Arduino, podemos encontrar placas basadas en el microcontrolador ESP8266 con wifi integrado y pila de protocolos TCP/IP que no sigue el factor de forma de Arduino. De este microcontrolador han salido muchas placas como las wemos https://www.wemos.cc/

Placas de otros fabricantes de microcontroladores como Microchip o Mediatek con sus modelos ChipKit o LinkIt.

Documentación de la placa linkit one:

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: https://github.com/arduino/Arduino/issues y en http://forum.arduino.cc/index.php?board=2.0

En principio el IDE de arduino solo tenía soporte para las placas Arduino y los clones o forks con los mismos microcontroladores que los Arduinos oficiales. Desde la versión 1.6.2 del IDE de arduino.cc y gracias al gestor de placas, podemos añadir soporte a otros microcontroladores y placas al IDE de Arduino, como al ESP8266.

Listado de URLs para soporte de tarjetas no oficiales: https://github.com/arduino/Arduino/wiki/Unofficial-list-of-3rd-party-boards-support-urls

Arduino.cc tiene 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/ para microntroladores Atmel.

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.

Arduino playground: http://playground.arduino.cc/

Algunos apartados importantes en playground.

Otro lugar donde la comunidad colabora, se puede buscar información y preguntar las dudas que tengamos, es el foro Arduino: http://forum.arduino.cc/.

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

Arduino en las redes sociales:

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.

Hacklab: https://es.wikipedia.org/wiki/Hacklab

Mejores prácticas Hackerspaces: https://elplatt.com/new-hackerspace-design-patterns

Listado de Hackerspaces: https://hackerspaces.org/wiki/List_of_ALL_Hacker_Spaces

También hay otro espacio local algo diferente que son los fablabs: es un espacio de producción de objetos físicos a escala personal o local que agrupa máquinas controladas por ordenadores.

Fablab: https://es.wikipedia.org/wiki/Fab_lab

Qué es un fablab: http://fab.cba.mit.edu/about/charter/

Este podcast explica las diferencias entre estos espacios: http://make.cesargarciasaez.com/2016/02/01/la-hora-maker-010-fablabs-makespaces-hackerspaces-y-hacklabs/

Movimiento maker: https://en.wikipedia.org/wiki/Maker_culture

Más información sobre la comunidad, makerspaces y fablabs, ver los artículos:

Importancia de Arduino en el mundo Hardware

Arduino y por extensión el hardware libre se ha convertido en un elemento importante no solo en el mundo maker sino también el la industria de fabricación de hardware.

Este enlace hace un estudio del estado de la industria del hardware en 2016. Más empresas están desarrollando productos innovadores y tenemos disponibles mejores herramientas para el prototipado y fabricación. El acceso a esas herramientas y el conocimiento alrededor de ellas es cada vez más universal. De estas herramientas destaca Arduino, Raspberry Pi y las impresoras 3D.

Enlace: http://blog.fictiv.com/posts/2016-state-of-hardware-report

Cabe destacar de este estudio que el 56% de las empresas usan Arduino como herramienta eléctrica de prototipado y el 91% de las empresas usan impresoras 3D como herramienta mecanica de prototipado.

Otra encuesta de hackster.io que muestra la importancia de Arduino: https://blog.arduino.cc/2016/07/06/the-worlds-largest-maker-survey-results-are-out/

Arduino también se está utilizando ampliamente en la docencia y en la investigación. Pero Arduino empezó como herramienta sencilla para artistas y usarlo en sus obras de arte, ejemplo de uso de Arduino en el Arte https://vimeo.com/149774067

¿Es Arduino un Juguete destinado a Makers?

Definitivamente NO, Arduino es una herramienta de prototipado accesible y barata que puede ser usada por profesionales para desarrollar aplicaciones profesionales.

Poner un Arduino en un producto comercial no es recomendable, pero sí usarlo como una herramienta de desarrollo y prototipado.

Además Arduino puede ser una herramienta para desplegar aplicaciones, hacer desarrollos internos o como sistema de monitorización dentro de una empresa de una forma sencilla y económica. Instalar un sistema con Arduino con decenas de sondas de consumo a lo largo de una empresa para detectar puntos de exceso consumo eléctrico y como elemento de eficiencia energética, es sencillo y económico usando por ejemplo un proyecto open source como https://openenergymonitor.org/

Veamos un ejemplo de una empresa riojana. Zapatillas de ciclismo John Luck con medidor de potencia de pedalada.

Presentación en el Eurobike del 2014:

Colaboración con el Centro Tecnológico del Calzado de La Rioja (CTCR): http://esmtb.com/27772/john-luck-se-une-al-centro-tecnologico-del-calzado-de-la-rioja/

Elementos montados que se ven en la imagen:

Campaña en kickstarter de un producto con otro concepto pero con el mismo objetivo: https://www.kickstarter.com/projects/brimbrothers/the-worlds-first-wearable-power-meter-for-cyclists. Más información: http://omicrono.elespanol.com/2016/02/medidor-potencia-en-zapatillas/  

Producto oficial lanzado en 2017:

El producto final ya no es un Arduino lógicamente, pero Arduino ha sido usado para el desarrollo de un producto comercial.

Antes de Arduino

Antes de Arduino, eran necesarios los programadores para cada MCU, lenguaje de programación ensamblador usando las instrucciones propias de la MCU y materiales caros.

Ejemplos:

Una plataforma muy extendida para aprender a programar microcontroladores era Basic Stamp.

Tabla de comparación de los microcontroladres Basic Stamp: https://www.parallax.com/sites/default/files/downloads/BASICStampComparisonChart-0114.pdf

Lenguaje de programación Pbasic: http://en.wikipedia.org/wiki/PBASIC

Guia de incio muy intersante de parallax para inicio con Basic Stamp: http://www.rambal.com/descargas/libros/WAM-v3.0-Spanish-v1.0.pdf

Placas de desarrollo con Basic Stamp: https://www.parallax.com/catalog/microcontrollers/basic-stamp/boards

Ejemplo de domotica con basic stamp: http://www.aprenderobotica.com/m/group/discussion?id=4310109%3ATopic%3A947

Interesante comparación entre Basic stamp y arduino: http://todbot.com/blog/2006/09/25/arduino-the-basic-stamp-killer/

Filosofía Arduino

Por último para entender bien lo que es Arduino, es recomendable ver el documental de Arduino de unos 30 minutos de duración. Arduino the Documentary: http://blog.arduino.cc/2011/01/07/arduino-the-documentary-now-online/

IoT Manifesto: https://create.arduino.cc/iot/manifesto/

We believe that the best way to grow this environment is to develop open source platforms and protocols to propose as an alternative to the myriad of proprietary hardware and software platforms each one of the big players are developing.

We believe in creating tools that make these technologies understandable to the most diverse set of people as possible, this is the only way to make sure innovation benefits most of humanity.

We propose that connected devices should be: Open, Sustainable and Fair.

We foresee a world with billions of connected smart objects. These smart objects will be composed and orchestrated, thus making the Internet of Things a reality. The IoT will be the eyes, noses, arms, legs, hands of a new, extended, cyber body. The nervous system of such a body will be the Internet, allowing the interaction with a distributed intelligence made of hardware processors and human minds, behaviors, software procedures, and services, shared in the Cloud.

Funciones Definidas por Usuario

En programación, una función es un grupo de instrucciones con un objetivo particular y que se ejecuta al ser llamada desde otra función o procedimiento. Una función puede llamarse múltiples veces e incluso llamarse a sí misma (función recurrente).

Las funciones pueden recibir datos desde afuera al ser llamadas a través de los parámetros y puede entregar un resultado.

Una función tiene un nombre y un conjunto de instrucciones que son ejecutadas cuando se llama a la función. Son funciones setup() y loop() de las que ya se ha hablado anteriormente.

Las funciones de usuario pueden ser escritas para realizar tareas repetitivas y para reducir el tamaño de un programa. Segmentar el código en funciones permite crear piezas de código que hacen una determinada tarea y volver al área del código desde la que han sido llamadas.

Las funciones se declaran asociadas a un tipo de valor. Este valor será el que devolverá la función, por ejemplo ‘int’ se utilizará cuando la función devuelva un dato numérico de tipo entero. Si la función no devuelve ningún valor entonces se colocará delante la palabra “void”, que significa “función vacía”

Sintaxis:

 
tipo nombreFunción (parámetros) {
   instrucciones;
}

Anatomía de una función en C:

Para llamar a una función, simplemente:

 
nombreFunción(parámetros);

Una función que devuelve un valor siempre debe tener la instrucción Return, esta termina una función y devuelve un valor a quien ha llamado a la función: http://arduino.cc/en/Reference/Return

Si se define una función y no ponemos return el valor devuelto es cero. No da error de compilación.

Ventajas del uso de funciones:

  • Ayuda a tener organizado el código.
  • Una función codifica una tarea en un lugar de nuestro sketch, así que la función solo debe ser pensada una sola vez.
  • Reduce la probabilidad de errores al modificar el código.
  • Hacen que el tamaño del sketch sea menor porque el código de la función es reutilizado.
  • Facilita la lectura del código.
  • Hace más sencillo reutilizar código en otros sketches.

Más información: http://arduino.cc/en/Reference/FunctionDeclaration

Funciones Arduino en playground: http://playground.arduino.cc/Code/Function

En Visualino podemos hacer uso de las funciones en el apartado de “Functions”

En Visualino para multiplicar la lecturas de las entradas analógicas A0 y A1 usando una función multiplicación se puede hacer así:

Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio42-Visualino_Funciones

Nombres de funciones

Generalmente los nombres de las funciones deben ser en minúscula, con las palabras separadas por un guión bajo, aplicándose éstos tanto como sea necesario para mejorar la legibilidad.

“mixedCase” (primera palabra en minúscula) es aceptado únicamente en contextos en donde éste es el estilo predominante con el objetivo de mantener la compatibilidad con versiones anteriores.

En el caso de las clases, los nombres deben utilizar la convención “CapWords” (palabras que comienzan con mayúsculas).

Las funciones en Arduino pueden estar dentro del mismo fichero .ino o en otro fichero con extensión .ino dentro del directorio del sketch principal.

Funciones vs Librerías

Ejemplo de blink usando funciones:

 
void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}

void loop() {
  enciendo();
  delay(1000);  
  apago();
  delay(1000);  
}

void enciendo() {
  Serial.println("Enciendo...");
  digitalWrite(13, HIGH);
}

void apago(){
  Serial.println("Apago...");
  digitalWrite(13, LOW);  
}

Código: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio43-Blink_Funcion

En Visualino se podría hacer de esta forma:

Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio43-Visualino_Blink_Funcion

Este ejercicio también se podría hacer dividiendo el código en dos ficheros uno principal que tiene las funciones setup() y loop() y otro con las funciones enciende() y apaga () en el fichero funciones.ino. Los ficheros están en la misma carpeta y al abrirlos en el IDE de Arduino los vemos en pestañas diferentes.

Por lo tanto podemos organizar nuestro código en varios ficheros .ino en la misma carpeta. Todo ellos los veremos en pestañas en el IDE de Arduino.

Código en: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio44-Funciones

Esto también podría hacerse usando “librerías”  o fichero de C++ con un fichero funciones.h e incluyéndolo en el principal con la instrucción #include “funciones.h”.

En C++ el código se organiza en diferentes ficheros con extensiones .h y .cpp a los que se van llamando con #include para añadirlos al fichero que lo llama para poder usar su contenido.

Código en: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio45-Librerias

Práctica Final de Funciones

Con todo lo visto de Strings, operadores, estructuras de control y funciones, hacer un ejemplo de un menú interactivo donde se dan varias opciones y pulsando cada una de ellas se ejecuta una acción concreta. Si el valor pulsado no es ninguna de las opciones avisar y volver a mostrar el menú hasta que se pulse una opción correcta.

Opciones:

  • 1 – Encender Led pin 13
  • 2 – Apagar Ler pin 13
  • 3 – Contar segundos hasta pulsar tecla y mostrar por pantalla
  • 4 – Fin de programa

Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio46-Estructuras_de_Control

Arrays y Strings

Arrays

Un array es un conjunto de valores a los que se accede con un número índice. Cualquier valor puede ser recogido haciendo uso del nombre de la matriz y el número del índice. El primer valor de la matriz es el que está indicado con el índice 0, es decir el primer valor del conjunto es el de la posición 0. Un array tiene que ser declarado y opcionalmente asignados valores a cada posición antes de ser utilizado.

Declaración de un array:

 
int miArray[] = {valor0, valor1, valor2…}

Del mismo modo es posible declarar un array indicando el tipo de datos y el tamaño y posteriormente, asignar valores a una posición específica:

 
int miArray[5];
miArray[3] = 10;

Para leer de un array basta con escribir el nombre y la posición a leer:

x = miArray[3];

Las matrices se utilizan a menudo con estamentos de tipo bucle, en los que la variable de incremento del contador del bucle se utiliza como índice o puntero del array. Utilizando un bucle tipo for, el contador comienza en cero 0 y escribe el valor que figura en la posición de índice 0 en la serie que realizada sigue escribiendo en las siguientes posiciones. Con un bucle for podremos recorrer un array ya sea para leerlo o para escribir en él.

int myPins[5];
for (int i = 0; i < 5; i = i + 1) {
  Serial.println(myPins[i]);
}

IMPORTANTE: No se puede crear un array sin definir su tamaño, sino da un error de compilación.

La creación y manejo de arrays con Visualino aun no esté suficientemente desarrollada para poder usarse, recomiendo el uso de código.

Los arrays sólo pueden contener elementos del mismo tipo de datos. Si quisiéramos guardar tipos de datos diferentes en una misma variable, C nos ofrece la opción definir estructuras: http://c.conclase.net/curso/?cap=011

Ver más información en: http://arduino.cc/en/Reference/Array

Es posible definir arrays de varias dimensiones o también llamados matrices, simplemente haciendo un array de arrays

Definición:

 
int matriz[5][5];
matriz[2][0] = 3;

string (char array)

Un string es una cadena de caracteres, o lo que es lo mismo un string es un array de chars. Cuando se trabaja con grandes cantidades de texto, es conveniente usar un array de strings.

Una características de los strings es el carácter de terminación del string que nos indica dónde acaba la cadena de caracteres. Podemos tener un string de tamaño 50 para almacenar una cadena de caracteres, pero unas veces puede tener una sola palabra o una frase completa. Esto permite a funciones como Serial.print() saber hasta dónde debe leer del string para mostrarlo por pantalla.

El carácter de terminación o null termination se representa como ‘\0’ y corresponde al código 0 de ASCII.

Esto significa que un string para almacenar la palabra “hola” debe tener un tamaño de 5 y no de 4 para poder guardar el null termination.

Los strings siempre se definen entre dobles comillas “hola”, mientras que los caracteres siempre se definen con comillas simples ‘h’.

Ver:

String (Objeto)

Se trata de una clase que permite usar y manipular cadenas de texto de una forma más sencilla que los strings. Puedes concatenar, añadir, buscar, etc… usando los métodos/funciones que ofrece esta clase.

Para los nuevos en programación o en Arduino es recomendable usar el Objeto String en lugar de los strings como array de caracteres por su facilidad de uso.

Los Strings tienen un uso intensivo de memoria, pero son muy útiles y se van a utilizar mucho en el apartado de comunicación, por ese motivo es importante aprender a manejar los Strings.

Tener en cuenta que al no ser un tipo de dato propiamente dicho sino una clase, tiene funciones asociadas (métodos), operadores y propiedades. Es una abstracción del dato y para aprender a usarlo hay que leerse la documentación correspondiente.

Documentación de Arduino sobre la clase String:

Además de la clase String, podemos utilizar las funciones estándar de C++ para manipular strings y hacer lo mismo que hacemos con la clase String, pero de una forma más compleja, donde tendremos que manejarnos bien con los punteros.

Operadores String (Objeto)

También existen operadores para los Strings (objeto), similares a las operaciones vistas anteriormente:

Visualino implementa el objeto String y sus operadores en los apartados “variables” y “text”

Estructuras de control

En programación, las estructuras de control permiten modificar el flujo de ejecución de las instrucciones de un programa.

Con las estructuras de control se puede:

  • De acuerdo con una condición, ejecutar un grupo u otro de sentencias (If-Then-Else)
  • De acuerdo con el valor de una variable, ejecutar un grupo u otro de sentencias (Select-Case)
  • Ejecutar un grupo de sentencias mientras se cumpla una condición (Do-While)
  • Ejecutar un grupo de sentencias hasta que se cumpla una condición (Do-Until)
  • Ejecutar un grupo de sentencias un número determinado de veces (For-Next)

Todos los lenguajes de programación modernos tienen estructuras de control similares. Básicamente lo que varía entre las estructuras de control de los diferentes lenguajes es su sintaxis; cada lenguaje tiene una sintaxis propia para expresar la estructura.

En Visualino las estructuras de control se encuentran en el apartado “control”

Estructuras de decisión

if:  es un estamento que se utiliza para probar si una determinada condición se ha alcanzado, como por ejemplo averiguar si un valor analógico está por encima de un cierto número, y ejecutar una serie de declaraciones (operaciones) que se escriben dentro de llaves, si es verdad. Si es falso (la condición no se cumple) el programa salta y no ejecuta las operaciones que están dentro de las llaves.

Referencia Arduino: http://arduino.cc/en/Reference/If

if… else:  viene a ser un estructura que se ejecuta en respuesta a la idea “si esto no se cumple haz esto otro”. Por ejemplo, si se desea probar una entrada digital, y hacer una cosa si la entrada fue alto o hacer otra cosa si la entrada es baja.

else: puede ir precedido de otra condición de manera que se pueden establecer varias estructuras condicionales de tipo unas dentro de las otras (anidamiento) de forma que sean mutuamente excluyentes pudiéndose ejecutar a la vez. Es incluso posible tener un número ilimitado de estos condicionales. Recuerde sin embargo que sólo un conjunto de declaraciones se llevará a cabo dependiendo de la condición probada.

Referencia Arduino: http://arduino.cc/en/Reference/Else

Tutorial if() – Comparar el valor leido de un potenciometro con un umbral y encender un led si el valor leido es mayor que el umbral https://www.arduino.cc/en/Tutorial/ifStatementConditional

Uso de if con Visualino

switch..case: Al igual que if, switch..case controla el flujo del programa especificando en el programa que código se debe ejecutar en función de unas variables. En este caso en la instrucción switch se compara el valor de una variable sobre los valores especificados en la instrucción case.

break es la palabra usada para salir del switch. Si no hay break en cada case, se ejecutará la siguiente instrucción case hasta que encuentre un break o alcance el final de la instrucción.

default es la palabra que se usa para ejecutar el bloque en caso que ninguna de las condiciones se cumpla.

Referencia Arduino: http://arduino.cc/en/Reference/SwitchCase

Uso de switch con Visualino

Tutorial Switch(case) – Leer una fotorresistencia y en función de unos valores predefinidos imprimir la cantidad de luz en 4 valores: noche, oscuro, medio, claro https://www.arduino.cc/en/Tutorial/SwitchCase

Estructuras de repetición

for: La declaración for se usa para repetir un bloque de sentencias encerradas entre llaves un número determinado de veces. Cada vez que se ejecutan las instrucciones del bucle se vuelve a testear la condición. La declaración for tiene tres partes separadas por (;). La inicialización de la variable local se produce una sola vez y la condición se testea cada vez que se termina la ejecución de las instrucciones dentro del bucle. Si la condición sigue cumpliéndose, las instrucciones del bucle se vuelven a ejecutar. Cuando la condición no se cumple, el bucle termina.

Cualquiera de los tres elementos de cabecera puede omitirse, aunque el punto y coma es obligatorio. También las declaraciones de inicialización, condición y expresión puede ser cualquier estamento válido en lenguaje C sin relación con las variables declaradas.

Referencia Arduino: http://arduino.cc/en/Reference/For

Tutorial for() – efecto con leds coche fantastico https://www.arduino.cc/en/Tutorial/ForLoopIteration

while: Un bucle del tipo while es un bucle de ejecución continua mientras se cumpla la expresión colocada entre paréntesis en la cabecera del bucle. La variable de prueba tendrá que cambiar para salir del bucle. La situación podrá cambiar a expensas de una expresión dentro el código del bucle o también por el cambio de un valor en una entrada de un sensor.

Referencia Arduino: http://arduino.cc/en/Reference/While

Tutorial while() – calibrar el valor de un sensor analógico https://www.arduino.cc/en/Tutorial/WhileStatementConditional

do..while: El bucle do while funciona de la misma manera que el bucle while, con la salvedad de que la condición se prueba al final del bucle, por lo que el bucle siempre se ejecutará al menos una vez.

Referencia Arduino: http://arduino.cc/en/Reference/DoWhile

goto: transfiere el flujo de programa a un punto del programa que está etiquetado.

Referencia Arduino: http://arduino.cc/en/Reference/Goto

break: se usa en las instrucciones do, for, while para salir del bucle de una forma diferente a la indicada en el bucle.

Referencia Arduino: http://arduino.cc/en/Reference/Break

continue: se usa en las instrucciones do, for, while para saltar el resto de las instrucciones que están entre llaves y se vaya a la siguiente ejecución del bucle comprobando la expresión condicional.

Referencia Arduino: http://arduino.cc/en/Reference/Continue

En Visualino están disponibles todas las estructuras de repetición

Y por su puesto ante cualquier duda: http://arduino.cc/en/Reference/HomePage