aprendiendoarduino_logo

Presentación del curso

Objetivos

El objetivo de este curso es introducir al alumno en el mundo del hardware libre, los microcontroladores, Internet de las cosas, robótica y el mundo maker y DIY, utilizando la plataforma Arduino.

Al finalizar el curso el alumno será capaz de manejar la plataforma Arduino, conocer su potencial e implementar proyectos de dificultad media. Aprenderá a usar el entorno de programación utilizado por Arduino, el lenguaje de programación, realizar programas y ejecutarlos sobre Arduino.

Otros objetivos de este curso son: conocer los componentes de hardware para recibir señales externas (sensores) y controlar elementos que le rodean para interactuar con el mundo físico (actuadores).

Requisitos

Este curso parte desde cero, por lo que no son necesarios unos conocimientos previos, pero sí son recomendables conocimientos básicos de programación (especialmente C++), electricidad y electrónica.

Es recomendable un conocimiento medio de Inglés puesto que gran parte de la documentación está en Inglés.

Metodología

El curso se compone de una combinación de teoría y práctica que establecen las bases necesarias para entender la plataforma Hardware y Software de Arduino, con una duración de 30 horas. También se realizarán proyectos más complejos al final del curso donde se pondrán en práctica los conocimientos y habilidades adquiridas.

Los recursos utilizados para la realización de este curso son:

Además están disponibles otros recursos para ampliar información:

Para interactuar en el curso se puede hacer mediante:

  • twitter con el hashtag #aprendiendoarduino
  • el blog poniendo comentarios en los post con la documentación del curso
  • correo a aprendiendoarduino@gmail.com

Para realizar las prácticas de este curso se incluye un Arduino Starter Kit (https://www.arduino.cc/en/Main/ArduinoStarterKit) que contiene un Arduino Uno, una serie de sensores y actuadores y diversos elementos electrónicos necesarios para realizar las prácticas y proyectos.

La documentación será toda on line con el objetivo de mantenerla actualizada y no con un documento físico que se queda obsoleto al día siguiente. Además la documentación irá creciendo durante el curso y después de finalizar el curso seguirá estando disponible para todos. La documentación principal se encuentra en http://www.aprendiendoarduino.com/, esto permite acceder a una documentación actualizada en todo momento y a los recursos con un solo clic.

El repositorio de código del curso en github está en http://github.com/jecrespo y aumenta continuamente con los nuevos ejemplos y prácticas que se van subiendo. Las prácticas se realizarán con el Arduino Starter Kit y usaremos el libro como base para las primeras prácticas como referencia y proponiendose más ejemplos.

Todo el material entregado es en préstamo y debe cuidarse al máximo, a la hora del montaje de las prácticas se seguirán las instrucciones para evitar dañar los componentes.

Toda la documentación está liberada con licencia Creative Commons.

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

Aprendiendo Arduino by Enrique Crespo is licensed under a Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional License.

Organización del curso

Duración total de 30 horas. El curso se celebra del 5 al 16 de septiembre de 2016 de Lunes a Viernes en horario de 17.00 a 20.00. Se hará un descanso de 10 minutos aproximadamente a mitad de la sesión antes de empezar con la parte práctica.

Capítulos del curso:

  • Hardware Arduino
  • Software Arduino
  • Programación Arduino
  • Manejo Arduino
  • Comunicaciones IP Arduino
  • Proyectos Arduino

Detalle del temario: http://www.aprendiendoarduino.com/curso-arduino-2016-s-e/

Como Empezar con Arduino

Para empezar con Arduino debes preguntarte qué sabes de electrónica y qué sabes de programación. Si no sabes de electrónica, es difícil entender cómo funcionan los elementos con los que va a interactuar la placa Arduino y si no sabes de programación no va a ser posible traducir las órdenes que deseas hacer a la electrónica para que las ejecute Arduino.

Para empezar con Arduino hay que aprender electrónica y a programar y eso es lo que vamos a aprender en este curso entre otras cosas.

Artículos de como empezar con Arduino:

Aclaraciones sobre el curso

Arduino es una plataforma ampliamente usada por aficionados (makers) y para prototipado y puede verse como un “juguete”, pero en este curso vamos a aprender a programarlo y usarlo para implantarlo en cualquier aplicación que necesitemos tanto para un uso profesional como personal/aficionado. La principal ventaja de usar una plataforma de este tipo es el rápido despliegue de una nueva aplicación y la facilidad de programación.

Arduino se trata principalmente como una herramienta para prototipado y usada en el mundo del hobby, pero aquí vamos a ir más allá y lo trataremos como una herramienta profesional que puede abarcar multitud de sectores.

A lo largo del curso se van a ver muchos conceptos de diferentes tecnologías que a priori no tienen nada que ver entre ellos: electronica digital y analogica, electricidad, programación, microcontroladores, tratamiento de señales, bases de datos, protocolos de comunicación, arquitectura de procesadores, mecánica, motores, diseño de placas electrónicas etc…

En unos casos se profundizará más y en otros menos, pero sin ponerse demasiado académico, de hecho la filosofía con la que nació  arduino es facilitar las cosas, lo que ocurre es que cuando las necesidades crecen, la programación de un microcontrolador se hace más compleja y hay que profundizar en la teoría.

Hay conceptos muy importantes a aprender y avisaré de ello y luego otros conceptos que daré las nociones y las herramientas para que quien lo necesite amplíe su conocimiento.

Este curso es totalmente dinámico y cualquier inquietud o necesidad que se tenga de un aspecto en concreto de Arduino se puede incluir en el curso.

Existe mucha documentación sobre Arduino en Internet, pero eso es un problema y a veces está desordenado o es demasiado básico, así que una parte de mi trabajo es recopilar la información más interesante, ordenarla y estructurarla.

No se va a seguir el índice en el orden que está en la documentación, sino que se van a mezclar los capítulos para ser más pedagógico. Cada día del curso se publicará un post donde se va explicar que se va a ver y un enlace a la documentación de los capítulos. Se va mezclar la práctica con la teoría para que sea el curso ameno.

Presentaciones

Arduino tiene muchos ámbitos de aplicación, desde el sector agrícola, fabricación, eficiencia energética, robótica, monitorización, educación, etc… Para que entorno tienes pensado usar Arduino?

  • Como conoces Arduino?
  • Motivaciones para aprender a usar Arduino?
  • Qué sabes de electrónica?
  • Qué sabes de programación?
  • Algún proyecto o entorno de aplicación donde usar Arduino?

Contacto

Para cualquier consulta durante el curso y en cualquier otro momento mediante email: aprendiendoarduino@gmail.com

Twitter @jecrespo: https://twitter.com/jecrespom

Y más información sobre el curso y el autor: http://www.aprendiendoarduino.com/acerca-de/

aprendiendoarduino_logo

Cómo Empezar con Arduino

El compañero del fantástico blog http://rufianenlared.com/ me pidió que escribiera sobre “Cómo co** empezar con Arduino” para un post donde varios de los que nos dedicamos a divulgar ciencia y tecnología con Arduino diéramos nuestra opinión.

En mi experiencia como instructor en varios cursos presenciales de Arduino, talleres, consultas online y en charlas que he tenido con personas interesadas en el mundo Arduino, así como divulgador de tecnología con Arduino a través del curso online www.aprendiendoarduino.com, el tema de cómo empezar con Arduino me lo he planteado con frecuencia.

Aprender Arduino implica aprender muchas tecnologías dependiendo de hasta donde se quiera llegar, pero entre otras tecnologías podemos decir que Arduino comprende: electrónica digital y analógica, electricidad, programación, microcontroladores, tratamiento de señales, protocolos de comunicación, arquitectura de ordenadores, mecánica, motores, diseño de placas electrónicas, física, programación web, etc… Y Arduino nos permite que para empezar a trabajar con él no sea necesario tener todos esos conocimientos, sino que Arduino es el vehículo que nos va a servir para aprender todas esas tecnologías y ciencias de una forma práctica y aprendiendo mientras se hacen cosas “learning by doing”, pero no cabe duda que hay que tener una cierta base para poder empezar.

Arduino ha socializado la tecnología, supongamos que desde hace un tiempo tenemos una buena idea que no se puede llevar a cabo porque necesita un conocimiento de electrónica en mayor o menor medida, pero que actualmente no tenemos. Esa idea, habrá pasado de proyecto a obstáculo. Arduino va a ayudar a poder hacer el proyecto gracias a su facilidad de uso, la gran información disponible en Internet y los desarrollos para Arduino publicados como open source. Leyendo manuales y practicando con el material que ha proporcionado Arduino y la comunidad, comprobamos que en un intervalo de tiempo relativamente pequeño somos capaces de ponernos manos a la obra y atrevernos a ir escalando pequeños obstáculos y paredes hasta que encontremos nuestro límite o el del propio material.

Pero claro, si nos ponemos en la piel de alguien que quiere empezar con Arduino y la enorme cantidad de información que hay disponible en Internet, esta supone un obstáculo en sí mismo. Un buen sitio donde empezar es www.arduino.cc. Para mi es el mejor sitio por donde empezar, porque es donde yo empecé y con el tiempo me conozco casi todos los recovecos de la web que no son pocos. Sin embargo puede haber varios obstáculos, uno es que no está traducido al castellano y otro es que para alguien que empieza puede ser muy duro leer toda esa documentación y acabar perdiéndose entre los muchos enlaces que hay en la web y acabar desistiendo en su intento.

Por todo lo dicho hasta ahora y mi experiencia con alumnos, yo siempre empiezo por contar que es exactamente Arduino y desmontar todos los mitos e ideas inexactas sobre esta plataforma abierta de programación de un microcontrolador. Digamos que lo primero que debe conocer alguien que empieza con arduino es el “estado del arte” de Arduino o como diría wikipedia “el estado de esta temática actualmente y sus avances” y más aun cuando desde hace un año Arduino se ha dividido en dos y tenemos dos webs “oficiales” de Arduino www.arduino.cc y www.arduino.org que puede provocar más confusión entre los que quieren empezar. Pero tanto www.rufianenlared.com como yo mismo en http://www.aprendiendoarduino.com/2016/03/19/arduino-cc-y-arduino-org-los-dos-arduinos/ hemos puesto de nuestra parte para tratar de aclarar este punto en nuestros blogs.

Cuando trato de explicar qué es exactamente Arduino, algo en lo que pongo énfasis en mis oyentes y en mi web es que se den cuenta que no solo están aprendiendo a manejar una placa azul, sino que existen otras placas que no se llaman Arduino que también van a saber programar y que en general están aprendiendo a programar casi cualquier microcontrolador y que junto con los conocimiento sobre sensores, actuadores y comunicaciones que adquieren al usar Arduino, van a ser capaces de construir casi cualquier cosa.

Por lo tanto a la pregunta de cómo empezar a usar Arduino, la respuesta es que antes de ponerse a leer documentación a diestro y siniestro, hay que “saber exactamente qué es Arduino y donde se encuentra dentro de la tecnología que nos rodea” y si Arduino es la respuesta a su proyecto o a la razón por la que quiere aprender Arduino.

Como hay que predicar con el ejemplo, yo empiezo los cursos con estos temas:

Después de aclarar conceptos, la persona que está empezando con Arduino puede continuar con las tres partes en la que yo divido el estudio de Arduino: Hardware, Software y Comunidad Arduino. Por ejemplo, así es como yo divido el aprendizaje de Arduino para un curso de algo más de 30 horas: http://www.aprendiendoarduino.com/curso-arduino-2016/

Es muy común que gente con amplios conocimientos de electrónica quiera aprender Arduino y la programación les echa para atrás y al contrario, hay mucha gente del mundo del software que les echa para atrás la electrónica, electricidad, motores, etc… En ambos casos y con esos conocimientos previos será más fácil continuar con el aprendizaje de Arduino.

Arduino es una plataforma que se usa en el concepto de “learning by doing” o aprender practicando. Por ello, para aprender Arduino hay que practicar y experimentar, es algo que creo que es imprescindible cuando se empieza con Arduino.

Por último, algo que se debe tener en cuenta para quien quiere empezar con Arduino es que para aprender a programar Arduino, hay que leer mucho código. Al tratarse de una plataforma open source y disponer del código, tenemos muchos recursos para el aprendizaje. Además Arduino tiene una guía de estilo (https://www.arduino.cc/en/Reference/StyleGuide) que son unas pautas para escribir un código sencillo de leer, en detrimento de la eficiencia del código y una guía para escribir librerías (https://www.arduino.cc/en/Reference/APIStyleGuide) que hace que los principiantes puedan empezar con arduino fácilmente. Todo esto hace que la curva de aprendizaje de Arduino sea más corta que cualquier otra nueva tecnología, pero aún así es imprescindible: Aprender a Programar y Aprender Electrónica.

Si quieres aprender Arduino, también puedes empezar por mis cursos publicados en http://www.aprendiendoarduino.com/ o apuntarte a algunos de los cursos o talleres presenciales que imparto periódicamente y de los que te puedes enterar a través de mi twitter @jecrespom o en la lista de correo de #aprendiendoarduino http://list.aprendiendoarduino.com/mailman/listinfo/aprendiendoarduino.com.noticias

Y no olvidéis visitar y seguir el blog de http://rufianenlared.com/, de verdad es muy bueno.

Post de rufianenlared donde se publicó mi aportación: http://rufianenlared.com/como-empezar-arduino/

Proyecto – Envio Mensajes Arduino y Visualización en Tiempo Real

Enunciado

Crear un sistema para mandar mensajes en tiempo real a un servidor, podría simular un sistema de alertas de varios dispositivos remotos conectados a un servicio en la nube de visualización de alertas de dispositivos remotos.

Arduino solicita en el setup() 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…).

El servidor que recoge los mensajes está en www.aprendiendoarduino.com o el la IP de la Raspberry Pi instalada en el aula.

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

mensajes

NOTAS:

  • El código de la solución tiene 3 errores, encontrarlos y corregirlos
  • Arduino manda una petición GET a la ruta /servicios/grabaMensajes.php?nombre=pedro&mensaje=hola

Solución

Proyecto – Grabar datos de temperatura (Datalogger)

Enunciado

Hacer un datalogger de los datos de temperatura leídos por un Arduino y grabarlos en una Raspberry Pi que tenga un servidor LAMP instalado. Se grabarán en una tabla de una BBDD MySQL los datos de temperatura que mande Arduino cada 5 segundos. También se grabarán en un servidor público cada 30 segundos, en este caso en www.aprendiendoarduino.com.

Este ejercicio consiste en programar un Arduino que manda datos a un servidor mediante request GET HTTP. Los datos que mandará Arduino son la temperatura leída por el sensor de temperatura cada 5 segundos y el número de arduino con el formato: “arduino=5&temperatura=21.8”. Estos datos son recogidos por un script php (el que es llamado por el HTTP request de Arduino) que se encarga de grabarlos en la base de datos correspondiente.

Usamos Push: Arduino se comunica con el servidor para mandarle los datos http://www.tweaking4all.com/hardware/arduino/arduino-ethernet-data-push/

Información y referencias usadas

Para poder usar una Raspberry Pi en este ejercicio, necesitamos instalar un servidor LAMP, tutoriales de como hacerlo:

También podemos instalar Postfix en Raspberry Pi como servidor SMTP para mandar correos desde nuestro Arduino al ocurrir un evento como por ejemplo superar un umbral de temperatura:

NOTAS:

  • En el ejemplo se usa una IP fija, pero se usará IPs dinámicas asignadas por DHCP.
  • La MAC de cada Arduino debe ser diferente, usaremos la MAC “0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xYY”, donde YY es el número del kit de Arduino
  • En la llama a grabar datos en la línea “/grabaDatos.php?arduino=YY&temperatura=” donde YY es en número de kit de Arduino.
  • Poner la IP correcta de la Raspberry Pi

Código para DHCP:

#include <SPI.h>

#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xYY };

EthernetClient client;

void setup() {

 // start the serial library:

 Serial.begin(9600);

 // start the Ethernet connection:

 if (Ethernet.begin(mac) == 0) {

   Serial.println(“Failed to configure Ethernet using DHCP”);

   // no point in carrying on, so do nothing forevermore:

   for(;;)

     ;

 }

 // print your local IP address:

 Serial.println(Ethernet.localIP());

}

Github: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Otros/DHCP_Arduino

Esquema de Conexión

Solución

BBDD pública: https://qvm602.aprendiendoarduino.com/

Gráficas: http://www.aprendiendoarduino.com/servicios/graficas.htm

Proyecto – Arranque y Parada Motor DC

Enunciado

Mover un motor DC de 9V usando un integrado L293D (Quadruple Half-H driver). Para controlar la velocidad del motor se usará un potenciómetro conectado al pin A0. Además se usarán dos botones, uno conectado al pin digital 4 para controlar el sentido de giro del motor y otro conectado al pin digital 5 que controlará el encendido y apagado del motor. Con cada pulsación encendemos y apagamos el motor o usamos una dirección de giro u otra con el otro botón.

Sobre este montaje, añadir una rampa de arranque y otra de parada cuando se detecte el encendido y apagado. También añadir una rampa de parada y arranque cuando se detecte un cambio de sentido. Añadir un botón de parada de emergencia, que al pulsarlo, se pare el motor inmediatamente.

Información o referencias usadas

Ejemplo básico: http://diymakers.es/control-velocidad-y-sentido-de-motor-dc/

Esquema de conexión

Diagrama de flujo

Solución

https://github.com/jecrespo/Aprendiendo-Arduino-Proyectos/tree/master/Proyecto_02-Motor_DC_Controlado

Proyecto – Estación meteorológica

Enunciado

Estación meteorológica con una sonda de temperatura y pantalla LCD. Hacer que actualice continuamente la temperatura y la muestre por pantalla. Poner un botón que al pulsarlo la primera vez muestre por pantalla la máxima temperatura leída, al volver a pulsarlo muestre la temperatura mínima leída y al volver a pulsarlo muestre la temperatura actual. Para resetear los valores máximo y mínimo, pulsar durante 5 segundos el botón y muestre por pantalla “valores reseteados”.

Versión mejorada: Con el shield de ethernet conectarse a internet y mediante la API de http://openweathermap.org/ y obtener los datos de humedad y presion y mostrarlos por pantalla. Actualizar estos datos cada hora. También se pueden obtener los datos de la API de AEMET.

Información o referencias usadas

Esquema de conexión

Diagrama de flujo

Solución

Proyectos final de curso

Como final de curso, se propone realizar varios proyectos individualmente o en grupo.

Estación meteorológica

Hacer una estación meteorológica con una sonda de temperatura y la pantalla LCD. Hacer que lea continuamente la temperatura y la muestre por pantalla. Poner un botón que al pulsarlo la primera vez muestre por pantalla la máxima temperatura leída, al volver a pulsarlo muestre la temperatura mínima leída y al volver a pulsarlo muestre la temperatura actual. Para resetear los valores máximo y mínimo, pulsar durante 5 segundos el botón y muestre por pantalla “valores reseteados”.

Avanzado: Con el shield de ethernet conectarse a internet y mediante la API de http://openweathermap.org/ y obtener los datos de humedad y presion y mostrarlos por pantalla. Actualizar estos datos cada hora. También se pueden obtener los datos de la API de AEMET.

Información adicional:

Arranque y parada controlada de motor DC

Mover un motor DC de 9V usando un integrado L293D (Quadruple Half-H driver). Para controlar la velocidad del motor se usará un potenciómetro conectado al pin A0. Además se usarán dos botones, uno conectado al pin digital 4 para controlar el sentido de giro del motor y otro conectado al pin digital 5 que controlará el encendido y apagado del motor. Con cada pulsación encendemos y apagamos el motor o usamos una dirección de giro u otra con el otro botón.

Sobre este montaje, añadir una rampa de arranque y otra de parada cuando se detecte el encendido y apagado. También añadir una rampa de parada y arranque cuando se detecte un cambio de sentido. Añadir un botón de parada de emergencia, que al pulsarlo, se pare el motor inmediatamente.

Información adicional: https://github.com/jecrespo/Aprendiendo-Arduino/blob/master/Ejercicio21-MotorDC_2/Ejercicio21-MotorDC_2.ino

Grabar datos de temperatura en una Base de Datos (datalogger)

Datalogger de los datos de temperatura leídos por Arduino y enviados a una base de datos instalada en una Raspberry Pi. Se usará una RPi que tenga un servidor LAMP instalado y grabar en una tabla de una BBDD MySQL los datos de temperatura que mande Arduino cada 20 segundos.

Este ejercicio consiste en mandar datos a un servidor mediante requests POST HTTP con Arduino. Los datos que mandará Arduino son la temperatura leída por el sensor de temperatura cada 20 segundos y el post mandará el número de arduino y la temperatura: “id=5&temperatura=21.8”. Estos datos son recogidos por un script php (el que es llamado por el HTTP request de Arduino) que se encarga de grabarlos en la base de datos correspondiente.

Dos estrategias para guardar datos de Arduino en un servidor, pull y push:

Pull: Una aplicación en un ordenador o servidor pregunta a Arduino por los datos

Push: Arduino se comunica con el servidor para mandarle los datos

Posteriormente esos datos se podrán analizar, representar gráficamente o mostrar en una web de forma dinámica. Todos los Arduinos grabarán datos en la misma tabla y al mandar las temperaturas identificarán que arduino es, para luego poder diferenciar las temperaturas de cada uno de ellos.

Información adicional:

Para poder usar una Raspberry Pi en este ejercicio, necesitamos instalar un servidor LAMP, tutoriales de como hacerlo:

También podemos instalar Postfix en Raspberry Pi como servidor SMTP para mandar correos desde nuestro Arduino al ocurrir un evento como por ejemplo superar un umbral de temperatura:

Otras opciones:

Al igual que grabamos estos datos en una Raspberry Pi, podría hacerse en un servidor público que tengamos en un hosting compartido.

También podemos usar servicios en la nube como https://plot.ly/ que ya dispone de una API REST https://plot.ly/rest/ y una librería para Arduino https://github.com/plotly/arduino-api  

Mandar mensajes desde Arduino y visualizarlos en tiempo real

Crear un sistema para mandar mensajes en tiempo real a un servidor, podría simular un sistema de alertas de varios dispositivos remotos conectados a un servicio en la nube de visualización de alertas de dispositivos remotos.

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

El servidor que recoge los mensajes está en www.aprendiendoarduino.com o el la IP de la Raspberry Pi instalada en el aula.

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

mensajes

Más proyectos

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