ELCONO: Juegos Y Actividades Deportivas Inteligentes
by Daniel Carracedo in Circuits > Arduino
25 Views, 2 Favorites, 0 Comments
ELCONO: Juegos Y Actividades Deportivas Inteligentes

Proyecto desarrollado por estudiantes de la Escuela Técnica Superior de Ingenieros de Telecomunicación de la Universidad Politécnica de Madrid (ETSIT - UPM), cuyo objetivo principal es diseñar y construir tecnología orientada tanto al entretenimiento como a la rehabilitación física y cognitiva.
El producto consta de el mando principal y conos interactivos ambos tienen un Arduino Nano IOT 33. Hasta un máximo de 5 conos para conectar. El mando tiene un teclado interactivo y pantalla LCD para mostrar la información de los juegos.
La conexión entre el mando y los conos es vía wifi, con el protocolo WIFI NINA. Por tanto, hay que encender primero el mando y luego los conos. Ten en cuenta que el orden en que enciendas los conos serán el orden en que el Master/Servidor los almacenará daremos más detalles adelante.
Hemos diseñado en 3D nuestro prototipo del mando y el cono pero cada uno tiene libertad de montaje, no es estricto en este sentido. Os invitamos a probar diferentes diseños. No sé, imagínate tener un cono con forma de estrella o un cono que puedes colgar de la pared.
Los autores de este proyecto son: Pablo Sánchez Pérez, Pablo Gascón Cruz, Iván Ortiz García, Rebeca Molinera Plaza y Daniel Carracedo López. Con colaboración de Pablo De La Rosa Del Val.
Supplies
- Arduino Nano IOT 33 (1 para el master y uno por cono interactivo)
- Cables micro-USB con transferencia de datos.
- Pantalla LCD, con protocolo I2C
- Teclado matricial 4x4
- Cables de conexión
- Botón, tantos como clientes
- Placa de inserción
Conceptos Principales De Arduino


Vamos a contextualizar que es Arduino lo primero, se puede diseñar, montar y trabajar con dispositivos electrónicos y software. Arduino conjunta electrónica, diseño y programación haciendo esto último muy intuitivo. Además, gracias a la plataforma Arduino IDE podemos actualizar y leer los datos del Arduino de forma muy sencilla, también tienes una gran variedad de ejemplos para no tener que empezar a programar sobre un texto vacio.
Vamos a pasar a explicar brevemente como probar un proyecto en Arduino IDE, adjuntaremos unas capturas. También incluiremos enlaces de descargas u otras guías oficiales.
Primero tras instalar la aplicación conectaremos nuestro cable micro-USB entre el Arduino y un puerto USB de nuestro ordenador. Luego en pestaña de Tools habrá que hacer 2 ajustes, en Boards buscaremos el tipo de Arduino que estamos usando. En nuestro caso: Arduino Nano IOT 33. Y en esta misma pestaña en el apartado de COM, si ya tenemos conectada la placa debería aparecer el puerto al que esta conectado.
Si tenemos bien configurado los puertos y la placa en la que vamos a trabajar. En la debajo del help veremos si hay algún Arduino conectado. Si estas en el mismo punto de la captura podemos continuar.
En el siguiente paso iremos a la pestaña superior de Files -> Examples -> 0.1Basics-> Blink.
Se abrirá otra pestaña de Arduino IDE con la misma configuración, entonces justo debajo de Files, presionamos el primer botón azul, Verify, esto comprobará que todo este bien escrito y luego pulsamos el botón adyacente Upload.
Si todo es correcto el LED en la esquina del Arduino parpadeará, puedes ajustar los valores de Delay para cambiar las frecuencias de parpadeo.
Enlace descarga Arduino IDE: https://www.arduino.cc/en/software/
Enlace tutoriales oficiales Arduino: https://www.arduino.cc/en/Tutorial/HomePage/
WIFI NINA

Dentro de Arduino hay muchas librerías implementadas con multitud de funcionalidades. Nuestra comunicación entre conos es totalmente inalámbrica, concretamente vía Wifi. Para la comunicación hemos elegido WIFI NINA por su variedad de tipos de conexiones entre la cuales hemos elegido utilizar el AP(Access Point).
Ahora vamos a descargar la librería necesaria desde el Arduino IDE, en la barra lateral izquierda presionamos el tercer icono, Library Manager. En el buscador que se despliega buscamos WIFI NINA. La versión que ha sido utilizada durante la creación de este proyecto es la 1.9.0.
Con esto tenemos todo lo necesario para poder empezar a montar los dispositivos. Puedes comprobar las funcionalidades de WIFI NINA con la nueva pestaña que habrá aparecido en Examples, te animamos a investigar porque hay muchas formas diferentes de conexión implementadas pero nosotros hemos utilizado el AP.
Documentación de WIFI NINA: https://docs.arduino.cc/libraries/wifinina/
Conexiones Master



Vamos a comentar el montaje del Master/Servidor. Lo llamaremos Master puesto que es el "cerebro" del juego. Toda la información pasa por este Arduino, se almacena y trata aquí.
En la primera foto se ven varias cosas de interés que veremos poco a poco. Podemos ver aquí por primera vez la imagen de como sería el mando y su Hardware tanto de entrada como de salida.
Observamos el teclado matricial 4x4, adjuntaremos el datasheet necesario para comprender el funcionamiento que vamos a resumir a continuación. Este teclado tiene 8 conexiones, parecen muchas pero son muy sencillas.
Con cables que sobresaliendo y mirando hacía los botones con estos bien orientados. El cable mas a la izquierda es la primera fila y los 3 siguientes cables referencian hasta la 4ª fila y después los 4 cables siguiente ordenadamente son las columnas. Las conectaremos entre los pins D2-D9 (primero filas luego columnas).
De modo que cuando pulsemos un botón el cable de esa fila y de esa columna se activarán y el Arduino interpretará las coordenadas y sabrá la posición de la tecla que se pulsó. Posición la cual referenciaremos con el mismo carácter que en el teclado.
Luego observamos la pantalla LCD utilizada. Por simplicidad usamos el modulo negro que se ve en la foto para utilizar el protocolo I2C. Para poder usarla tenemos que descargar una librería al igual que en el paso anterior. Esta vez instalaremos LiquidCrystal I2C, versión 1.1.2.
Este módulo tiene 4 cables muy sencillos de conectar: Vin, conectado a 3.3V. Ground, conectado a cualquier toma de masa del Arduino. SCL, Señal de reloj contectada al pin A5. SDA, Señal de datos conectada al pin A4.
Una vez conectada la pantalla en la pestaña de Examples, veremos una nueva pestaña en la que podemos probar el display. Files -> Examples -> LiquidCrystal I2C -> Hello World.
En la segunda foto vemos la conexiones directas al Arduino pero también hemos adjuntado una foto de los pines explicados para mayor comodidad del usuario.
NOTA: nosotros no hemos utilizado el código del datasheet adjuntado, en la versión final usamos una función para leer el teclado. En anexos adjuntamos la función creada.
Downloads
Conexiones Cono

Ahora pasamos al montaje del cono. Además del Arduino utilizamos el sensor HC-SR04. En la versión final recomendamos añadir un LED más grande que el de la propia placa, pero para comprobar el funcionamiento básico nos sirve este LED.
El HC-SR04 es un sensor de ultrasonidos que detecta la distancia a la que está un objeto del sensor. Podríamos explicarlo con texto pero nosotros aprendimos gracias a un video del canal de youtube llamado ELECTRÓNICOS POR EL MUNDO que adjuntaremos.
Con el video podreís probar el funcionamiento del sensor. La única diferencia con el video y para seguir un mismo protocolo de pins. Te recomendamos utilizar el sensor conectado a los siguientes pins del Arduino: Gnd, conexión de tierra. Vcc, pin 5V. Trigger, pin D10. Echo, pin D11.
Modos De Juego

Lo primero es encender el Master, puesto que actuará como AP, tienes que darle apenas 2-3 segundos para arrancar antes de conectar los conos. Ten en cuenta que en el orden que enciendas los conos se irán conectando al servidor en ese orden. La foto adjuntada es muy explicativa pero vamos a entrar en más detalle de lo que hace cada botón:
- "A": Juego Velocidad, tras pulsar el botón, con el teclado marcarás la distancia en metros desde el jugador hasta al cono (Tienes que introducir 3 dígitos, p.e: 050, para 50 metros). El Display mostrará esa distancia y cuando pulse “*” empezará el juego el cronómetro. Y cuando el jugador pase a menos de 25 cm del sensor en el cono se acabará el juego. Se mostrará la velocidad en m/s del jugador.
- "B": Juego Recorrido, Después de pulsar "B" y tras pulsar el botón “*” inicia el juego. Se encenderán todos los conos. Y el jugador tiene que encontrar el camino más rápido para alcanzarlos. Cuando se hayan alcanzado todos los conos se acaba el juego y el display mostrar el tiempo que el jugador ha tardado en completar el juego.
- "C": Juego Azar, Después de pulsar "B" y tras pulsar el botón “*” inicia el juego. Los conos se encenderán aleatoriamente. Y el jugador tiene que encontrar el camino más rápido para alcanzarlos. Cuando se hayan alcanzado todos los conos se acaba el juego y el display mostrar el tiempo que el jugador ha tardado en completar el juego.
- "D": ¡Es tu momento!, nosotros te damos una idea, Course Navette. Pero este último modo no está implementado. Al igual que con el diseño 3D, hay total libertad de inventar.
- "*": Botón Start, este botón inicia el cronómetro de todos los juegos, ideal para hacer una cuenta atrás.
- "#": Botón conexión, ahora la explicación del botón más importante. Este botón reinica los juego y hace que no se puedan incorporar conos mientras hay un juego activo. Se tiene que pulsar justo tras conectar todos los conos que desees utilizar y mostrará cuantos hay utilizandose. También se pulsará tras completar un juego antes de iniciar de nuevo para resetar todas las variables y no haya conflicto entre los datos de diferentes jugadores.
Anexos
Aquí vamos a explicar el código mínimo necesario para la comunicación entre master y slave, funciones básicas y principios a conocer.
Primero explicar como pueden comunicarse, el ssid es el nombre del Access Point y pass la contraseña, todos los códigos que implementes deben tener los mismos valores, por último, la sentencia WiFiServer inicializa un punto de acceso, utilizamos el puerto 80 porque es el designado para la antena en el arduino que estamos utilizando. Estas son las sentencias que nosotros implementamos:
char ssid[] = "Arduino_Server";
char pass[] = "12345678";
WiFiServer server(80); //solo en el código del master
char serverIP[] = "192.168.4.1"; //solo en el código del slave, IP que crea el master.
Algunas sentencias relevantes en el master:
server.begin(); //inicializa el servidor, iniciada en el el setup()
LiquidCrystal_I2C lcd(0x27, 16, 2); //Inicializa el LCD, el 0x27 es variable dependiendo del pin designado al I2C (tipicamente: 0x27 o 0x3F)
//declaración del teclado matricial y sus conexiones a los pines designados
char keysMatrix[ROWS][COLS] = {
{'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'}};
int rowPins[ROWS] = {2, 3, 4, 5}; //a los D_X
int colPins[COLS] = {6, 7, 8, 9};
void escanearTeclado(){ //función creada para interpretar el teclado
for (int row = 0; row < ROWS; row++) {
pinMode(rowPins[row], OUTPUT);
digitalWrite(rowPins[row], LOW);
for (int col = 0; col < COLS; col++) {
if (digitalRead(colPins[col]) == LOW) {
char tecla = keysMatrix[row][col];
while (digitalRead(colPins[col]) == LOW) {
delay(10);
}interpretarTecla(tecla);
}
}
pinMode(rowPins[row], INPUT);
}}
void interpretarTecla(char tecla); //esta sentencia actúa según la tecla pulsada y el modo de juego
//Por ejemplo, función enviar a todos se utiliza en el modo recorrido donde el master comunica con todos los conos conectados simultáneamente haciendo que se enciendan sus LEDs
void enviarATodos(String mensaje) {
for (int i = 0; i < MAX_CLIENTES; i++) {
if (clientes[i].activo) {
clientes[i].client.println(mensaje);
}}}
Cabe destacar que en el código del master tenemos muchas sentencias dedicadas a dar una mayor robustez y prevenir problemas de conexión. Por ejemplo, conos con el mismo ID o ya conectados a otro master no pueden intercalarse.
Por último, del código de slave los puntos claves son los siguientes:
WiFiClient client; //Asigna la función de cliente al arduino deseado
String nombreCliente = "Cono_X"; //NUNCA PUEDE REPETIRSE ENTRE CONOS
El código subido aquí no tiene la versión del ultrasonido implementada, es un prototipo configurado con un botón. En el paso 4 teneis las referencias para implentar el ultrasonidos.