Construye un juego LCD "Ninja Dollar" con Arduino UNO
Componentes y suministros
| Componente | Cantidad | Notas |
|---|---|---|
| Arduino UNO | 1 | |
| LCD estándar Adafruit 16x2 Blanco sobre Azul | 1 | |
| Protoboard (genérica) | 2 | Usé dos por espacio, una basta |
| Potenciómetro monoturno 10k ohm | 1 | |
| LED (genérico) | 2 | |
| Resistencia 1k ohm | 4 | |
| Pulsador 12mm SparkFun | 2 | |
| Zumbador RobotGeek | 1 | |
| Cables jumper (genéricos) | 1 |
Herramientas necesarias
- Soldador (para soldar LCD)
Sobre este proyecto
Juego LCD simple inspirado en el juego del dinosaurio de Chrome, con más cambios. El guerrero dólar se mueve constantemente, salta obstáculos y recoge "estrellas" (puntos). Salta obstáculo = 1 punto; atrapa estrella = 5 puntos. Puede disparar y eliminar obstáculos. LEDs indican salto/disparo. Cada 10, 20, 30 puntos aumenta la velocidad. A 50 puntos ganas. Chocas = pierdes. Límites modificables en código. Incluye zumbador pasivo con sonidos para salto, disparo, victoria y derrota. Mi primer proyecto aquí, ¡espero que guste!
El video
(Ver video en proyecto original)
Conexiones
El módulo LCD tiene header macho de 16 pines en la parte inferior. Conéctalo a la protoboard como en la imagen. Pines (izquierda a derecha):
- GND - tierra alimentación
- VCC - alimentación positiva
- V0 - ajuste contraste
- RS - selección registro
- R/W - selección lectura/escritura
- E - señal enable
- D0-D3 - bits de datos 0-3 (no usados)
- D4-D7 - bits de datos 4-7
- A - backlight LED positivo
- K - backlight LED negativo
Conecta 5V Arduino a fila roja superior protoboard; GND a fila azul.
- VSS → GND
- VDD → 5V
- V0 → pin central potenciómetro
- RS → Arduino pin 12
- RW → GND
- E → Arduino pin 11
- D4 → pin 5
- D5 → pin 4
- D6 → pin 3
- D7 → pin 2
- A → 5V
- K → GND
Pines restantes potenciómetro a 5V y GND.
Zumbador piezo: si 3 pines, S → pin 7, - → GND, otro → 5V. Si 2 pines, uno a GND y otro a pin 7.
Pulsadores: primero (salto) → pin 1; segundo (disparo) → pin 6. LEDs controlados solo por botones: ánodo al pin del botón conectado a Arduino, cátodo a GND.
Código
dollar_warrior (Arduino)
#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
const int buttonPin1 = 1;
const int buttonPin2 = 6;
const int buzzer = 7;
unsigned long pts = 0;
bool buttonState1 = 0;
bool buttonState2 = 0;
int randomNums[6];
int randomNum = 0;
int randomNums1[3];
int randomNum1 = 0;
unsigned int myDelay = 500;
bool temp = 0;
int tempI[16];
bool temp1 = 0;
int tempI1[3];
int button2IsPressed = 0;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
lcd.begin(16, 2);
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buzzer, OUTPUT);
lcd.setCursor(4, 0);
lcd.print("THE GAME");
lcd.setCursor(2, 1);
lcd.print("STARTS IN ");
lcd.print("5");
delay(1000);
lcd.setCursor(12, 1);
lcd.print("4");
delay(1000);
lcd.setCursor(12, 1);
lcd.print("3");
delay(1000);
lcd.setCursor(12, 1);
lcd.print("2");
delay(1000);
lcd.setCursor(12, 1);
lcd.print("1");
delay(1000);
lcd.clear();
}
void loop() {
here:
randomNum = random(5);
for (int i = 0; i < randomNum; ++i) randomNums[i] = random(16);
randomNum1 = random(3);
for (int i = 0; i < randomNum1; ++i) randomNums1[i] = random(16);
temp = 0;
for (int j = 0; j < 3; ++j) tempI1[j] = 0;
button2IsPressed = 0;
for (int i = 0; i < 16; ++i) {
// Mostrar puntuación
if (pts > 9 && pts < 20) { lcd.setCursor(14, 0); myDelay = 400; }
else if (pts > 19 && pts < 30) { lcd.setCursor(14, 0); myDelay = 300; }
else if (pts > 29 && pts < 50) { myDelay = 200; lcd.setCursor(14, 0); }
else if (pts >= 50) {
pts = 0; myDelay = 500; lcd.clear();
lcd.setCursor(5, 0); lcd.print("VICTORY");
tone(buzzer, 262); delay(200);
tone(buzzer, 330); delay(200);
tone(buzzer, 392); delay(100);
tone(buzzer, 330); delay(100);
tone(buzzer, 392); delay(100);
tone(buzzer, 523); delay(200);
noTone(buzzer); delay(3000); lcd.clear(); goto here;
}
else lcd.setCursor(15, 0);
lcd.print(pts);
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
// Obstáculos
if (!temp) {
for (int j = 0; j < randomNum; ++j) {
lcd.setCursor(randomNums[j], 1); lcd.print("#");
}
} else {
for (int j = 0; j < randomNum; ++j) {
if (tempI[0] > randomNums[j]) {
lcd.setCursor(randomNums[j], 1); lcd.print("#");
}
}
}
// Puntos (estrellas)
if (!temp1) {
for (int j = 0; j < randomNum1; ++j) {
lcd.setCursor(randomNums1[j], 0); lcd.print("*");
}
} else {
for (int j = 0; j < randomNum1; ++j) {
if (randomNums1[j] != tempI1[j]) {
lcd.setCursor(randomNums1[j], 0); lcd.print("*");
}
}
}
// Salto
if (buttonState1 == HIGH) {
lcd.setCursor(i, 0);
tone(buzzer, 131); delay(200); noTone(buzzer);
} else lcd.setCursor(i, 1);
lcd.print("$");
// Disparo
if (buttonState2 == HIGH) {
tone(buzzer, 175); delay(100); noTone(buzzer);
temp = 1;
if (buttonState1 == LOW) tempI[button2IsPressed] = i;
++button2IsPressed;
for (int k = i + 1; k < 16; ++k) {
if (buttonState1 == LOW) lcd.setCursor(k, 1);
else lcd.setCursor(k, 0);
lcd.print("~"); delay(5);
if (buttonState1 == LOW) lcd.setCursor(k - 1, 1);
else lcd.setCursor(k - 1, 0);
lcd.print(" "); delay(5);
}
}
delay(myDelay);
lcd.clear();
// Colisión con estrellas
for (int j = 0; j < randomNum1; ++j) {
if (i == randomNums1[j] && buttonState1 == HIGH) {
temp1 = 1; tempI1[j] = i; pts += 5;
}
}
// Colisión con obstáculos
for (int j = 0; j < randomNum; ++j) {
if (i == randomNums[j] && buttonState1 == LOW && temp == 0) {
pts = 0; myDelay = 500; lcd.clear();
lcd.setCursor(6, 0); lcd.print("GAME");
lcd.setCursor(6, 1); lcd.print("OVER");
tone(buzzer, 349); delay(200);
tone(buzzer, 277); delay(200);
tone(buzzer, 220); delay(100);
tone(buzzer, 277); delay(100);
tone(buzzer, 220); delay(200);
noTone(buzzer); delay(3000); lcd.clear(); goto here;
}
else if (i == randomNums[j] && buttonState1 == HIGH) ++pts;
}
}
}
Esquemáticos
game_aUIjA6VZxX.fzz

Proceso de manufactura
- Ajedrez: de sus orígenes antiguos a la fabricación moderna — una visión experta
- Pinball: Historia, Diseño y Fabricación de un Juego Arcade Clásico
- La Evolución y Artesanía del Fútbol Americano: De Juegos Ancestrales a Estándares NFL Modernos
- Construye un Juego Giroscópico en Tiempo Real con Arduino Nano y Sensor MPU-6050
- Construye tu Propio Juego de Ruleta de 37 LEDs con Arduino Nano
- Reloj 3D RGB Arduclock – Bluetooth, LED NeoPixel y RTC
- Monitor de Salud Fluvial: Sistema de Calidad de Agua con Arduino
- Juego interactivo con joystick analógico y LEDs en Arduino
- Find Me: Localizador Inteligente de Objetos con Arduino y Bluetooth
- Osciloscopio DIY con Arduino Nano (10 Hz–50 kHz) y LCD 128×64
- Pequeño Rover con Arduino: Construye tu Robot Autónomo Evita Obstáculos