26 de Febrero de 2021

Iván nos escribió para contarnos que había construido un Pong para Arduino Uno, al que ha llamado cariñosamente PongDuino. Nos envió un vídeo del prototipo y unos días después toda información y enlaces. Lo hemos editado con su colaboración para publicarlo en forma de breve tutorial. Resulta tan entretenido como didáctico, un estupendo proyecto para cualquier tarde aburrida.

PongDuino: Pong para Arduino

Por Iván Cerra

Este proyecto consiste en recrear el arcade Pong de Atari (1972) para el microcontrolador de 8 bits Arduino. Se ha intentado respetar la recreativa original en todo momento, tanto los sonidos como los gráficos y la dinámica del juego.

Materiales

Esta es la lista de componentes necesarios, junto a un valor aproximado de su precio y una breve descripción de su utilidad. Como se puede observar este proyecto es de muy bajo coste (~15 euros) dependiendo de dónde se compren los componentes. Se pueden encontrar en tiendas de electrónica y también en Amazon y AliExpress.

  • Arduino Uno – Placa microcontroladora encargada del funcionamiento del juego. (5-10€)
  • Protoboard – Placa de prototipado de conexiones simples sin soldadura. (2-5€)
  • Cables – Cables macho-macho, macho-hembra, hembra- hembra para conexiones sin soldadura. (3€)
  • Potenciómetro Lineal (10 KΩ) – Resistencia variable que se ajusta con un dial. Limitan el paso de corriente eléctrica. Tipo lineal para que el control se comporte uniformemente en todo su espectro. (1€)
  • Botón – Micro interruptor, permite el paso de corriente eléctrica. Circuito cerrado, circuito abierto. (1€)
  • Resistencia (1 KΩ) – Controla el paso de corriente eléctrica para evitar cortocircuitos. En este caso va unida al botón. (0,50€)
  • Buzzer Pasivo – Altavoz que permite convertir una señal electriza en una onda de sonido. (0,50€)
  • TFT SPI 1.8" AZDelivery – Pantalla TFT de 1,8" con controlador ST7735 y resolución 128x160 píxeles. (4-8€ en Amazon)

Conexiones de los componentes

PongDuino

Una imagen vale más que mil palabras: el diseño y conectividad de los componentes sobre la protoboard [en el PDF hay otra equivalente para la versión para dos jugadores]. Hay que tener especial cuidado con la conexión en la protoboard ya que si no se conoce su conectividad se puede provocar fácilmente un cortocircuito (En especial cuidado con la conexión del botón). [En las protoboards las líneas de alimentación están conectadas en horizontal, normalmente marcadas con líneas rojas y azules, + y - mientras que las de conexión de componentes están en columnas marcadas con letras: A-B-C… Eso quiere decir que A-B-C-D-E está conectadas.]

Programación

Tanto el código como la electrónica se han diseñado con fines didácticos; no se ha buscado la eficiencia. Simplemente se ha intentado hacer algo fácil de entender. (Siempre he pensado que «el mejor maestro no es el que más sabe, sino el que mejor enseña lo que sabe.»)

Antes de descargar el código de PongDuino de Github hay que tener instalado el entorno de desarrollo (IDE) de Arduino. Es software libre de muy sencilla utilización.

Una vez descargado el IDE de Arduino hay que descargar las librerías necesarias para la controladora de TFT. El PongDuino utiliza un ST7735 (si se usa una pantalla TFT distinta a la de la SPI 1.8” AZDelivery habrá que descargar otras librerías y realizar otras conexiones). Para la TFT SPI 1.8" las librerías necesarias han sido:

  • Adafruit ST7735 and ST7789 Version 1.6.0
  • Adafruit GFX Version 1.10.5
  • Adafruit BusIO Version 1.7.2

El código del juego está creado tanto para un jugador como para dos jugadores. Si no se quiere añadir un segundo potenciómetro y botón se puede simplemente ignorar esa opción; el código seguirá funcionando. Adaptarlo a otras resoluciones distintas de TFT es bastante sencillo.

En la zona de macros hay una lista de interruptores DIP (switches) por si se quieren modificar parámetros como la velocidad de juego, la IA de la máquina o el número de puntos por partido. Quienes vengan de los 8-bits y los pokes verán que esto es más fácil aquí. En aquel entonces hacer pokes era la forma de cambiar estos parámetros ;-)

IA de la máquina

La «inteligencia artificial» (IA) de PongDuino es muy simple: la pala se dirige siempre hacia la pelota, pero no puede exceder una velocidad y conforme avanza el partido se cansa y ya no llega con tanta rapidez. Así que para ganar hay que hacer peloteos largos… pero cuanto mas largo es el peloteo, más rápida irá la pelota.

Como sugerencias para programar nuevas IAs:

  • Que la pala de la máquina sólo se mueva cuando la pelota cruza la red.
  • Que la máquina juegue en función de nuestra posición.
  • Un largo etcétera… Reservado a la creatividad de cada cual.

Pala de 8 segmentos

PongDuino - Pala de 8 segmentosUna de las características de este juego y que permitió una gran jugabilidad en su momento fue incorporar un sistema de rebote de la pelota en función del punto que golpeaba en la pala. Una genialidad de Allan Alcorn. Eran los comienzos de los videojuegos y ante la falta de potencia hardware y recursos gráficos había que recurrir a ideas como esta.

En este diagrama se puede ver el comportamiento. La pala se dividía en 8 segmentos y cada zona provocaba un ángulo de rebote.

Dígitos de puntuación

PongDuino - Dígitos de puntuación

En una zona del código se realiza la definición de los dígitos de puntuación del juego, os pongo un esquema de su forma.

Cabinet

PongDuino - Cabinet

Lo ideal para terminar este proyecto sería crear un cabinet para alojar los componentes y darle un aspecto profesional. Hoy en día con las impresoras 3D y los vinilos es bastante sencillo. Yo me haré una de marquetería a ver que tal queda.

Próximo proyecto

Crear PongDuino ha sido un proyecto breve pero muy divertido. Esto de programar casi como en la vieja escuela tiene mucho encanto. El próximo proyecto puede ser un Asteroids, un BreakOut, un Tetris… El mayor problema son las restricciones de memoria para hacer cosas más serias, pero es algo que se puede resolver con imaginación. A disfrutarlo… ¡es tan divertido crearlo como jugarlo!

Relacionado:

Compartir en Flipboard Publicar / Tuitear