VIDEOCONSOLA ARDUINO
Grupo 13 – Aitor Martín Gómez – Pablo Martín Cobo – Javier Rubia Pérez
Toda la información, memoria del proyecto y el código fuente está en nuestro GitHub.
https://github.com/pabloMartinGit/SEyTR_GII-G13-Consola_Arduino
ÍNDICE
- Introducción
- Componentes utilizados
- Coste del proyecto
- Montaje de Hardware
- Desarrollo de Software
- Casos de uso
- Problemas y soluciones
- Multimedia
INTRODUCCIÓN
Nuestra idea parte de la posibilidad de disfrutar de juegos multijugador de manera sincronizada en una consola portátil de bajo costo.
Para lograr estas funcionalidades, planeamos utilizar módulos Bluetooth y diseñar la consola de modo que sea recargable por pilas.
El proyecto contiene las siguientes características:
- Capacidad para escalar y mejorar la consola, permitiendo el desarrollo de una gran cantidad de juegos.
- La única limitación es la memoria del Arduino.
- Implementación de una interfaz desarrollada en Python que facilita la carga de juegos en las consolas.
Este enfoque no solo garantiza una experiencia de usuario más fluida, sino que también abre la puerta a futuras actualizaciones y expansiones del catálogo de juegos disponibles.
COMPONENTES UTILIZADOS
Para el montaje de cada una de las consolas hemos necesitado de:
- Arduino Nano: el cual tiene el puerto en una ranura en la parte baja de la consola para poder cargar los juegos o incluso poder jugar sin la necesidad de batería externa.
- Zumbador: encargado de reproducir música del juego.
- Pantalla OLED: parte grafica donde se muestra el juego.
- 4 Botones: usados para jugar.
- Joystick: uso de movimiento en los juegos.
- Modulo Bluetooth HC-05: para la conexión con otra consola.
- Interruptor: encendido y apagado de la consola si usamos la batería externa.
- Adaptador alimentación pila 9V: localizado en un compartimento lateral de la consola, el cual ha sido fabricado reciclando una caja de caramelos, utilizado para meter la batería de 9V.
- Pila 9V: encargada de la alimentación.
COSTE DEL PROYECTO
A continuación, se muestra la tabla de los componentes necesarios con sus respectivos precios, se debe tener en cuenta que varios componentes no se pueden comprar por unidades, por tanto, es un precio orientativo. Además, pueden surgir otros costes, por ejemplo, herramientas para hacer los agujeros de la caja, espray para pintarla, etc.
MONTAJE DE HARWARE
Para la hora del montaje de este proyecto hemos seguido los siguientes pasos:
- En primer lugar, tras recibir los materiales que habíamos pedido, comenzamos probando todos los componentes por separado, viendo así la configuración necesaria para aplicarlo en el proyecto.
- Continuamos con el montaje de todos los componentes en una protoboard, para de esta forma poder centrarnos en el código y completar todas las funcionalidades.
- Una vez terminamos todo el proceso de código pasamos al montaje final. Como principal material para la carcasa teníamos en mente realizar el diseño para después imprimirlo en una impresora 3D. No vimos viable esa opción y elegimos un material fácil de manejar como es la madera.
- Para trabajar la madera no teníamos los mejores instrumentos, pero conseguimos un final diseño limpio y sin imperfecciones tras el lijado y pintado de la madera.
DESARROLLO DE SOFTWARE
Antes de comenzar a programar o realizar cualquier avance en el ámbito del software, es necesaria la configuración de los módulos Bluetooth, los pasos para llevarlo a cabo se describen a continuación:
- Envía el comando
AT
desde el monitor serial del IDE de Arduino. Si recibes unOK
, la comunicación es correcta. - Utiliza
AT+ADDR?
para obtener la dirección MAC de cada módulo. - Establece un Arduino como esclavo (
AT+ROLE=0
) y el otro como maestro (AT+ROLE=1
). - Usa
AT+CMODE=0
en ambos dispositivos. - Vincula los dispositivos usando
AT+BIND=DIR_MAC_OTRO
. - Tras reiniciar, verifica que la luz LED del módulo parpadee más despacio, indicando una conexión exitosa.
Las librerías necesarias son las siguientes:
- Adafruit SH1106
- Adafruit GFX
- SoftwareSerial
Por otra parte, como se mencionó en la introducción, llevamos a cabo el desarrollo de una aplicación en Python para poder cargar los juegos de una manera sencilla y eficiente, de modo que el usuario no necesite acceder a ningún entorno de desarrollo. A continuación se encuentra una foto de la interfaz:
La aplicación tiene una funcionalidad muy simple, primero debemos seleccionar el puerto en el que se encuentra conectado el Arduino para poder cargar el juego, simplemente haciendo click nos aparecen todas las opciones disponibles.
Después haciendo click en “Seleccionar Juego”, se abre el explorador de archivos para escoger el juego que vas a jugar, cabe destacar que el juego debe estar en el formato .hex, que es el formato de Arduino(.ino) pero ya compilado.
Realizados los pasos anteriores, se habilita el botón de “Jugar”, una vez se hace click en él, el juego comienza a cargarse en nuestra videoconsola.
Además, aparece esta ventana que confirma que todos los procesos se han realizado de forma correcta.
CASOS DE USO
Los siguientes son ejemplos de cómo nuestra consola Arduino puede ser utilizada en diferentes contextos:
- Juegos en el aula: Los profesores pueden utilizar la consola para actividades interactivas en clases de tecnología o programación, fomentando el aprendizaje lúdico y colaborativo pues se trata de un proyecto expandible y personalizable.
- Eventos de tecnología: La consola puede ser presentada en ferias de ciencia y tecnología, demostrando las capacidades de hardware y software a entusiastas y profesionales del área.
- Desarrollo de habilidades en programación: Ideal para aficionados y estudiantes que desean aprender más sobre la programación de microcontroladores y el desarrollo de videojuegos simples.
- Regalo personalizado: Un regalo hecho a mano para amigos y familiares interesados en la tecnología, mostrando no solo habilidades en electrónica sino también en creatividad.
- Venta a gran escala: Este proyecto tiene potencial para ser producido en mayor medida y con materiales más sofisticados que favorezcan su posible venta. El público de estas consolas es amplio debido a su reducido precio y multijugador.
Estos casos de uso no solo muestran la versatilidad de la consola, sino que también destacan cómo puede ser integrada en diferentes áreas de educación, entretenimiento y venta de cara al público.
PROBLEMAS Y SOLUCIONES
A lo largo del desarrollo del proyecto hemos encontrado diversos problemas, para los cuales hemos tenido que buscar soluciones. Estos problemas y sus posibles soluciones se detallan a continuación:
- Exceso de memoria ocupada: Uno de los principales problemas que tiene este proyecto sería la memoria dinámica del Arduino Nano. Gran parte del éxito de este proyecto es gracias a la optimización de código, variables y refactorizaciones que se han llevado a cabo a lo largo de nuestro software, observamos que si la memoria reservada a las variables dinámicas alcanza un número >90% la ejecución del videojuego fallaba por culpa de un desbordamiento de memoria
- Pantalla significativamente pequeña: La pantalla apenas ocupa una pulgada, esto es bueno respecto al consumo de nuestra batería de 9V, sin embargo, para el usuario puede resultar incomodo leer o observar ciertas partes de esta.
- Batería de poca duración: El diseño de nuestra consola contempla la facilidad de sustitución de dicha batería, sin embargo, no es una batería que pueda durar un tiempo prolongado.
- Poca retroalimentación de errores: Esto ciertamente supone una preocupación mayor para nosotros como desarrolladores. Somos conscientes de que si, por ejemplo, una consola perdiese la conexión con la otra, el usuario no sería capaz de enterarse más que en el momento de que su partida no consigue cargar.
Ahora veremos las posibles soluciones a los distintos problemas planteados:
- Ampliación de memoria mediante el uso de una tarjeta SD. Si esto no fuera suficiente, sería considerable cambiar la placa de desarrollo a una más potente (p.e. Raspberry PI).
- Sustitución de pantalla a una más grande, sin embargo, esto también llevaría a la sustitución de la placa de desarrollo por otra más potente tal y como hemos comentado más arriba.
- Reemplazo de bateria alcalina por una de litio o similares, esto significaría añadir un módulo de carga adicional para recargar esta batería y evitar que haya que sustituirla cada cierto tiempo.
- Modificación del código y retroalimentación añadida, sin embargo, esto no es tan fácil como parece, pues si lo implementásemos la memoria de las variables subiría de manera considerable y es posible que nuestro videojuego dejase de funcionar directamente, por tanto habría que valorar si es algo necesario por completo.
MULTIMEDIA
Vídeo explicativo de todo el proyecto: