Archivo de la categoría: Proyecto

Proyecto Final Programacion

Sobre el entorno de trabajo de https://aprendiendoarduino.wordpress.com/2017/07/02/montaje-practicas/, montar paso a paso el siguiente proyecto:

  1. Hacer un data logger del LDR y de la sonda de temperatura y mandar a http://www.aprendiendoarduino.com/servicios/datos/index.html. Mandar los datos  cada 5 segundos mediante la librería timer: https://github.com/JChristensen/Timer (DataLogger.ino)
  2. Mostrar la gráfica del LDR en http://www.aprendiendoarduino.com/servicios/datos/graficas.html. Mandar los datos  cada 5 segundos. (DataLogger.ino)
  3. Al pulsar el botón B mandar un mensaje a http://www.aprendiendoarduino.com/servicios/mensajes/index.html. Usar la librería DetectaFlanco. (Pulsar_Botones.ino)
  4. Al pulsar el botón A mandar un SMS en http://www.aprendiendoarduino.com/servicios/SMS/index.html. Usar la librería DetectaFlanco. (Pulsar_Botones.ino)
  5. Poner un web server donde se pueda encender remotamente un led y mover el servo con un botón en la web. (Web_Server.ino)
  6. Mover con el potenciómetro de un kit el servo de otro kit
  7. Hacer un web server donde configure la IP a manejar remotamente y configurar el arduino para manejar el que le pasas por IP
  8. Hacer una web embebida donde poder testear todo el kit.
  9. Unir todo

Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Programacion_Arduino/tree/master/Ejercicio19-Proyecto_Final

Proyecto – Sistema de Alarma

Enunciado

Sistema de alarma basado en Arduino. Con dos sensores uno de movimiento y otro de luz se detecta la alarma. Después de detectar alarma, se entra en un estado de pre-alarma que si no se introduce la clave correcta en 10 segundos, paso a un estado de alarma.

Para entrar en estado de alarma hay dos condiciones:

  • Detectar un movimiento (activar el sensor tilt)
  • Detectar más de 5 segundos una iluminación superior a 900.

Para salir del estado de pre-alarma se debe introducir la clave correcta por teclado en los 10 segundos siguientes a la detección de alarma.

Para salir del estado de alarma no debe haber ninguna de las dos condiciones de alarma y se debe pulsar el botón.

En estado normal led apagado y zumbador apagado.

En estado de pre-alarma el led parpadea cada segundo y se oye un pitido cada segundo.

En estado alarma el led está en encendido y se oye un pitido continuo. Además se manda un SMS al número de teléfono configurado.

Información Adicional

El valor de resistencia eléctrica de un LDR es bajo cuando hay luz incidiendo en él (puede descender hasta 50 ohms) y muy alto cuando está a oscuras (varios megaohmios).

El LDR actúa como una resistencia variable. Para conocer la cantidad de luz que el sensor capta en cierto ambiente, necesitamos medir la tensión de salida del mismo. Para ello utilizaremos un divisor de tensión, colocando el punto de lectura para Vout entre ambas resistencias. De esta forma:

Dónde Vout es el voltaje leído por el PIN analógico del Arduino y será convertido a un valor digital, Vin es el voltaje de entrada (5v), R2 será el valor de la resistencia fija colocada (10k ohm generalmente) y R1 es el valor resistivo del sensor LDR. A medida que el valor del sensor LDR varía, obtendremos una fracción mayor o menor del voltaje de entrada Vin.

NOTA: ajustar el valor del umbral para que detecte la alarma según iluminación recinto

Esquema de Conexión

Diagrama de Estados

Diagrama de Flujo

Solución

En el código hay que configurar los parámetros:

  • Últimas cifras de la MAC
  • Umbral_LDR en función de la iluminación donde nos encontremos
  • Teléfono al que manda las alertas por SMS
  • PIN de acceso a la API

Los mensaje enviados a la API pueden verse en http://www.aprendiendoarduino.com/servicios/SMS/index.html

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

Proyectos Sencillos con Arduino

Hagamos unos proyectos sencillos con Arduino usando sensores, actuadores y comunicaciones.

Menú interactivo con Arduino

Con todo lo visto  anteriormente de comunicación serie, 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.

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio46-Estructuras_de_Control

Mover un Servo

Controlar la posición de un servo con un potenciómetro.

Tutorial: http://arduino.cc/en/Tutorial/Knob

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio55-Servo/Knob

Mover un Servo con un Acelerómetro

Una IMU (Inertial Measurement Unit) es un dispositivo capaz de medir la fuerza (aceleración) y la velocidad. Generalmente consta de un Acelerómetro y un Giroscopio. Por lo tanto una IMU no mide ángulos, por lo menos no directamente, requiere algunos cálculos.

Un dispositivo I2C muy interesante es el MPU-6050 que nos sirve para probar e introducirnos en el mundo de los giroscopios y acelerómetros.

Para esta práctica vamos a utilizar una Breakout board bastante típica llamada GY-521, que incluye la IMU MPU-6050 y un regulador de tensión, con lo que podemos alimentar a tanto 3.3V como a 5V.

El siguiente diagrama muestra la orientación de los ejes de sensibilidad y la polaridad de rotación.

El acelerómetro mide la aceleración. La aceleración puede expresarse en 3 ejes: X, Y y Z, las tres dimensiones del espacio. Por ejemplo, si mueves la IMU hacia arriba, el eje Z marcará un cierto valor. Si es hacia delante, marcará el eje X, etc. La gravedad de la Tierra tiene una aceleración de aprox. 9.8 m/s², perpendicular al suelo como es lógico. Así pues, la IMU también detecta la aceleración de la gravedad terrestre. Gracias a la gravedad terrestre se pueden usar las lecturas del acelerómetro para saber cuál es el ángulo de inclinación respecto al eje X o eje Y.

Supongamos que la IMU esté perfectamente alineada con el suelo. Entonces, como puedes ver en la imagen, el eje Z marcará 9.8, y los otros dos ejes marcarán 0. Ahora supongamos que giramos la IMU 90 grados. Ahora es el eje X el que está perpendicular al suelo, por lo tanto marcará la aceleración de la gravedad.

Si sabemos que la gravedad es 9.8 m/s², y sabemos qué medida dan los tres ejes del acelerómetro, por trigonometría es posible calcular el ángulo de inclinación de la IMU. Una buena fórmula para calcular el ángulo es:

Dado que el ángulo se calcula a partir de la gravedad, no es posible calcular el ángulo Z (giro sobre si mismo) con esta fórmula ni con ninguna otra. Para hacerlo se necesita otro componente: el magnetómetro, que es un tipo de brújula digital. El MPU-6050 no lleva, y por tanto nunca podrá calcular con precisión el ángulo Z. Sin embargo, para la gran mayoría de aplicaciones sólo se necesitan los ejes X e Y.

Esquema de conexión IMU:

Esquema conexión servo:

Mover el servo en función del ángulo en el eje x obtenido de la IMU.

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio66-Servo_IMU/IMU_1servo

Hacer el mismo ejemplo pero con un sistema de dos grados de libertad con dos servos y moviéndose en función de los grados obtenidos del IMU en los ejes x e y.

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio66-Servo_IMU/IMU_2servos

Proyectos con Piezas Impresas 3D

Ahora disponemos de las herramientas para hacer un proyecto completo, imprimiendo las piezas en 3D, montando un arduino y los sensores y actuadores en las piezas.

Robot impreso en 3D: http://otto.strikingly.com/

Tutoriales de construcción:

Código: https://github.com/OttoDIY

Brazo robot para montar con unos servos y tornillos:

Más proyectos impresos 3D con Arduino:

Proyectos con Arduino

¿Qué puedo hacer con Arduino? La respuesta es que puedes hacer/construir casi de todo. Arduino es una plataforma para programar un microcontrolador y por lo tanto puede hacer todo lo que puede hacer una MCU, todo depende de nuestra imaginación.

Un arduino es un sistema autónomo programado que realiza una o varias tareas específicas. Un arduino puede hacer las tareas de un autómata e intercambiar datos con un SCADA  (Supervisión,Control y Adquisición de Datos).

Proyectos sorprendentes con Arduino:

¿En qué entornos se puede usar Arduino? La respuesta es en muchos y cada vez en más entornos encuentran de gran utilidad Arduino.

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…

Educación: 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.

DIY: 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á.

Herramienta de prototipado: Podemos usar Arduino como una herramienta de prototipado, para hacer un despliegue rápido de una idea o medir de una manera objetiva resultados.

Actualizar sistemas Antiguos: Con Arduino también podemos hacer “smart” las cosas, es decir, que se conecten a internet. Podemos actualizar un sistema antiguo a nuevas tecnologías.

Por ejemplo: https://www.autodeskresearch.com/publications/retrofab, después de escanear en 3D un elemento, se puede crear un modelo impreso en 3D y hacer sugerencias de rediseño creando una carcasa que ajuste al elemento original y que tenga una sere de actuadores, motores, leds, etc… que conectados a Arduino nos actualicen un elemento antiguo. Como por ejemplo controlar con el móvil una vieja tostadora o interconectar el despertador con la luz de la habitación.

Robótica: Es otros de los entornos donde Arduino es muy usado, http://www.dx.com/p/arduino-compatible-bluetooth-controlled-robot-car-kits-146418#.Vvlc3uKLTcs

Productos comerciales: 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:

Arte: Un ejemplo de uso de Arduino en el mundo del arte se pudo ver en el museo Wurth en el mes de febrero de 2016 en la exposición light kinetics. 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, giroscopio 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.

Aplicaciones médicas Arduino: https://www.cooking-hacks.com/ehealth-sensors-complete-kit-biometric-medical-arduino-raspberry-pi/

Juguetes: https://www.bq.com/es/zowi

Haz tu propio juguete: http://www.instructables.com/id/Otto-Build-You-Own-Robot-in-Two-Hours/

Arduino en la Industria

Arduino cada vez se está implantando más y más en la industria y no solo como una herramienta de prototipado, sino que los sistemas de control (autómatas) se están abriendo cada vez más.

Prototipo de zapatillas John Luck con Arduino:

HW Usado:

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