Publicado por

Proyecto de Interacción Tangible (desarrollo) CERRADURA MULTIPROPÓSITO

Proyecto de Interacción Tangible (desarrollo) CERRADURA MULTIPROPÓSITO
Publicado por

Proyecto de Interacción Tangible (desarrollo) CERRADURA MULTIPROPÓSITO

PROTOTIPADO Definición Para el diseño del prototipo he adaptado una antigua caja de diskettes de 3.5”, dentro de la cual he instalado…
PROTOTIPADO Definición Para el diseño del prototipo he adaptado una antigua caja de diskettes de 3.5”, dentro de la…

PROTOTIPADO

Definición

Para el diseño del prototipo he adaptado una antigua caja de diskettes de 3.5”, dentro de la cual he instalado el Arduino y una placa de prototipado a la que he conectado el piezoeléctrico y un led RGB, que me servirá como indicador del modo de operación. Un sensor capacitivo realizará la función de botón de selección/activación según el modo elegido.

En el exterior he instalado otra placa de prototipado en la que he situado cuatro bombillas led de colores que se encienden al pulsar el botón correspondiente, cada uno de las cuales emite además un sonido característico a través del piezo instalado en el interior. Un display puede servir como menú de visualización de los ajustes y/o configuración.

En la placa de prototipado exterior he instalado una placa ESP32-WROOM-32D con WiFi / Bluetooth para una posible interacción remota. En esta placa está programada la interacción del display y del sensor de proximidad HC-SR04, y está conectada mediante dos pines con el Arduino para indicar a éste el modo de operación y la posible orden de apertura de la caja.

Además del sensor capacitivo conectado al Arduino, he instalado una llave metálica conectada a un pin TOUCH de la placa ESP32, de manera que al tocar la llave también sirve como botón de acción.

Mediante un potenciómetro se selecciona el modo de operación, girando ángulos de 45º para cada selección. En el display se indica el modo activo, que se transmite al Arduino para unificar las interacciones. A continuación, haré una breve explicación del funcionamiento de cada modo:

  • Mode 0: Modo Sonido ON / OFF

Con el modo seleccionado, al tocar la llave metálica conectada al pin TOUCH se activa / desactiva el sonido para todos los modos del prototipo.

  • Mode 1: Modo apertura libre (botón)

Tocando el pin TOUCH se abre o se cierra la cerradura.

  • Mode 2: Modo sensor de Proximidad

Cuando el sensor detecta a la persona más cerca de 20cm, da la orden de apertura de la cerradura. Cuando se aleja a más de 40cm, espera 5 segundos para dar la orden de cierre y la luz amarilla parpadea poco antes de cerrarse.

  • Mode 3: Modo Juego (SIMON-OPEN)

El juego consiste en reproducir los sonidos/luces aleatorias que produce el Arduino en ese mismo orden, de manera que cuando se logra reproducir la melodía correcta (de 6 tonos en este caso, por hacerlo fácil), la cerradura abre. Tocando el sensor capacitivo se repite la secuencia actual recién generada. Si la caja está desbloqueada, el sensor cierra la cerradura.

  • Mode 4: REMOTE WiFi LOCKER

En este modo se inicia un Servidor Web en el puerto 80 al que nos conectamos a través de la placa ESP32 mediante la red Wifi local, desde cualquier navegador. La página web creada para interactuar con el prototipo tan solo consta de 3 botones: Abrir, Cerrar y Salir.

  • Mode 5: MULTIPURPOSE LOCKER by Vinz

Este modo lo he dejado en blanco, para poder utilizarlo bajo demanda, en función de las necesidades particulares. Aquí se podría instalar cualquiera de las ideas planteadas en el brainstorming de la PEC03, como una cámara de video, lector de huellas, de tarjetas, detector de caras, o el motor de apertura automática.

Mapa conceptual

Enlace al video explicativo de la propuesta

En el siguiente enlace de YouTube está disponible el video con una pequeña explicación de la propuesta planteada y el funcionamiento del prototipo:

PROTOTIPO

Para poder visualizar una parte básica del funcionamiento, he añadido un potenciómetro al prototipo realizado en la PEC anterior, cuya entrada analógica decidirá el modo de operación. He dejado en la parte exterior solo las entradas sobre las que actúa el usuario y he mejorado el funcionamiento operativo del juego que abre la cerradura.

En el prototipo de la versión final, he conectado el potenciómetro a la nueva placa ESP32. Para lograr la interacción entre esta placa y la Arduino Uno utilizo el pin 25 para enviar los datos analógicos del potenciómetro al pin analógico A1 del Arduino, de manera que tengo el mismo modo de operación en ambas placas. Las órdenes de apertura de la cerradura las envío como una señal HIGH / LOW desde el pin 2 del ESP32 al A2 del Arduino.

He conectado también al ESP32 el sensor de proximidad HC-SR04 y la pantalla display 16×2.

Las funciones del servo para apertura de la puerta y el modo juego siguen implementados íntegramente en la placa Arduino Uno.

Los componentes utilizados son los siguientes:

1x Arduino UNO
1x ESP32-WROOM-32D DevKitC V4
1x Piezoeléctrico
7x Resistencias 220 Ohms
2x Resistencias 470 Ohms
2x Resistencias 10 kOhms
1x Resistencia 1 kOhms
1x Resistencia 4,7 kOhms
4x Pulsadores
4x LED de color verde, amarillo, rojo y azul
1x LED RGB (por simplificar, finalmente dejé puesto un LED azul)
2x Potenciómetros
1x Condensador de 0.1nF
1x Servomotor
1x Sensor de proximidad HC-SR04
1x Display Liquid Crystal 16×2

Esquema y conexiones

Arduino Uno

He utilizado el pin analógico A0 del Arduino para recibir la tensión que llega de los pulsadores, que será diferente según se haya pulsado uno u otro botón debido al montaje en escalera de resistencias.

Los pines 2, 3, 4 y 5 los utilizo como salida digital para encender los LED, y el 7 servirá para enviar los datos al piezo.

El pin 6 lo utilizo en modo PWM para modificar el ángulo del brazo del servo.

Los pines 12 y 13 los utilizo para activar el sensor capacitivo.

ESP32-WROOM-32D

El potenciómetro de selección del modo de operación está conectado al pin 13 del ESP32.

El sensor de proximidad HC-SR04 está conectado a los pines 32 y 35 para el trigger y el echo, respectivamente.

Los pines de salida al display son el 21, 19, 18, 5, 17 y 16 para las conexiones rs, enable, d4, d5, d6 y d7, respectivamente.

Además, utilizo el pin TOUCH 4 para utilizarlo como botón interacción en la placa ESP32.

 

Éste es el esquema del conexionado, implementado utilizando Fritzing:

BIBLIOGRAFÍA y ENLACES

MADUELL, Eloi y VILANOVA, Santiago. Interacción tangible. Barcelona: FUOC, 2022 (PID_00287694)
Disponible en línea: https://materials.campus.uoc.edu/daisy/Materials/PID_00287694/html5/PID_00287694.html

VILANOVA, Santiago. Teclados. Barcelona: FUOC, 2022 (PID_00287691)
Disponible en línea: https://materials.campus.uoc.edu/daisy/Materials/PID_00287691/html5/PID_00287691.html

VILANOVA, Santiago. Dispositivos apuntadores. Barcelona: FUOC, 2022 (PID_00287688)
Disponible en línea: https://materials.campus.uoc.edu/daisy/Materials/PID_00287688/html5/PID_00287688.html

VILANOVA, Santiago. Análisis de Audio. Barcelona: FUOC, 2022 (PID_00287692)
Disponible en línea: https://materials.campus.uoc.edu/daisy/Materials/PID_00287692/html5/PID_00287692.html

MOR, Enric. Design Toolkit [en línea]. Barcelona: UOC. [consulta: 20 de abril de 2023]. Disponible en: http://design-toolkit.recursos.uoc.edu/es/

VILANOVA, Santiago. Dispositivos electrónicos. Barcelona: FUOC, 2022 (PID_00287689)
Disponible en línea: https://materials.campus.uoc.edu/daisy/Materials/PID_00287689/html5/PID_00287689.html

MADUELL, Eloi. Visión artificial. Barcelona: FUOC, 2022 (PID_00287695)
Disponible en línea: https://materials.campus.uoc.edu/daisy/Materials/PID_00287695/html5/PID_00287695.html

INTERACTION DESIGN FOUNDATION (2023). Literatura de código abierto y acceso abierto [en línea][consulta: 16 de abril de 2023]. Disponible en: https://www.interaction-design.org/literature

VILANOVA, Santiago. Comunicación y tratamiento de datos. Barcelona: FUOC, 2022 (PID_00287690)
Disponible en línea: https://materials.campus.uoc.edu/daisy/Materials/PID_00287690/html5/PID_00287690.html

 

ARDUINO. 01 Starter Kit: Your First Circuit. YouTube [consulta: 9 de marzo de 2023]. Disponible en: https://www.youtube.com/watch?v=r0KErKHxHf0

AFROTECHMODS (Fun with electronics). Canal YouTube [consulta: 9 de marzo de 2023]. Disponible en: https://www.youtube.com/channel/UCosnWgi3eorc1klEQ8pIgJQ

ADELL, Ferran y SERRA, Laura. Galería de proyectos de interacción tangible [en línea] Barcelona: UOC. (PID_00287693) [consulta: 9 de marzo de 2023]. Disponible en: http://interaccio-tangible.aula.uoc.edu/es/

HACKERS (An Avnet Comunity) [en línea][consulta: 9 de marzo de 2023]. Disponible en: https://www.hackster.io/

PROJECT HUB (Arduino Projects) [en línea][consulta: 9 de marzo de 2023]. Disponible en: https://projecthub.arduino.cc/

PROCESSING ELECTRONICS [en línea]. UOC. [consulta: 27 de marzo de 2023]. Disponible en: https://processing.org/tutorials/electronics

ESP32-DevKitC V4 Getting Started Guide [2023] [consulta: 8 de mayo de 2023]. Disponible en: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/hw-reference/esp32/get-started-devkitc.html

INGENIERO EN CASA. Programar ESP32 con Arduino IDE. YouTube [consulta: 8 de mayo de 2023]. Disponible en: https://www.youtube.com/watch?v=wVRcAMWvWko&list=PL2bw5I2fJF8YTESrwu2HSYjp15v_vDuFB&index=2

PROGRAMADOR NOVATO. Curso ESP32. YouTube [consulta: 8 de mayo de 2023]. Disponible en: https://www.youtube.com/watch?v=VuJkqL2Ys3Y&list=PLCTD_CpMeEKTvjzabAvLGHakg-ql6t0q6

LA BUHARDILLA DEL LOCO. Curso ESP32 desde 0 en español. YouTube [consulta: 8 de mayo de 2023]. Disponible en: https://www.youtube.com/watch?v=pdgFqPbw64g&list=PLWXJr4iWm_MXA0yQRKs62YHCTnYirJldM

SINAPTEC. ESP32 desde Cero – Tutorial 6: Servidor Web (WebServer). [2018][en línea]. UOC. [consulta: 29 de mayo de 2023]. Disponible en:
http://www.sinaptec.alomar.com.ar/2018/09/esp32-desde-cero-tutorial-6-servidor.html

 

 

SOFTWARE

 

ARDUINO IDE Versión 2.1.0 [2023] https://www.arduino.cc/

LUCID SOFTWARE Inc. Lucidchart, 2023 [software en línea]. Disponible en: https://www.lucidchart.com

FRITZING (beta) Versión 0.9.10. https://fritzing.org/

 

 

 

IMÁGENES

00_key5
vecteezy_cyber-technology-security-network-protection-background-design-vector-illustration_1330255

01_altavoz-inteligente-control-casa-tecnologia-innovadora
Imagen de rawpixel.com en Freepik https://www.freepik.es/foto-gratis/altavoz-inteligente-control-casa-tecnologia-innovadora_13463638.htm#query=cerradura&position=14&from_view=search&track=sph

02_ojo-verde-mirando-ojo-cerradura
Imagen de Freepik https://www.freepik.es/foto-gratis/ojo-verde-mirando-ojo-cerradura_31499101.htm#query=cerradura&position=0&from_view=search&track=sph

03_bloqueo-teclado
Imagen de mrsiraphol en Freepik https://www.freepik.es/foto-gratis/bloqueo-teclado_1115734.htm#query=lock&position=33&from_view=search&track=sph

04_candado-acero-letrero-vacio
Imagen de d3images en Freepik https://www.freepik.es/foto-gratis/candado-acero-letrero-vacio_955373.htm#query=lock&position=29&from_view=search&track=sph

05_vecteezy_fingerprint-lock-vector-icon-on-white-background_7167694

06_pexels-ylanite-koppens-612800
Foto de Ylanite Koppens: https://www.pexels.com/es-es/foto/dos-llaves-maestras-negras-612800/

07_pexels-david-martins-589038
Foto de david martins: https://www.pexels.com/es-es/foto/persona-sosteniendo-cofre-de-madera-marron-589038/

08_concepto-seguridad-seguridad-empresarial-proteccion-corporativa
Imagen de rawpixel.com en Freepik https://www.freepik.es/foto-gratis/concepto-seguridad-seguridad-empresarial-proteccion-corporativa_3533269.htm#query=lock&position=10&from_view=search&track=sph

09_conjunto-ilustracion-3d-cursores-puntero-mano
Imagen de upklyak en Freepik https://www.freepik.es/foto-gratis/conjunto-ilustracion-3d-cursores-puntero-mano_32331555.htm#query=press%20button&position=23&from_view=search&track=ais

10_tocando-pantalla-telefono-movil_2202
Imagen de ibrandify en Freepik https://www.freepik.es/vector-gratis/tocando-pantalla-telefono-movil_953660.htm#query=open%20mobile&position=24&from_view=search&track=ais

11_pexels-cottonbro-studio-3945663
Foto de cottonbro studio: https://www.pexels.com/es-es/foto/manos-tecnologia-blanco-juego-3945663/

 

Debate0en Proyecto de Interacción Tangible (desarrollo) CERRADURA MULTIPROPÓSITO

No hay comentarios.

Publicado por

Interacción Tangible | PEC02 – SIMON OPEN

Interacción Tangible | PEC02 – SIMON OPEN
Publicado por

Interacción Tangible | PEC02 – SIMON OPEN

JUSTIFICACIÓN El presente documento se corresponde con la segunda Prueba de Evaluación Continua (PEC02) de la asignatura de Interacción Tangible del Grado…
JUSTIFICACIÓN El presente documento se corresponde con la segunda Prueba de Evaluación Continua (PEC02) de la asignatura de Interacción…

JUSTIFICACIÓN

El presente documento se corresponde con la segunda Prueba de Evaluación Continua (PEC02) de la asignatura de Interacción Tangible del Grado en Técnicas de Interacción Digital y Multimedia de la UOC.

En esta prueba nos proponen crear un mini proyecto con Arduino en el que la acción de usuario actúe sobre, al menos, dos controles como iluminación, audio y/o imagen. Debemos trabajar el desarrollo del proyecto a través de las fases del design thinking (empatizar, definir, idear, prototipar, testear).

Se publica en Folio un extracto de la memoria, con la que podéis reproducir fácilmente el prototipo, junto con el video del funcionamiento.

HISTORIA

Imagen del Prototipo Simon OpenEl proyecto es un guiño al juego de SIMON SAY (Simón dice), ya que el funcionamiento de memorizar los colores o tonos es el mismo, aunque un poco más sencillo. La diferencia es que se trata de una única melodía con un número de notas predefinido. Cuando se logra reproducir correctamente podemos abrir la cerradura, por lo que he llamado al prototipo SIMON OPEN.

La cerradura bloquea una caja que contiene a Van Gogh pintando su autorretrato. El juego se trata de liberarlo reproduciendo la melodía aleatoria. ¡Si no eres capaz de memorizar un sencillo código sonoro-luminoso, no podrás salvarlo! ?.

 

DEFINICIÓN

El proyecto consiste en cuatro bombillas led de colores que se encienden al pulsar el botón correspondiente, cada uno de las cuales emite además un sonido característico.

El juego consiste en reproducir los sonidos/luces aleatorias que produce el Arduino en ese mismo orden, de manera que cuando se logra reproducir la melodía correcta (de 6 tonos en este caso, por hacerlo fácil), tenemos la posibilidad de abrir la cerradura de una caja tocando un sensor capacitivo.

PLANTEAMIENTO

Para resolver el problema planteado necesitaré generar números aleatorios (del 0 al 3) y almacenar la secuencia en un array de n posiciones. Comparando la secuencia pulsada por el usuario en los 4 pulsadores disponibles con la generada aleatoriamente podremos averiguar si es correcta y activar el sensor capacitivo para poder abrir la cerradura.

En el momento en que presionamos un botón equivocado, que difiere de la melodía generada, volvemos a empezar y se genera una nueva aleatoriamente.

Mapa conceptual

Enlace al video explicativo del funcionamiento

En el siguiente enlace está disponible una pequeña explicación del funcionamiento del prototipo, en el que se testea tanto el acierto como el fallo en la reproducción de la secuencia aleatoria:

PROTOTIPO

Para diseñar el prototipo he instalado la placa de interconexión y el Arduino sobre una antigua caja de diskettes, colocando la palanca del servomotor actuando como cerradura. Los componentes utilizados son los siguientes:

1x Arduino UNO
1x Piezoeléctrico
5x Resistencias 220 Ohms
2x Resistencias 10 kOhms
1x Resistencia 4,7 kOhms
4x Pulsadores
4x LED de color verde, amarillo, rojo y azul
1x Condensador de 0.1nF
1x Servomotor

Esquema y conexiones

He utilizado el pin analógico A0 del Arduino para recibir la tensión que llega de los pulsadores, que será diferente según se haya pulsado uno u otro botón debido al montaje en escalera de resistencias.

Los pines 2, 3, 4 y 5 los utilizo como salida digital para encender los LED, y el 8 servirá para enviar los datos al piezo.

El pin 9 lo utilizo en modo PWM para modificar el ángulo del brazo del servo.

El esquema del conexionado, implementado utilizando Fritzing:

Diseño esquemático

EL CÓDIGO

//Importamos las librerías para el servo y el sensor capacitivo y creamos las instancias

#include <Servo.h>

#include <CapacitiveSensor.h>

CapacitiveSensor capSensor = CapacitiveSensor (13,12);    //Defino los pines para activar el sensor

Servo myServo;

 

const int numNote = 6;      //Número de notas de la secuencia, que proporciona la dificultad al juego

int notes[] = {1915,1519,1275,956};   //array que guarda las 4 frecuencias

int sequence[numNote];   //array que guarda la secuencia inicial (random)

int userSequence[numNote];   //array que guarda la secuencia generada por el usuario

int position = 0; //posición en la que guardar la nota

 

boolean locked = true;  //Al inicio la puerta está bloqueada

int sensorValue;        //variable que almacena el valor del sensor capacitivo

 

void setup() {

Serial.begin(9600);   //iniciamos la comunicación en serie para poder utilizar el monitor serie

 

myServo.attach(9);     //Salida al servo

pinMode(2,OUTPUT);     //Salida a led verde

pinMode(3,OUTPUT);     //Salida a led amarillo

pinMode(4,OUTPUT);     //Salida a led rojo

pinMode(5,OUTPUT);     //Salida a led azul

 

//inicializamos los arrays

for (int i=0;i<numNote;i++){

userSequence[i] = 0;

sequence[i] = 0;

}

myServo.write(90);    //Colocamos el brazo del servo a 90 grados (bloqueo)

secuenciaInicio();    //Función que reproduce la secuencia de inicio del juego

 

}

 

void loop() {

//Leemos el sensor de contacto

sensorValue = capSensor.capacitiveSensor(30);

// Leemos el valor analógico y lo mostramos por el monitor del puerto serie

int keyVal = analogRead(A0);

Serial.println(keyVal);

Serial.print(sensorValue);

Serial.print(»    La secuencia es: «);

for (int i=0;i<position;i++) Serial.print(userSequence[i]);

//Dependiendo del valor que llegue tocamos una nota u otra, y encendemos el led correspondiente

if (keyVal == 1023){

tone(8, notes[3],500);

digitalWrite(5, HIGH);

delay(700);

grabarTono(3);

}

else if (keyVal >= 900 && keyVal <= 1022){

tone(8,notes[2],500);

digitalWrite(4, HIGH);

delay(700);

grabarTono(2);

}

else if (keyVal >= 650 && keyVal <= 710){

tone(8,notes[1],500);

digitalWrite(3, HIGH);

delay(700);

grabarTono(1);

}

else if (keyVal >= 500 && keyVal <= 550){

tone(8,notes[0],500);

digitalWrite(2, HIGH);

delay(700);

grabarTono(0);

}

else {            //Si no estamos pulsando mantenemos el silencio y los led apagados

noTone(8);

for (int i=2;i<6;i++) digitalWrite(i, LOW);

}

//Si tocamos la malla metálica y la caja no está bloqueada abrimos el brazo del servo y desbloqueamos la cerradura

if (sensorValue > 1000 & locked == false){

myServo.write(180);

}

}

 

/**************************************************************************************************************/

//FUNCIONES

//La secuencia de inicio reproduce la secuencia random muy rápidamente indicando que comienza el juego

void secuenciaInicio(){

for (int i=0;i<numNote;i++) sequence[i] = random(4); //generamos una secuencia aleatoria con números del 0 al 3 (Ej: {0,0,1,2,3,1,2,3,0,1})

for(int i=0;i<3;i++){

for (int j=0;j<numNote;j++){

tone(8,notes[sequence[j]],50);

digitalWrite(sequence[j]+2, HIGH);

delay(70);

noTone(8);

digitalWrite(sequence[j]+2, LOW);

delay(10);

}

}

delay(1000);

reproducirSecuencia();

}

//Función que reproduce la secuencia random pausadamente

//Aprovecho que los pines digitales coinciden con la posición de la frecuencia correspondiente +2

void reproducirSecuencia(){

for(int i=0;i<numNote;i++){

tone(8,notes[sequence[i]],500);

digitalWrite((sequence[i])+2, HIGH);

delay(700);

noTone(8);

digitalWrite((sequence[i])+2, LOW);

}

}

//En esta función se graba la secuencia pulsada en un array que se va comparando con la aleatoria

//La variable position

void grabarTono(int note){

userSequence[position] = note;

//Si el usuario se equivoca reiniciamos todo y bloqueamos

if (userSequence[position] != sequence[position]){

position = 0;

for (int i=2;i<6;i++) digitalWrite(i, LOW);

for (int i=0;i<numNote;i++){

userSequence[i] = 0;

sequence[i] = 0;

}

Serial.println(«FALLO»);

//close the door

myServo.write(90);

locked = true;

delay(500);

secuenciaInicio();

}

else{

position++;

//Si la variable position alcanza el valor definido activamos el sensor capacitivo para poder abrir la cerradura

if(position == numNote) {

for(int i=0;i<20;i++) {

Serial.println(«PRUEBA SUPERADA!!!»);

for (int j=2;j<6;j++) digitalWrite(j, HIGH);

delay(50);

for (int j=2;j<6;j++) digitalWrite(j, LOW);

delay(50);

}

//open the door

locked = false;

 

}

}

 

}

 

 

Debate0en Interacción Tangible | PEC02 – SIMON OPEN

No hay comentarios.