LED Racing & Pong (Arduino)

Dos juegos arcade interactivos para 2 jugadores montados sobre una tira de LEDs direccionables WS2812B (NeoPixel) y controlados por un Arduino Nano, con efectos de sonido con buzzer y selección mediante menú integrado.

Dificultad: fácil-media Electrónica + Arcade Arduino Nano FastLED
Jugadores
2
MCU
Arduino Nano (ATmega328P)
LEDs
50 a 150 (WS2812B)
Rev
1.0

Demostración en video

Cómo funciona

El proyecto convierte una tira LED lineal en una consola retro con dos juegos multijugador competitivos:

1. Carreras LED (LED Racing): Cada jugador controla un "auto" representado por un grupo de 3 LEDs (Jugador 1 en Verde, Jugador 2 en Rojo). Al iniciar suena una cuenta regresiva (3, 2, 1, ¡GO!). Cada vez que presionas tu botón, tu auto avanza 1 posición hacia la meta. Cuando recorre toda la tira, completa una vuelta e inicia la siguiente; el marcador de vueltas se ilumina en los extremos de la pista. ¡El primero en completar 3 vueltas gana con una animación y melodía de victoria!

2. Pong / Tenis LED: La pelota (un LED blanco de alta velocidad con estela) va rebotando de un extremo al otro de la tira. Cada jugador tiene una zona de recepción en su extremo (5 LEDs de su color). Debes presionar tu botón exactamente cuando la pelota cruce tu zona: si aciertas, la pelota rebota hacia tu oponente y su velocidad se incrementa un 8%. Si presionas a destiempo o se te pasa, ¡punto para el rival! El primero en llegar a 5 puntos gana el partido.

Menú de selección: Al encender el Arduino, los primeros LEDs parpadean en verde y los últimos en rojo. Presiona el botón verde para Carreras o el botón rojo para Pong. En cualquier momento puedes mantener presionados ambos botones durante 2 segundos para regresar al menú principal.

Ver diagrama de conexión → Descargar código (.ino) Guía PDF del proyecto ☕ Invítame un café

Lista de materiales

Cant.ComponenteNotas
1Arduino Nano (o Uno)ATmega328P con cable USB
1Tira LED WS2812B (NeoPixel)50 a 150 LEDs (ajustable en código)
2Botones pulsadores momentáneosP1 (Verde en Pin D2) y P2 (Rojo en Pin D3)
1Resistencia 470Ω (o 330Ω)En serie en la línea de datos (DIN) para protección
1Buzzer pasivo 5VPin D8 hacia GND para efectos de sonido
1Fuente de alimentación 5V 2A+Para alimentar la tira LED de forma externa
1Capacitor 1000µF 10V (opcional)Entre +5V y GND de la tira para estabilizar voltaje
Cables de conexión / ProtoboardPara interconectar tierras y señales

Diagrama general de conexiones

Conexiones eléctricas entre el Arduino Nano, los botones con pull-up interno, el buzzer y la tira LED WS2812B. Es indispensable unir todas las tierras (GND) para tener una referencia eléctrica común.

FUENTE 5V (2A+) Alimentación de tira LED BOTÓN 1 (P1 - VERDE) Pin D2 → GND BOTÓN 2 (P2 - ROJO) Pin D3 → GND BUZZER PASIVO 5V Pin D8 (+) → GND (-) ARDUINO NANO ATmega328P TIRA LED WS2812B 50 a 150 LEDs NeoPixel +5V (Potencia) DIN (Datos) GND (Tierra) D2 (P1) D3 (P2) D8 (Buzzer) 470Ω +5V DC
Pin ArduinoConexiónTipo / Notas
Pin D2Botón Jugador 1 (Verde)Entrada digital con INPUT_PULLUP hacia GND
Pin D3Botón Jugador 2 (Rojo)Entrada digital con INPUT_PULLUP hacia GND
Pin D6Línea de datos (DIN) tira WS2812BSalida digital (con resistencia 470Ω en serie)
Pin D8Terminal (+) Buzzer PasivoSalida digital PWM / tono hacia GND
GNDTierra común de todo el circuitoUnir GND Arduino + GND Fuente 5V + GND Tira + Botones
5V ExternaLínea de alimentación +5V tira LEDAlimentar directo desde fuente 5V 2A+ (no del Arduino)
Diagrama en protoboard para armar: Puedes consultar la ilustración realista en protoboard o el plano esquemático independiente:

Ver imagen en protoboard (PNG) → Ver plano esquemático separado →

Código (Arduino / FastLED)

Requiere instalar la librería FastLED en el IDE de Arduino (Herramientas → Administrar bibliotecas). El código permite configurar la cantidad de LEDs de tu tira modificando la constante NUM_LEDS.

led_racing_games.ino (Código completo)
// --- Configuración básica de Hardware ---
#include <FastLED.h>

#define NUM_LEDS     50        // Cambia según la cantidad de LEDs de tu tira
#define LED_PIN      6         // Pin digital conectado a DIN (con resistencia 470Ω)
#define COLOR_ORDER  GRB       // Orden de color típico en tiras WS2812B
#define LED_TYPE     WS2812B
#define BRIGHTNESS   80        // Brillo general (0-255)

#define BTN_P1       2         // Botón Jugador 1 (Verde - Pin D2 a GND)
#define BTN_P2       3         // Botón Jugador 2 (Rojo - Pin D3 a GND)
#define BUZZER_PIN   8         // Buzzer pasivo (Pin D8 a GND)

#define MAX_LAPS     3         // Vueltas para ganar la carrera
#define CAR_SIZE     3         // LEDs de largo por cada carro

Notas de montaje y alimentación

  1. Alimentación independiente para los LEDs: 50 LEDs a brillo alto pueden consumir más de 2 Amperios. Nunca alimentes más de 10-15 LEDs directamente del pin 5V del Arduino, ya que quemarías el regulador interno. Usa una fuente externa de 5V 2A+.
  2. Tierra común obligatoria (GND): Conecta el GND de la fuente externa de 5V con el pin GND del Arduino. Si no comparten tierra, la señal de datos tendrá ruido y los LEDs parpadearán de forma errática.
  3. Resistencia en la línea de datos: Coloca una resistencia de 470Ω entre el Pin D6 del Arduino y la entrada DIN del primer LED para proteger el chip contra picos de voltaje.
  4. Botones con Pull-Up interno: Los botones se conectan directamente entre el pin digital y GND, sin necesidad de resistencias externas (se activan por software con INPUT_PULLUP).

Recursos y Enlaces Relacionados

Documentación técnica, librerías y guías para complementar el armado del proyecto:

☕ Apoya este proyecto (Invítame un café)

¿Te gustó este juego de Carreras y Pong LED o estás armando uno para jugar con amigos? Si aprecias el trabajo de programación, diseño del circuito y código libre que comparto, ¡un café es una excelente forma de respaldar el canal para seguir creando más proyectos!

$20 MXN $50 MXN $100 MXN Monto libre
☕ Invitar un café (Apoyar) →