6 de julio de 2026 · 10 min
Consola de juegos con Arduino: una OLED, dos botones y un runner adictivo
Armá una mini consola portátil con un Nano y una pantalla OLED, con juego completo incluido para copiar y jugar hoy mismo. El proyecto que más engancha a los que 'no les interesa la electrónica'.
Si querés que alguien se enganche con la electrónica —un hijo, un alumno, vos mismo— no hay proyecto más efectivo que este: una consola que se juega. Nada convence más que apretar un botón que vos soldaste y ver saltar un personaje que vos programaste. Y el hardware es mínimo: un Nano, una OLED y dos pulsadores.
Lista de compra
| Componente | Cantidad | Para qué |
|---|---|---|
| Arduino Nano | 1 | La consola |
| OLED SSD1306 128x64 I2C | 1 | La pantalla |
| Pulsadores | 2 | Saltar / reiniciar |
| Buzzer activo 5V | 1 | Sonido (opcional) |
| Protoboard | 1 | Montaje |
| Cables dupont | 1 juego | Conexionado |
Conexionado
- OLED: SDA → A4 · SCL → A5 · VCC → 5V · GND → GND
- Botón A (saltar): pin 2 → botón → GND
- Botón B (reiniciar): pin 3 → botón → GND
- Buzzer: (+) → pin 8 · (−) → GND
El juego: “Cablecito Runner”
Un clásico runner: tu personaje corre y tenés que saltar los obstáculos. La velocidad sube de a poco, el puntaje también, y el récord queda guardado mientras haya alimentación. Librerías: Adafruit SSD1306 y Adafruit GFX.
#include <Wire.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 oled(128, 64, &Wire, -1);
const int BTN_SALTO = 2, BTN_RESET = 3, BUZZER = 8;
const int PISO = 54;
float jugadorY = PISO, velY = 0;
int obstX = 128, obstAlto = 12;
float velocidad = 3;
int puntos = 0, record = 0;
bool jugando = true;
void bip(int ms) { digitalWrite(BUZZER, HIGH); delay(ms); digitalWrite(BUZZER, LOW); }
void reiniciar() {
jugadorY = PISO; velY = 0;
obstX = 128; velocidad = 3; puntos = 0;
jugando = true;
}
void setup() {
pinMode(BTN_SALTO, INPUT_PULLUP);
pinMode(BTN_RESET, INPUT_PULLUP);
pinMode(BUZZER, OUTPUT);
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
oled.setTextColor(SSD1306_WHITE);
}
void loop() {
if (jugando) {
// salto (solo desde el piso)
if (digitalRead(BTN_SALTO) == LOW && jugadorY >= PISO) {
velY = -6.2;
bip(8);
}
// fisica
velY += 0.45;
jugadorY += velY;
if (jugadorY > PISO) { jugadorY = PISO; velY = 0; }
// obstaculo
obstX -= velocidad;
if (obstX < -8) {
obstX = 128 + (puntos * 7) % 40; // separacion variable
obstAlto = 8 + (puntos * 5) % 14; // altura variable
puntos++;
if (velocidad < 7) velocidad += 0.15;
}
// colision (cajas de 8x12 jugador vs 8xobstAlto obstaculo)
bool choca = (obstX < 18) && (obstX + 8 > 10) &&
(jugadorY + 12 > 64 - obstAlto);
if (choca) {
jugando = false;
if (puntos > record) record = puntos;
bip(300);
}
} else if (digitalRead(BTN_RESET) == LOW) {
reiniciar();
}
// dibujo
oled.clearDisplay();
oled.drawLine(0, 63, 127, 63, SSD1306_WHITE); // piso
oled.fillRect(10, (int)jugadorY, 8, 12, SSD1306_WHITE); // jugador
oled.fillRect(obstX, 64 - obstAlto, 8, obstAlto, SSD1306_WHITE);
oled.setTextSize(1);
oled.setCursor(70, 0);
oled.print(puntos);
oled.print(" R:");
oled.print(record);
if (!jugando) {
oled.setTextSize(2);
oled.setCursor(16, 20);
oled.print("PERDISTE");
}
oled.display();
delay(30);
}
Cargalo y listo: botón A salta, botón B reinicia después de perder. La dificultad sube sola.
Qué se aprende sin darse cuenta
Este proyecto es un caballo de Troya educativo. Adentro del jueguito hay: física simulada (gravedad y velocidad en velY += 0.45), detección de colisiones (el corazón de todo videojuego), máquina de estados (jugando / perdido) y generación pseudoaleatoria con módulo. Los mismos conceptos de cualquier motor de juegos, en 90 líneas.
Errores comunes
- Pantalla en negro: dirección I2C
0x3Cvs0x3D. El clásico de todas las OLED. - El salto responde “a veces”: botón cableado sin GND común o sin
INPUT_PULLUP. El pin flotante hace magia negra. - Parpadeo o lentitud: si agregaste dibujos, recordá que el Nano redibuja toda la pantalla cada ciclo. Menos píxeles por cuadro = más fluido.
- Se resetea al sonar el buzzer: buzzer pasivo de baja impedancia directo al pin. El activo que linkeamos consume poco; si usás otro, ponele una resistencia de 100 Ω en serie.
Para llevarlo más lejos
- Caja portátil: portapilas + gabinete impreso y ya es consola de bolsillo regalable.
- Reemplazá los botones por el joystick analógico y programá un esquiva-meteoritos con movimiento en dos ejes.
- Récord permanente: guardalo en la EEPROM del Nano para que sobreviva al apagado (dos líneas con
EEPROM.put).
El kit consola
Nano, OLED, pulsadores, buzzer y protoboard: todo en electronicabyp.com.ar con envío a toda Argentina. Es EL kit de arranque para chicos — pedilo armado por WhatsApp.
¿Necesitás los componentes de esta guía? Los encontrás en electronicabyp.com.ar — hacemos envíos a toda Argentina. Para cotizaciones por cantidad, escribinos por WhatsApp.