{"id":9976,"date":"2026-05-06T00:34:15","date_gmt":"2026-05-05T22:34:15","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=9976"},"modified":"2026-05-06T00:34:20","modified_gmt":"2026-05-05T22:34:20","slug":"retro-boy-la-consola-perfecta-para-los-nostalgicos","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/retro-boy-la-consola-perfecta-para-los-nostalgicos\/","title":{"rendered":"Retro Boy \u2014 La consola perfecta para los nost\u00e1lgicos"},"content":{"rendered":"\n<p>Retro Boy es una consola port\u00e1til inspirada en las Game&amp;Watch y Game Boy Advance, creada para recuperar la esencia de las consolas antiguas y los juegos retro que generaron tan buenos recuerdos en sus momentos de gloria.<\/p>\n\n\n\n<p>Las consolas port\u00e1tiles son uno de los ejemplos m\u00e1s claros que se vienen a la cabeza cuando se hablan de sistemas empotrados y tienen su origen en los a\u00f1os 70, cuando se desarrollaron las primeras videoconsolas port\u00e1tiles, las cuales s\u00f3lo dispon\u00edan de un \u00fanico juego por aparato (caracter\u00edstica de las Game&amp;Watch creadas en 1980). Su dise\u00f1o y complejidad fue evolucionando, a\u00f1adiendo la posibilidad de cambio de juegos mediante cartuchos, caracter\u00edstica que se mantuvo durante mucho tiempo (en forma de cartucho o disco) hasta la llegada de las descargas online.<\/p>\n\n\n\n<p>En este contexto, Retro Boy vuelve al dise\u00f1o sencillo y minimalista de las Game &amp; Watch, donde una peque\u00f1a cantidad de botones es suficiente para poder tener una buena experiencia jugando. Al mismo tiempo, recupera el uso de los cartuchos, como todas las consolas de Nintendo, permitiendo no solo la ejecuci\u00f3n de distintos juegos, sino tambi\u00e9n su colecci\u00f3n en formato tangible.<\/p>\n\n\n\n<p>De este modo, el proyecto combina elementos clave del pasado con una reinterpretaci\u00f3n actual, dando lugar a una consola que no solo permite jugar, sino tambi\u00e9n revivir una forma de entender el entretenimiento digital m\u00e1s directa, sencilla y memorable.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83c\udfaf Objetivo<\/h2>\n\n\n\n<p>El prop\u00f3sito central de este proyecto es el dise\u00f1o y construcci\u00f3n de una <strong>consola port\u00e1til funcional<\/strong> que capture la esencia de sistemas ic\u00f3nicos como la <em>Game Boy Advance<\/em> o las cl\u00e1sicas <em>Game &amp; Watch<\/em>. No buscamos una simple emulaci\u00f3n por software, sino el desarrollo de un sistema integrado que gestione el hardware de forma eficiente y directa.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Metas T\u00e9cnicas<\/h3>\n\n\n\n<p>Para alcanzar este prop\u00f3sito, nos hemos fijado los siguientes pilares fundamentales:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Arquitectura Basada en Estados:<\/strong> Implementar el n\u00facleo del sistema como una <strong>m\u00e1quina de estados finitos (FSM)<\/strong>. Esto garantizar\u00e1 una transici\u00f3n fluida y robusta entre los men\u00fas, la l\u00f3gica de juego y la gesti\u00f3n de perif\u00e9ricos.<\/li>\n\n\n\n<li><strong>Interacci\u00f3n Directa con el Hardware:<\/strong> Desarrollar el control de perif\u00e9ricos mediante una interfaz de usuario f\u00edsica, gestionando la entrada de <strong>botones en tiempo real<\/strong> y la salida de <strong>v\u00eddeo y audio<\/strong> sincronizados.<\/li>\n\n\n\n<li><strong>Identificaci\u00f3n de Cartuchos:<\/strong> Crear un sistema de <strong>reconocimiento de cartuchos externos<\/strong>, permitiendo que la consola sea una plataforma modular capaz de cargar y ejecutar distintos t\u00edtulos seg\u00fan el m\u00f3dulo conectado.<\/li>\n\n\n\n<li><strong>Dise\u00f1o de Sistemas Embebidos:<\/strong> Integrar todos estos componentes en un formato port\u00e1til, optimizando el consumo y el espacio.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udee0\ufe0f Hardware<\/h2>\n\n\n\n<p>Para construir esta consola, hemos seleccionado componentes que equilibran potencia y bajo coste. El cerebro de todo es la ESP32-S3, que El desarrollo de la consola se basa en una arquitectura de 32 bits capaz de gestionar perif\u00e9ricos de entrada\/salida de forma s\u00edncrona. A continuaci\u00f3n se detalla el listado de materiales y la justificaci\u00f3n t\u00e9cnica de la elecci\u00f3n del hardware.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Listado de Componentes (BOM)<\/h3>\n\n\n\n<p><strong>Electr\u00f3nica<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Microcontrolador<\/strong>: ESP32 S3 N16R8 (1 ud.) \u2014 2,71 \u20ac<\/li>\n\n\n\n<li><strong>Interfaz Visual<\/strong>: Pantalla LCD TFT ST7735S (1 ud.) \u2014 2,35 \u20ac<\/li>\n\n\n\n<li><strong>Lectura de Datos<\/strong>: M\u00f3dulo RFID MFRC-522 (1 ud.) \u2014 1,79 \u20ac<\/li>\n\n\n\n<li><strong>Identificadores<\/strong>: Llaveros de proximidad RFID (5 uds.) \u2014 1,00 \u20ac<\/li>\n\n\n\n<li><strong>Control<\/strong>: Botones de interacci\u00f3n (7 uds.) \u2014 1,75 \u20ac<\/li>\n\n\n\n<li><strong>Detecci\u00f3n Mec\u00e1nica<\/strong>: Interruptor para ranura de cartuchos (1 ud.) \u2014 0,30 \u20ac<\/li>\n\n\n\n<li><strong>Salida de Audio<\/strong>: M\u00f3dulo buzzer pasivo (1 ud.) \u2014 1,40 \u20ac<\/li>\n\n\n\n<li><strong>Alimentaci\u00f3n<\/strong>: Portapilas 3xAA (1 ud.) \u2014 0,65 \u20ac<\/li>\n\n\n\n<li><strong>Soporte<\/strong>: Placa PCB perforada (2 uds.) \u2014 1,02 \u20ac<\/li>\n\n\n\n<li><strong>Conectividad<\/strong>: Headers hembra y cableado r\u00edgido \u2014 1,90 \u20ac<\/li>\n<\/ul>\n\n\n\n<p><strong>Materiales de Construcci\u00f3n<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Estructura<\/strong>: Cart\u00f3n pluma y cartulinas \u2014 10,34 \u20ac<\/li>\n\n\n\n<li><strong>Acabado y Modelado<\/strong>: Arcilla, pintura acr\u00edlica y adhesivos \u2014 20,62 \u20ac<\/li>\n<\/ul>\n\n\n\n<p><strong>Coste total del hardware integrado: 45,83 \u20ac<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Descripci\u00f3n T\u00e9cnica del Sistema<\/h3>\n\n\n\n<p>La elecci\u00f3n de los componentes responde a criterios de compatibilidad y rendimiento bajo el protocolo de comunicaci\u00f3n SPI y GPIO.<\/p>\n\n\n\n<p><strong>Autonom\u00eda<\/strong>: El sistema est\u00e1 dise\u00f1ado para operar con una tensi\u00f3n nominal de 4,5V mediante pilas AA, aprovechando el regulador de voltaje interno de la placa de desarrollo para alimentar de forma estable los m\u00f3dulos de 3,3V.<\/p>\n\n\n\n<p><strong>Unidad de Procesamiento<\/strong>: Se ha integrado una <strong>ESP32 S3 N16R8<\/strong>. La selecci\u00f3n de este modelo responde a su condici\u00f3n de est\u00e1ndar en el desarrollo de sistemas embebidos actuales, lo que asegura una amplia compatibilidad con librer\u00edas y una gran comunidad de soporte. Aunque este modelo espec\u00edfico cuenta con una amplia PSRAM, la eficiencia del c\u00f3digo y la arquitectura modular de la consola han permitido ejecutar la l\u00f3gica de los juegos y la gesti\u00f3n de buffers de imagen utilizando exclusivamente la <strong>SRAM interna<\/strong>, garantizando un rendimiento \u00f3ptimo sin retardos en el ciclo de reloj.<\/p>\n\n\n\n<p><strong>Subsistema de Almacenamiento (Cartuchos)<\/strong>: La gesti\u00f3n de los juegos se realiza mediante tecnolog\u00eda <strong>RFID<\/strong>. Cada cartucho artesanal contiene un tag pasivo que es interrogado por el lector MFRC-522. Para optimizar el consumo y evitar lecturas err\u00f3neas, se ha implementado un interruptor mec\u00e1nico en la ranura que act\u00faa como habilitador del proceso de escaneo.<\/p>\n\n\n\n<p><strong>Gesti\u00f3n de Perif\u00e9ricos<\/strong>: Tanto la pantalla como el lector RFID operan sobre el bus <strong>SPI<\/strong>. Dado que comparten las l\u00edneas de datos, el hardware requiere una gesti\u00f3n precisa de los pines <strong>Chip Select (CS)<\/strong> para evitar colisiones de datos durante la ejecuci\u00f3n.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83d\udd0c Diagrama de Conexiones<\/h4>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"482\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-6-1024x482.png\" alt=\"\" class=\"wp-image-10149\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-6-1024x482.png 1024w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-6-300x141.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-6-768x362.png 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-6-520x245.png 520w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-6-720x340.png 720w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-6.png 1348w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcbb Software: Interfaz Base<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83e\uddf1 Estructura del Programa<\/h4>\n\n\n\n<p>La arquitectura de <strong>Retro Boy<\/strong> se basa en un enfoque modular y orientado a objetos, dise\u00f1ado para maximizar la eficiencia de un sistema empotrado como el ESP32<sup><\/sup>. Esta separaci\u00f3n de responsabilidades permite que el sistema sea escalable: a\u00f1adir una nueva funcionalidad o un juego no requiere reescribir el n\u00facleo de la consola.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1. M\u00e1quina de Estados Finitos (FSM)<\/h4>\n\n\n\n<p id=\"p-rc_57a57dcbb4af944b-182\">El flujo de la consola se gestiona mediante una <strong>M\u00e1quina de Estados<\/strong> que determina qu\u00e9 l\u00f3gica debe ejecutarse en cada momento<sup><\/sup>. Los estados principales definidos son<sup><\/sup>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>STATE_OFF<\/code><\/strong>: Estado de reposo donde la pantalla permanece apagada.<\/li>\n\n\n\n<li><strong><code>STATE_MENU<\/code> \/ <code>STATE_SETTINGS<\/code> \/ <code>STATE_CALENDAR<\/code><\/strong>: Navegaci\u00f3n por la interfaz base.<\/li>\n\n\n\n<li><strong><code>STATE_LOADING_GAME<\/code><\/strong>: Un estado de transici\u00f3n que prepara los recursos antes de lanzar un juego.<\/li>\n\n\n\n<li><strong><code>STATE_GAME_RUNNING<\/code><\/strong>: Ejecuci\u00f3n activa del bucle de juego.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2. Polimorfismo y Gesti\u00f3n Din\u00e1mica de Memoria<\/h4>\n\n\n\n<p id=\"p-rc_57a57dcbb4af944b-187\">Para gestionar las diferentes pantallas y juegos sin saturar la RAM del ESP32, hemos implementado una gesti\u00f3n din\u00e1mica de objetos<sup><\/sup>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Clase <code>Screen<\/code> e Interfaz <code>IGame<\/code><\/strong>: Ambas utilizan funciones virtuales puras para definir un contrato de ejecuci\u00f3n (<code>init<\/code>, <code>update<\/code>, <code>draw\/render<\/code>).<\/li>\n\n\n\n<li><strong>Ciclo de Vida de Objetos<\/strong>: Utilizamos la funci\u00f3n <code>setScreen()<\/code> para destruir la pantalla anterior (<code>delete<\/code>) y crear la nueva (<code>new<\/code>) solo cuando es necesario. Esto garantiza que la consola no consuma memoria por men\u00fas que no est\u00e1n visibles.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3. Gesti\u00f3n de Recursos y Bus SPI Compartido<\/h4>\n\n\n\n<p id=\"p-rc_57a57dcbb4af944b-190\">Dado que el lector RFID y la pantalla TFT comparten el mismo bus de datos (SPI), el c\u00f3digo implementa un control estricto de los <strong>Chip Select (CS)<\/strong><sup><\/sup>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Aislamiento de Perif\u00e9ricos<\/strong>: Se han creado funciones de selecci\u00f3n (<code>selectScreen<\/code>, <code>selectRFID<\/code>) que aseguran que solo un dispositivo escuche el bus a la vez, poniendo el pin CS del otro en estado alto (<code>HIGH<\/code>) para evitar interferencias.<\/li>\n\n\n\n<li><strong>Feedback mediante NeoPixel<\/strong>: Se ha integrado un LED RGB (pin 48) que act\u00faa como indicador de estado por hardware: Amarillo durante la inicializaci\u00f3n y Azul cuando el sistema est\u00e1 listo.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">4. Capa de Abstracci\u00f3n de Hardware (HAL) Refinada<\/h4>\n\n\n\n<p>El c\u00f3digo separa la electr\u00f3nica de la l\u00f3gica mediante clases dedicadas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Clase <code>Button<\/code><\/strong>: Gestiona el <strong>debouncing<\/strong> para evitar lecturas err\u00f3neas por el ruido mec\u00e1nico de los botones.<\/li>\n\n\n\n<li><strong>Gesti\u00f3n de Energ\u00eda As\u00edncrona<\/strong>: Uso de interrupciones software para la implementaci\u00f3n de apagar\/ encender la consola (explicado en el pr\u00f3ximo apartado).<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">5. El Bucle Principal (loop)<\/h4>\n\n\n\n<p id=\"p-rc_57a57dcbb4af944b-195\">El <code>loop()<\/code> ha sido reorganizado para seguir una secuencia l\u00f3gica de alta prioridad en cada iteraci\u00f3n<sup><\/sup>:<\/p>\n\n\n\n<p><strong>Bucle de Ejecuci\u00f3n<\/strong>: Seg\u00fan el <code>consoleState<\/code>, se delega el control al m\u00e9todo <code>update()<\/code> y <code>draw()<\/code> de la pantalla o juego activo, gestionando el refresco visual solo si es necesario para ahorrar tiempo de proceso.<\/p>\n\n\n\n<p><strong>Sincronizaci\u00f3n de Entradas<\/strong>: Lectura de botones e interruptor de cartucho.<\/p>\n\n\n\n<p><strong>Gesti\u00f3n de Eventos Cr\u00edticos<\/strong>: Procesamiento de la petici\u00f3n de encendido\/apagado y detecci\u00f3n de cambios f\u00edsicos en el cartucho.<\/p>\n\n\n\n<p>Se explicar\u00e1 con m\u00e1s detalle en su apartado correspondiente.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u26a1Funcionalidades B\u00e1sicas: Encender\/ Apagar la Consola<\/h4>\n\n\n\n<p>La base de la funcionalidad de encender\/ apagar la consola se fundamenta en el uso de interrupciones hardware asociadas al bot\u00f3n de encendido. De esta forma se detecta de forma inmediata el cambio en el sistema, independientemente del flujo que est\u00e9 siguiendo el sistema en un punto determinado.<\/p>\n\n\n\n<p>Esta interrupci\u00f3n se asocia al bot\u00f3n de encendido y, cuando se activa, se ejecuta una rutina de servicio (ISR, <em>Interrupt Service Routine<\/em>) especificada en el c\u00f3digo (en este caso es la funci\u00f3n <code>onPowerButton()<\/code>). Esta rutina \u00fanicamente se encarga de modificar el valor de una variable tipo vol\u00e1til (llamada <code>powerIRQ<\/code>) que act\u00faa como flag indicando que se ha producido una solicitud de cambio.<\/p>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Variable <code>volatile<\/code><\/summary>\n<p>Variable que se modifica dentro de una rutina de servicio que permite leer su valor de forma correcta tanto en la interrupci\u00f3n como en el flujo principal del programa, evitando optimizaciones del compilador que puedan provocar incoherencias<\/p>\n<\/details>\n\n\n\n<p><\/p>\n\n\n\n<p>Dentro del bucle loop se procesa el valor de <code>powerIRQ<\/code> para realizar el cambio de estado de consola (si hay cambio). Por tanto, la interrupci\u00f3n notifica el evento producido y la l\u00f3gica principal act\u00faa en consecuencia.<\/p>\n\n\n\n<p>Este dise\u00f1o evita ejecutar l\u00f3gica pesada dentro de la interrupci\u00f3n (lo cual es una buena pr\u00e1ctica en sistemas embebidos), mantiene el control centralizado en el bucle principal y garantiza una transici\u00f3n robusta entre estados.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"video-container\"><iframe loading=\"lazy\" title=\"Encender la Consola - RetroBoy Funcionamiento\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/IpMYT_bVcwc?feature=oembed&#038;wmode=opaque\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83d\udcbe  Funcionalidades B\u00e1sicas: Reconocer Cartucho<\/h4>\n\n\n\n<p>La funcionalidad de reconocimiento de cartucho se basa en la combinaci\u00f3n de un interruptor f\u00edsico de detecci\u00f3n y un lector RFID. Esto se ha implementado de esta forma por el problema de compartici\u00f3n de bus que tienen RFID y la pantalla, adem\u00e1s de que el propio funcionamiento del RFID dificulta la lectura seguida del mismo ID. De esta forma, el interruptor detecta si hay un cartucho insertado (y cuando se saca) y el RFID s\u00f3lo que encarga de identificar el juego al que corresponde un cartucho.<\/p>\n\n\n\n<p>En cada iteraci\u00f3n del programa principal se comprueba el estado del interruptor. Si este se encuentra presionado y anteriormente no hab\u00eda ning\u00fan cartucho insertado, el sistema interpreta que se ha producido una nueva inserci\u00f3n. En ese momento se activa el lector RFID para realizar la lectura del identificador del cartucho (el lector RFID toma control del bus SPI para leer el chip insertado).<\/p>\n\n\n\n<p>Con el identificador obtenido, el sistema recorre la lista de juegos registrados y compara el UID le\u00eddo con los identificadores almacenados. Si se encuentra una coincidencia, se asigna el juego correspondiente como juego activo, quedando disponible para ser ejecutado desde el men\u00fa de la consola.<\/p>\n\n\n\n<p>En caso contrario, si el interruptor deja de estar presionado y hab\u00eda un juego activo, el sistema interpreta que el cartucho ha sido retirado. Entonces, se cancela la referencia al juego activo, se detiene cualquier ejecuci\u00f3n asociada si fuera necesario y la consola vuelve al men\u00fa principal.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"video-container\"><iframe loading=\"lazy\" title=\"Reconocer Cartuchos - RetroBoy Funcionamiento\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/lbxSnjP-o84?feature=oembed&#038;wmode=opaque\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83c\udfe0 Men\u00fa Principal<\/h4>\n\n\n\n<p>El sistema operativo de <strong>Retro Boy<\/strong> ha sido dise\u00f1ado bajo una arquitectura de men\u00fas jer\u00e1rquicos que prioriza la legibilidad y la facilidad de navegaci\u00f3n. La interfaz se divide en tres m\u00f3dulos principales accesibles desde el arranque:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1. Gesti\u00f3n Din\u00e1mica de Juegos<\/h4>\n\n\n\n<p>Esta secci\u00f3n act\u00faa como el punto de entrada principal a la ejecuci\u00f3n de software externo.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Estado por defecto<\/strong>: Mientras la ranura de expansi\u00f3n est\u00e9 vac\u00eda, la interfaz muestra el mensaje <strong>\u00ab[SIN JUEGO]\u00bb<\/strong>.<\/li>\n\n\n\n<li><strong>Detecci\u00f3n activa<\/strong>: Al introducir un cartucho, el sistema identifica el ID mediante el lector RFID y actualiza autom\u00e1ticamente la etiqueta del men\u00fa con el <strong>nombre del juego correspondiente<\/strong>. Al pulsar el bot\u00f3n de confirmaci\u00f3n, se inicia la transici\u00f3n al bucle de juego.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2. Calendario<\/h4>\n\n\n\n<p>Se ha integrado una herramienta de consulta temporal que presenta un <strong>calendario est\u00e1tico de marzo de 2026<\/strong>. Esta funcionalidad permite verificar la disposici\u00f3n de los d\u00edas en pantalla, sirviendo como prueba de renderizado de tablas y fuentes personalizadas en el entorno gr\u00e1fico de la consola.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3. Panel de Ajustes<\/h4>\n\n\n\n<p>El men\u00fa de ajustes permite al usuario personalizar la experiencia de uso y gestionar los recursos del hardware de forma directa. Las opciones funcionales implementadas son:<\/p>\n\n\n\n<p><strong>Control de Audio<\/strong>: Permite activar o desactivar el <strong>buzzer pasivo<\/strong>. Esta opci\u00f3n modifica una variable global que silencia los efectos de sonido y las melod\u00edas de los juegos sin detener la ejecuci\u00f3n de la l\u00f3gica del software.<\/p>\n\n\n\n<p><strong>Gesti\u00f3n de Temas<\/strong>: Permite alternar la interfaz entre <strong>modo claro y modo oscuro<\/strong>, ajustando los colores de fondo y de texto para adaptarse a las condiciones lum\u00ednicas del entorno.<\/p>\n\n\n\n<p><strong>Localizaci\u00f3n<\/strong>: El sistema es biling\u00fce, permitiendo cambiar toda la interfaz de la consola entre <strong>espa\u00f1ol e ingl\u00e9s<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"video-container\"><iframe loading=\"lazy\" title=\"Men\u00fa Principal - RetroBoy Funcionamiento\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/S3TjhnW6g3Y?feature=oembed&#038;wmode=opaque\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u2699\ufe0f Setup y Loop<\/h4>\n\n\n\n<p>La funci\u00f3n <code>setup()<\/code> se encarga de la inicializaci\u00f3n completa del sistema, configurando todos los componentes hardware y software necesarios para el funcionamiento de la consola: inicializaci\u00f3n de la pantalla, el bus de comunicaci\u00f3n SPI, el lector RFID, los botones, el sistema de sonido, configuraci\u00f3n de los pines de entrada\/salida, establecer el estado inicial del sistema y registrar la interrupci\u00f3n asociada al bot\u00f3n de encendido.<\/p>\n\n\n\n<p>Por otro lado, la funci\u00f3n <code>loop()<\/code> constituye el n\u00facleo de ejecuci\u00f3n del sistema, y se ejecuta de forma continua durante todo el ciclo de vida de la consola. Su funcionamiento sigue una secuencia estructurada de pasos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>1. Lectura de entradas<\/strong>: se obtienen los estados actuales de los botones y se actualizan en la estructura de datos <code>InputState<\/code>, que almacena la informaci\u00f3n de las entradas del usuario en ese instante.<\/li>\n\n\n\n<li><strong>2. Lectura del interruptor de cartucho<\/strong>: se comprueba si hay un cartucho insertado o retirado, actualizando su estado interno.<\/li>\n\n\n\n<li><strong>3. Procesamiento de interrupciones<\/strong>: se verifica si se ha producido una interrupci\u00f3n y se gestiona el cambio de estado correspondiente.<\/li>\n\n\n\n<li><strong>4. Gesti\u00f3n de cambios de cartucho<\/strong>: se detectan inserciones o extracciones de cartuchos y se act\u00faa en consecuencia (explicado anteriormente).<\/li>\n\n\n\n<li><strong>5. Actualizaci\u00f3n del sistema (si est\u00e1 encendido)<\/strong>: si la consola se encuentra en estado activo, se actualiza su comportamiento en funci\u00f3n del estado actual y de las entradas del usuario. <\/li>\n<\/ul>\n\n\n\n<p>La actualizaci\u00f3n del sistema se realiza aprovech\u00e1ndose de que la consola se ha implementado como una m\u00e1quina finita de estados, permitiendo transicionar entre estados seg\u00fan los botones pulsados.<\/p>\n\n\n\n<p>Los estados principales en los que se puede encontrar la m\u00e1quina son:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>enum ConsoleState {\n  STATE_OFF,\n  STATE_MENU,\n  STATE_CALENDAR,\n  STATE_SETTINGS,\n  STATE_WAITING_CART,\n  STATE_LOADING_GAME,\n  STATE_GAME_RUNNING\n};<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>Este enfoque permite estructurar de forma clara el flujo de ejecuci\u00f3n, facilitando la gesti\u00f3n de la l\u00f3gica del sistema y mejorando su mantenibilidad y escalabilidad. Cada estado encapsula un comportamiento espec\u00edfico, y las transiciones entre ellos garantizan una interacci\u00f3n coherente con el usuario.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83d\udd00 Diagrama de Flujo<\/h4>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"852\" height=\"1024\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/Game-System-State-ConsolaRetro-1-852x1024.png\" alt=\"\" class=\"wp-image-10137\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/Game-System-State-ConsolaRetro-1-852x1024.png 852w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/Game-System-State-ConsolaRetro-1-250x300.png 250w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/Game-System-State-ConsolaRetro-1-768x923.png 768w\" sizes=\"auto, (max-width: 852px) 100vw, 852px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83c\udfae Software: Juegos<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83e\udde9 Interfaz IGame<\/h4>\n\n\n\n<p>Los juegos de la consola se han implementado siguiendo la interfaz IGame, la cual contiene las cuatro funciones principales que permiten que los juegos funcionen siguiendo la l\u00f3gica de bucle de la consola.<\/p>\n\n\n\n<p>La interfaz se declara de la siguiente forma:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class IGame {\npublic:\n  virtual void init() = 0;\n  virtual void update(const InputState&amp; in) = 0;\n  virtual void render(Adafruit_ST7735&amp; tft, SoundManager&amp; sound) = 0;\n  virtual void exit() = 0;\n  virtual ~IGame() {}\n};<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>A continuaci\u00f3n, se explica la funcionalidad esperada de cada una de estas funciones:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>init()<\/code>: es la funci\u00f3n encargada de preparar el estado inicial del juego inicializando las variables o estructuras de datos necesarias para la correcta ejecuci\u00f3n del juego.<\/li>\n\n\n\n<li><code>update(in)<\/code>: es la funci\u00f3n encargada de alterar el estado del juego en funci\u00f3n de la entrada introducida por el jugador. Estos datos se pasan por par\u00e1metro en una estructura de datos llamada <code>InputState<\/code><strong> <\/strong>que recoge la informaci\u00f3n de qu\u00e9 botones han sido presionados en esa iteraci\u00f3n de la consola.<\/li>\n\n\n\n<li><code>render(tft, sound)<\/code>: es la funci\u00f3n encargada de repintar la pantalla (tft) y hacer sonar los sonidos correspondientes (sound) para mostrar la actualizaci\u00f3n del juego por el cambio de estado ocurrido en <code>update()<\/code>.<\/li>\n\n\n\n<li><code>exit()<\/code>: es la funci\u00f3n encargada de finalizar la ejecuci\u00f3n del juego, liberando recursos y cerrando el proceso de forma controlada siempre que sea necesario.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83d\udd79\ufe0f Juegos Programados<\/h4>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-1&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-1-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-1\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">\ud83c\udfa8 <em>Color Game<\/em><\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-1\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-1-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p>Color Game es un juego muy b\u00e1sico creado especialmente para comprobar, de forma r\u00e1pida y sencilla, que toda la l\u00f3gica de la consola funciona correctamente.<\/p>\n\n\n\n<p>El juego consiste en que, dependiendo de qu\u00e9 bot\u00f3n de la cruceta se pulse, la pantalla se pinta de un color u otro.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"video-container\"><iframe loading=\"lazy\" title=\"Color Game - RetroBoy Juegos\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/vtCFeam0ww8?feature=oembed&#038;wmode=opaque\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-2&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-2-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-2\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">\ud83d\udc0d <em>Snake<\/em><\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-2\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-2-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p>El juego de Snake es el juego cl\u00e1sico de la d\u00e9cada de los 70, el cual consiste en controlar una serpiente que se mueve por la pantalla comiendo \u00abmanzanas\u00bb (p\u00edxeles rojos). Cada vez que la serpiente come una de estas manzanas, su cuerpo aumenta de tama\u00f1o, haciendo m\u00e1s dif\u00edcil el control de la serpiente.<\/p>\n\n\n\n<p><strong>Objetivo<\/strong>: obtener el m\u00e1ximo n\u00famero de puntos sin chocar la cabeza con el cuerpo o sin chocarse con los bordes de la pantalla.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"video-container\"><iframe loading=\"lazy\" title=\"Snake - RetroBoy Juegos\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/ixy9_obNYs0?feature=oembed&#038;wmode=opaque\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-3&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-3-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-3\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">\ud83d\udd33 <em>Tetris<\/em><\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-3\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-3-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p>De la misma forma que con el Snake, el Tetris es un cl\u00e1sico creado en 1984 que continua siendo juego referente y popular hasta d\u00eda de hoy. El juego consiste en colocar figuras geom\u00e9tricas en una cuadr\u00edcula intentando formar l\u00edneas horizontales completas para ganar puntos.<\/p>\n\n\n\n<p><strong>Objetivo<\/strong>: obtener la mayor cantidad de puntos sin que haya piezas que salgan de la cuadr\u00edcula.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"video-container\"><iframe loading=\"lazy\" title=\"Tetris - RetroBoy Juegos\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/aEGsNYvMkUY?feature=oembed&#038;wmode=opaque\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-4&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-4-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-4\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">\ud83e\udde0<em> Memory Game<\/em><\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-4\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-4-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p>Memory Game simula el popular juego de Sim\u00f3n Dice, donde el juego genera una secuencia aleatoria de colores y el usuario debe repetirla sin fallar. Esta secuancia se genera paso a paso, es decir, inicialmente muestra un \u00fanico color y el usuario debe repetirlo. A continuaci\u00f3n, se repite la secuencia anterior y se a\u00f1ade un color y el jugador la repite. As\u00ed infinitamente hasta que el usuario falle la secuencia.<\/p>\n\n\n\n<p><strong>Objetivo<\/strong>: llegar al m\u00e1ximo n\u00famero de rondas (longitud de la secuencia) posible.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"video-container\"><iframe loading=\"lazy\" title=\"Memory Game - RetroBoy Juegos\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/gV9ThGbvSNk?feature=oembed&#038;wmode=opaque\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-5&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-5-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-5\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">\ud83c\udfb5 <em>Dance Revolution<\/em><\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-5\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-5-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p>El juego del Dance Revolution intenta simular el famoso juego arcade Dance Dance Revolution (DDR). El DDR, realmente, es una plataforma de sensores donde la persona debe pisar (f\u00edsicamente) las flechas del suelo cuando se muestran en la pantalla del arcade. Al llevarlo a una consola, se ha implementado de forma que se deban dar a los botones correspondientes (cruceta, A o B) cuando toquen la l\u00ednea blanca que se encuentra en la parte inferior de la pantalla. De la misma forma que el DDR, s\u00f3lo suena la m\u00fasica si se acierta el bot\u00f3n cuando toca la l\u00ednea y, si se tienen muchos aciertos de seguido, se entra en el bonus combo, lo cual permite ganar m\u00e1s puntos por acierto (si se falla se pierde este bonus).<\/p>\n\n\n\n<p><strong>Objetivo<\/strong>: obtener el mayor n\u00famero de puntos.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"video-container\"><iframe loading=\"lazy\" title=\"Dance Revolution - RetroBoy Juegos\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/_BXdHOCxQTM?feature=oembed&#038;wmode=opaque\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-6&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-6-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-6\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">\u2694\ufe0f <em>Pok\u00e9mon Battle Simulator<\/em><\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-6\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-6-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p>El \u00faltimo juego implementado est\u00e1 inspirado en una de las sagas m\u00e1s conocidas del mundo: Pok\u00e9mon. En este juego, se simula una batalla Pok\u00e9mon donde el usuario controla las acciones de un Torchic enfrent\u00e1ndose a un Zigzagoon. La \u00fanica acci\u00f3n posible es atacar al Pok\u00e9mon rival con un ataque de los 4 posibles que conoce Torchic (de la misma forma que en los juegos de la saga principal). Cada ataque (seleccionado de forma similar a la implementaci\u00f3n del men\u00fa de la consola) tiene una potencia distinta y, en cada turno, Torchic realiza el ataque seleccionado, mientras que el Zigzagoon ejecuta 1 de sus 4 posibles ataques seleccionado de forma aleatoria.<\/p>\n\n\n\n<p><strong>Objetivo<\/strong>: ganar la batalla.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"video-container\"><iframe loading=\"lazy\" title=\"Pok\u00e9mon Battle - RetroBoy Juegos\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/3ESn4AFpnmY?feature=oembed&#038;wmode=opaque\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 Prototipo<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83d\udd25 Soldaduras<\/h4>\n\n\n\n<p>Para crear la consola hemos soldado todos los componentes e interruptores en dos PCBs perforadas:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"945\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-7-1024x945.png\" alt=\"\" class=\"wp-image-10150\" style=\"aspect-ratio:1.0836366610772565;width:346px;height:auto\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-7-1024x945.png 1024w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-7-300x277.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-7-768x708.png 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-7-1536x1417.png 1536w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-7.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p>Los botones e interruptores se han soldado directamente en la PCB, pero para conectar los m\u00f3dulos y el microcontrolador a la placa se han soldado distintos headers (macho-hembra) para poder conectar y desconectar estos componentes con facilidad.<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"720\" style=\"aspect-ratio: 1280 \/ 720;\" width=\"1280\" controls src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/video_soldando_header.mp4\"><\/video><\/figure>\n\n\n\n<p>Una vez soldados los headers, tocaba soldar los botones y sus respectivas conexiones. Para las conexiones se utiliza un cable blanco r\u00edgido, pero tambi\u00e9n se construyeron dos buses en la PCB que simulaban el bus + y bus &#8211; de una protoboard.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"591\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-12-1024x591.png\" alt=\"\" class=\"wp-image-10156\" style=\"aspect-ratio:1.733145275035261;width:295px;height:auto\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-12-1024x591.png 1024w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-12-300x173.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-12-768x443.png 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-12-1536x886.png 1536w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-12.png 2000w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"552\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-13-1024x552.png\" alt=\"\" class=\"wp-image-10157\" style=\"width:298px;height:auto\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-13-1024x552.png 1024w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-13-300x162.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-13-768x414.png 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-13-1536x828.png 1536w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-13.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p>Para estos buses se pelo un cable y se cubrio de esta\u00f1o, de tal manera que cubrieran una serie de agujeros en la placa donde se har\u00edan las conexiones a estos buses + y -. Adem\u00e1s, a estos dos buses se le soldaron los extremos + y &#8211; del portapilas AA, lo que permite que la consola sea port\u00e1til:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"762\" height=\"530\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-14.png\" alt=\"\" class=\"wp-image-10158\" style=\"width:520px;height:auto\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-14.png 762w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-14-300x209.png 300w\" sizes=\"auto, (max-width: 762px) 100vw, 762px\" \/><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\">\ud83e\uddbe Exoesqueleto<\/h4>\n\n\n\n<p>Una vez soldado el proyecto, se procedi\u00f3 al dise\u00f1o y fabricaci\u00f3n de una carcasa para el prototipo utilizando los siguientes materiales:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cart\u00f3n Pluma<\/li>\n\n\n\n<li>Cartulina Negra<\/li>\n\n\n\n<li>Cola Blanca<\/li>\n\n\n\n<li>Silicona<\/li>\n<\/ul>\n\n\n\n<p>Para su construcci\u00f3n, se utilizaron herramientas de corte como tijeras y c\u00fater, as\u00ed como instrumentos de medici\u00f3n (regla y l\u00e1piz) para asegurar la precisi\u00f3n en las dimensiones.<\/p>\n\n\n\n<p>La carcasa resultante permite guardar el sistema electr\u00f3nico de forma ordenada y segura. Adem\u00e1s, se realizaron aberturas espec\u00edficas para los distintos componentes, permitiendo su uso una vez las placas de soldadura est\u00e9n totalmente cubiertas por la infraestructura. Estas aberturas incluyen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ranura de inserci\u00f3n de cartuchos<\/li>\n\n\n\n<li>Puerto USB-C de la placa ESP32<\/li>\n\n\n\n<li>Compartimento de las pilas<\/li>\n\n\n\n<li>Pantalla<\/li>\n\n\n\n<li>Botones<\/li>\n<\/ul>\n\n\n\n<p>Internamente, se a\u00f1adieron peque\u00f1as secciones haciendo uso del cart\u00f3n pluma y la silicona, para fijar los componentes y evitar su movimiento dentro de la caja.<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"540\" style=\"aspect-ratio: 960 \/ 540;\" width=\"960\" controls src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/timelapse_meh.mp4\"><\/video><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Para la ranura de los cartuchos, se cre\u00f3 un compartimento a base de cartulina negra y fijado en el header del sensor para evitar su movimiento. Este compartimento se dise\u00f1\u00f3 de forma que ayuda a fijar el interruptor al lado del sensor, evitando que se mueva y permitiendo que, al insertar el cartucho, este active el interruptor. La construcci\u00f3n de este compartimento a medida tambi\u00e9n permite que los cartuchos no se muevan una vez insertados, permitiendo mover la consola libremente sin peligro a que se salga el juego.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"910\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG_7015-1024x910.jpg\" alt=\"\" class=\"wp-image-10082\" style=\"aspect-ratio:1.1253139826960648;width:393px;height:auto\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG_7015-1024x910.jpg 1024w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG_7015-300x267.jpg 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG_7015-768x683.jpg 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG_7015-1536x1366.jpg 1536w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG_7015-2048x1821.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p>Para los cartuchos, se ha utilizado arcilla de secado al aire para crear la forma del cartucho (la cual permite activar el interruptor) y se incrusta sobre ella el chip id del lector RFID para que, al colocarlo, el lector pueda leer el id. A estos chips se les ha quitado la anilla met\u00e1lica con la que vienen haciendo uso de unos alicates. Posteriormente, la arcilla se pint\u00f3 usando pintura azul acr\u00edlica y una m\u00e1s clara para dibujar un s\u00edmbolo representativo del juego que activan.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"920\" height=\"1024\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG_7034-920x1024.jpg\" alt=\"\" class=\"wp-image-10084\" style=\"aspect-ratio:0.8984423558661218;width:394px;height:auto\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG_7034-920x1024.jpg 920w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG_7034-270x300.jpg 270w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG_7034-768x854.jpg 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG_7034-1381x1536.jpg 1381w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG_7034-1841x2048.jpg 1841w\" sizes=\"auto, (max-width: 920px) 100vw, 920px\" \/><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p>Por \u00faltimo, los botones se han creado utilizando la misma arcilla y conect\u00e1ndolos al pulsador mediante un tubo de pl\u00e1stico.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/buttons-1024x768.jpg\" alt=\"\" class=\"wp-image-10087\" style=\"aspect-ratio:1.333361285814116;width:712px;height:auto\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/buttons-1024x768.jpg 1024w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/buttons-300x225.jpg 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/buttons-768x576.jpg 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/buttons-1536x1152.jpg 1536w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/buttons-2048x1536.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Quedando el producto final de la siguiente forma:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG_7039-1024x768.jpg\" alt=\"\" class=\"wp-image-10088\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG_7039-1024x768.jpg 1024w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG_7039-300x225.jpg 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG_7039-768x576.jpg 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG_7039-1536x1152.jpg 1536w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG_7039-2048x1536.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Retro Boy es una consola port\u00e1til inspirada en las Game&amp;Watch y Game Boy Advance, creada para recuperar la esencia de las consolas antiguas y los juegos retro que generaron tan buenos recuerdos en sus&#46;&#46;&#46;<\/p>\n","protected":false},"author":335,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-9976","post","type-post","status-publish","format-standard","hentry","category-proyectos"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Retro Boy \u2014 La consola perfecta para los nost\u00e1lgicos - Proyectos con Arduino.<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/retro-boy-la-consola-perfecta-para-los-nostalgicos\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Retro Boy \u2014 La consola perfecta para los nost\u00e1lgicos - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"Retro Boy es una consola port\u00e1til inspirada en las Game&amp;Watch y Game Boy Advance, creada para recuperar la esencia de las consolas antiguas y los juegos retro que generaron tan buenos recuerdos en sus&#046;&#046;&#046;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/retro-boy-la-consola-perfecta-para-los-nostalgicos\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-05T22:34:15+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-05T22:34:20+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-6.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1348\" \/>\n\t<meta property=\"og:image:height\" content=\"635\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"seytrmo2526g08\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"seytrmo2526g08\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/retro-boy-la-consola-perfecta-para-los-nostalgicos\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/retro-boy-la-consola-perfecta-para-los-nostalgicos\\\/\"},\"author\":{\"name\":\"seytrmo2526g08\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/fa4809585f02bfc686ac9995dfe494ba\"},\"headline\":\"Retro Boy \u2014 La consola perfecta para los nost\u00e1lgicos\",\"datePublished\":\"2026-05-05T22:34:15+00:00\",\"dateModified\":\"2026-05-05T22:34:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/retro-boy-la-consola-perfecta-para-los-nostalgicos\\\/\"},\"wordCount\":3849,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/retro-boy-la-consola-perfecta-para-los-nostalgicos\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2026\\\/05\\\/image-6-1024x482.png\",\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/retro-boy-la-consola-perfecta-para-los-nostalgicos\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/retro-boy-la-consola-perfecta-para-los-nostalgicos\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/retro-boy-la-consola-perfecta-para-los-nostalgicos\\\/\",\"name\":\"Retro Boy \u2014 La consola perfecta para los nost\u00e1lgicos - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/retro-boy-la-consola-perfecta-para-los-nostalgicos\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/retro-boy-la-consola-perfecta-para-los-nostalgicos\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2026\\\/05\\\/image-6-1024x482.png\",\"datePublished\":\"2026-05-05T22:34:15+00:00\",\"dateModified\":\"2026-05-05T22:34:20+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/retro-boy-la-consola-perfecta-para-los-nostalgicos\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/retro-boy-la-consola-perfecta-para-los-nostalgicos\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/retro-boy-la-consola-perfecta-para-los-nostalgicos\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2026\\\/05\\\/image-6.png\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2026\\\/05\\\/image-6.png\",\"width\":1348,\"height\":635},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/retro-boy-la-consola-perfecta-para-los-nostalgicos\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Retro Boy \u2014 La consola perfecta para los nost\u00e1lgicos\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\",\"name\":\"Proyectos con Arduino.\",\"description\":\"Blog de proyectos de Arduino de alumnos de la URJC\",\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\",\"name\":\"Universidad Rey Juan Carlos\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/logourjc-1.jpg\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/logourjc-1.jpg\",\"width\":745,\"height\":288,\"caption\":\"Universidad Rey Juan Carlos\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/fa4809585f02bfc686ac9995dfe494ba\",\"name\":\"seytrmo2526g08\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b9ad1248a090b7270e620a122c6a90c3e33c03f9e828604abbc0353a29ba69e7?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b9ad1248a090b7270e620a122c6a90c3e33c03f9e828604abbc0353a29ba69e7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b9ad1248a090b7270e620a122c6a90c3e33c03f9e828604abbc0353a29ba69e7?s=96&d=mm&r=g\",\"caption\":\"seytrmo2526g08\"},\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/author\\\/seytrmo2526g08\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Retro Boy \u2014 La consola perfecta para los nost\u00e1lgicos - Proyectos con Arduino.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blogs.etsii.urjc.es\/dseytr\/retro-boy-la-consola-perfecta-para-los-nostalgicos\/","og_locale":"es_ES","og_type":"article","og_title":"Retro Boy \u2014 La consola perfecta para los nost\u00e1lgicos - Proyectos con Arduino.","og_description":"Retro Boy es una consola port\u00e1til inspirada en las Game&amp;Watch y Game Boy Advance, creada para recuperar la esencia de las consolas antiguas y los juegos retro que generaron tan buenos recuerdos en sus&#46;&#46;&#46;","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/retro-boy-la-consola-perfecta-para-los-nostalgicos\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2026-05-05T22:34:15+00:00","article_modified_time":"2026-05-05T22:34:20+00:00","og_image":[{"width":1348,"height":635,"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-6.png","type":"image\/png"}],"author":"seytrmo2526g08","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"seytrmo2526g08","Tiempo de lectura":"20 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/retro-boy-la-consola-perfecta-para-los-nostalgicos\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/retro-boy-la-consola-perfecta-para-los-nostalgicos\/"},"author":{"name":"seytrmo2526g08","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/fa4809585f02bfc686ac9995dfe494ba"},"headline":"Retro Boy \u2014 La consola perfecta para los nost\u00e1lgicos","datePublished":"2026-05-05T22:34:15+00:00","dateModified":"2026-05-05T22:34:20+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/retro-boy-la-consola-perfecta-para-los-nostalgicos\/"},"wordCount":3849,"commentCount":0,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/retro-boy-la-consola-perfecta-para-los-nostalgicos\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-6-1024x482.png","articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/retro-boy-la-consola-perfecta-para-los-nostalgicos\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/retro-boy-la-consola-perfecta-para-los-nostalgicos\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/retro-boy-la-consola-perfecta-para-los-nostalgicos\/","name":"Retro Boy \u2014 La consola perfecta para los nost\u00e1lgicos - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/retro-boy-la-consola-perfecta-para-los-nostalgicos\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/retro-boy-la-consola-perfecta-para-los-nostalgicos\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-6-1024x482.png","datePublished":"2026-05-05T22:34:15+00:00","dateModified":"2026-05-05T22:34:20+00:00","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/retro-boy-la-consola-perfecta-para-los-nostalgicos\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/retro-boy-la-consola-perfecta-para-los-nostalgicos\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/retro-boy-la-consola-perfecta-para-los-nostalgicos\/#primaryimage","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-6.png","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-6.png","width":1348,"height":635},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/retro-boy-la-consola-perfecta-para-los-nostalgicos\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"Retro Boy \u2014 La consola perfecta para los nost\u00e1lgicos"}]},{"@type":"WebSite","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/","name":"Proyectos con Arduino.","description":"Blog de proyectos de Arduino de alumnos de la URJC","publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization","name":"Universidad Rey Juan Carlos","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/logo\/image\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/logourjc-1.jpg","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/logourjc-1.jpg","width":745,"height":288,"caption":"Universidad Rey Juan Carlos"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/fa4809585f02bfc686ac9995dfe494ba","name":"seytrmo2526g08","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/b9ad1248a090b7270e620a122c6a90c3e33c03f9e828604abbc0353a29ba69e7?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/b9ad1248a090b7270e620a122c6a90c3e33c03f9e828604abbc0353a29ba69e7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b9ad1248a090b7270e620a122c6a90c3e33c03f9e828604abbc0353a29ba69e7?s=96&d=mm&r=g","caption":"seytrmo2526g08"},"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/author\/seytrmo2526g08\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/9976","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/users\/335"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=9976"}],"version-history":[{"count":37,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/9976\/revisions"}],"predecessor-version":[{"id":10307,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/9976\/revisions\/10307"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=9976"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=9976"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=9976"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}