Archivo de la etiqueta: Proyectos

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

Anuncios

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

ejercicio21_bb

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/

Entornos de Aplicación Arduino

Arduino se ha popularizado por el creciente movimiento del DIY (https://es.wikipedia.org/wiki/H%C3%A1galo_usted_mismo, https://en.wikipedia.org/wiki/Do_it_yourself), como un elemento barato para hacer pequeños proyectos de “bricolaje”, pero arduino va más allá.

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

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

Robótica

Robótica es otros de los entornos donde Arduino es muy usado, incluso ya hay un arduino robot: http://arduino.cc/en/Main/Robot o kits de robótica:

Productos comerciales

También existen muchos productos y proyectos basados en Arduino, lo que nos da una idea de la amplitud de los entornos donde podemos usar arduino. En las web de crowdfunding podemos encontrar muchos productos basados en Arduino:

El programa Arduino at heart tiene productos comerciales con el sello Arduino: https://www.arduino.cc/en/ArduinoAtHeart/Products

Arte

Un ejemplo de uso de Arduino en el mundo del arte se pudo ver en el museo wurth (http://www.museowurth.es/) en el mes de febrero de 2016 en la exposición light kinetics: http://www.museowurth.es/light_kinetics.html.

Este video es una muestra del montaje: https://vimeo.com/149774067, vemos que para las obras de arte usa un arduino mega http://www.arduino.cc/en/Main/ArduinoBoardMega2560 y un sensor de 9 grados de libertad con acelerometro, gisroscopio y magnetometro https://www.sparkfun.com/products/10724 que manda os datos a un ordenador y este mediante software controla los módulos DMX para encender las luces.

IoT

Una de las principales aplicaciones de Arduino está en el Internet de las cosas (IoT) o Internet de todo o dispositivos conectados o M2M. Internet de las cosas (IoT, por su siglas en inglés) es un concepto que se refiere a la interconexión digital de objetos cotidianos con Internet.

Otro aspecto que está muy de moda en este momento es el IoT en la industria, que también se le denomina “Industria Conectada” o Industria 4.0.

Arduino IoT: https://create.arduino.cc/iot/

Placa Arduino especialmente diseñado para el IoT: https://www.arduino.cc/en/Main/ArduinoMKR1000

Nota de prensa de Atmel:

The Internet of Things (IoT) will create a market worth $1.9 trillion by 2020, according to Gartner.

Atmel provides all the key building blocks for IoT applications—from embedded processing and connectivity to sensors, security, and software. These include: Atmel® AVR® and ARM®-based microcontrollers (MCUs), CryptoAuthentication™ devices, A complete sensing platform, Standards-based wireless technologies, including wireless modules and System on a Chip (SoC) devices.”

Impresoras 3D

Otros productos por los que conocemos Arduino son las impresoras 3D y los drones. El código o sketch que funcionan dentro de un Arduino usado en un drone o en una impresora 3D están disponibles y podemos modificarlos. En este curso no vamos a aprender a montar un drone una impresora 3D, pero entenderemos que hace el Arduino usado en estos dispositivos y cómo usa los periféricos usados (motores, display, botones, etc…).

Este enlace explica los materiales necesarios para montar una impresora 3D con Arduino y algunos conceptos relacionados: http://saber.patagoniatecnology.com/kit-electronica-impresora-3d-arduino-argentina-ptec/

Firmware para impresoras 3D del proyecto reprap:

Interesante tutorial paso a paso para montar una impresora 3D: https://www.cooking-hacks.com/documentation/tutorials/3d-printer-step-by-step-tutorial-guide-prusa-it3 que usa el firmware Marlin.

Drones

Firmware usado con Drones con MCUs iguales a las de Arduino:

Rover con Arduino:

Arduino como elemento de prototipado en la industria

Ejemplo de las zapatillas John Luck:

El arduino que va montado y se ve en la foto, que vale 9.95$: https://www.sparkfun.com/products/11113

El modulo bluetooth, que vale 34.95$: https://www.sparkfun.com/products/12580

El sensor: https://www.sparkfun.com/products/10293, que vale 1.5$, posiblemente no sea este puesto que sería necesario un sensor con mucha más sensibilidad.

El resto  de elementos posiblemente sean para adaptar la señal del sensor piezo eléctrico y cargador de batería.

Conclusiones

Como puede verse el ámbito de aplicación de Arduino es enorme, pero no es siempre la mejor solución para todo, en algunos casos podemos usar otras soluciones o estar matando moscas a cañonazos.

¿En qué ámbito tiene sentido usar un Arduino y en cuáles no?. Por ejemplo, supongamos que nos piden hacer un sistema de temporización de iluminación, para iluminar ciertas habitaciones o zonas de forma alterna. Para ello habrá que manipular el cuadro eléctrico para poner unos interruptores en los circuitos de iluminación. En este caso sería mejor poner relés temporizadores y hacer la configuracion de ellos.

Ahora bien, si lo que queremos es que podamos cambiar esa temporización remotamente desde cualquier parte del mundo sin tener que ir al cuadro o apagar y encender las luces manualmente desde una web, entonces la solución puede ser un arduino más unos relés y unos drivers de relés para poder manejarlo desde el Arduino.

 

¿Que aplicación profesional o personal piensas que podrías usar Arduino?

Ejemplo: Obtener datos de mi coche a través del conector ODB:

Ejemplo: Hacer un coche RC https://www.youtube.com/watch?v=ejZg2qm53Qc