Archivo de la etiqueta: Proyectos

Planificación y Diseño de Proyectos con Arduino

Cuando nos planteamos un nuevo proyecto con Arduino, es aconsejable seguir una serie de pasos para conseguir el éxito. Además de los pasos que habría que seguir en cualquier proyecto, es muy importante hacer una buena planificación antes de empezar a comprar los elementos y ponernos a programar.

  • Analizar los requisitos de nuestro proyecto, obtenido el número de de entradas y salidas digitales y analógicas que vamos a necesitar, los tipos de comunicación que vamos a utilizar y los shields que vamos a usar. Con todo ello debemos elegir la placa más adecuada para nuestro proyecto.
  • Hacer la elección de los sensores, actuadores, periféricos. Para ello debemos buscar qué dispositivos se adaptan a nuestras necesidades y posteriormente asegurarse para cada dispositivo como va a interactuar con Arduino y si vamos a necesitar drivers para los actuadores/periféricos. Comprobaremos que las librerías que acompañan a cada dispositivo tiene las funcionalidades que hay en los requisitos del proyecto.
  • En la parte de hardware es importante hacer el esquema eléctrico y obtener las partes o piezas que vamos a usar, para ello nos podemos ayudar de fritzing como hemos visto anteriormente.
  • El siguiente paso es planificar la programación, buscar las librerías que vamos a necesitar y asegurarse de tener todas la librerías importadas y en el caso que trabajemos varias personas en proyecto, que usemos todos las mismas librerías con las mismas versiones.
  • Realizar el diagrama de flujo en la fase de diseño para mejorar el software y asegurarse de programar todas las opciones.

Ejemplo de Planificación

Imaginemos que el departamento de Prevención que nos han pedido hacer un proyecto de un medidor de confort para oficinas. Habrá que medir temperatura, humedad, calidad del aire en 2 ubicaciones concretas, además se instalará una bombilla de alarma que se encenderá cuando se sobrepasen algunos de los parámetros de confort y un botón para resetear esa alarma. Por último mandará un correo electrónico diario a los responsables del departamento con los valores medios medidos.

Práctica: Hacer el análisis de este proyecto.

Elementos necesarios:

Ejemplos de Proyectos con Arduino

Propuestas de Proyectos Sencillos con Arduino

Algunas propuestas de proyectos para inspirar o desarrollar.

Taller de proyectos: 

Estación Meteorologica: https://aprendiendoarduino.wordpress.com/2016/07/06/proyecto-estacion-meteorologica/ 

Control Motor DC: https://aprendiendoarduino.wordpress.com/2016/07/06/proyecto-arranque-y-parada-motor-dc/

Proyecto Alarma Casera: https://aprendiendoarduino.wordpress.com/2017/06/29/proyecto-sistema-de-alarma/

Pantalla con botones y/o potenciómetro con un menú que realice operaciones, p.e. encender leds o mover un servo. 

Cronómetro que cuente vueltas y las muestre en una pantalla. Opcionalmente mandar los datos a un servidor. Las vueltas se pueden contar con un sensor, p.e. cronómetro para scalextric. Base del proyecto: https://tronixstuff.com/2011/06/22/tutorial-arduino-timing-methods-with-millis/

Mensajes entre placas wifi que se comuniquen entre ellas. Base del proyecto https://github.com/jecrespo/ESP-Wireless-Control

Pan & Tilt: Control de dos servos para un sistema de dos grados de libertad. Hacer con un joystick o con un acelerómetro. Base del proyecto: http://nevit.blogspot.com/2014/07/arduino-mpu-6050-pitch-roll-with-2.html y código https://github.com/jecrespo/Aprendiendo-Arduino/blob/master/Ejercicio66-Servo_IMU/IMU_2servos/IMU_2servos.ino

Inclinómetro o nivel usando leds y sonido. Base del proyecto https://aprendiendoarduino.wordpress.com/2018/04/15/uso-de-motores-con-arduino-2/

Juegos:

Mis Proyectos

Arduino Conference clock: https://github.com/jecrespo/conference_clock

Arduino MiniSumo Robot: https://aprendiendoarduino.wordpress.com/2019/05/06/construccion-y-programacion-de-robot-minisumo/

Proyectos Avanzados con Arduino

AR Sandbox: https://www.youtube.com/watch?v=kFJjUSM8tuE

Control remoto rover: https://www.youtube.com/watch?v=Ip-dunPC6Pw

Control fuegos artificiales: https://www.instructables.com/id/Firework-Control-Module/

Data Center Monitoring: https://www.instructables.com/id/Data-Center-Monitoring-by-IOT-ESP32/ 

Lora Weather Station: https://diyodemag.com/projects/lora_weather_station

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

Lista de Materiales

AmountPart TypeProperties
1Arduino Uno (Rev3)Tipo Arduino UNO (Rev3)
1Piezo Speaker
1Membrane Matrix Keypad
1Red (633nm) LEDColor Red (633nm); leg yes; paquete 5 mm [THT]
110kΩ Resistortolerancia ±5%; bands 4; paquete THT; Resistencia 10kΩ; espacio entre pines 400 mil
1Photocell (LDR)resistance@ luminance 16 kOhms@ 10 lux; resistance@ dark 300 kOhms@ 10 seconds; paquete THT
1220Ω Resistortolerancia ±5%; bands 4; paquete THT; Resistencia 220Ω; espacio entre pines 400 mil
1Tilt Switchtilt mechanism Mechanical Ball; paquete THT
1SWITCH-MOMENTARY-2paquete tactile_switch_tall

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: