Bu yazıyı Türkçe okuyun · Read in English
¿Qué hace este proyecto?
Construimos un juego que mide lo rápido que reaccionas. El LED se enciende en un momento al azar y tienes que pulsar el botón en cuanto se ilumine. Arduino mide tu tiempo de reacción en milisegundos y guarda tu mejor puntuación. Si pulsas antes de que se encienda el LED, el zumbador te avisa de que te has adelantado. Es perfecto para competir con tus compañeros en clase.
- Edad: a partir de 10 años
- Nivel: Principiante
- Tiempo: unos 40 minutos
- Qué aprenderás: medir el tiempo con
millis(), crear números aleatorios conrandom(), el buclewhile, guardar una puntuación en una variable
Lista de materiales
| Material | Cant. |
|---|---|
| Arduino Uno (o compatible) | 1 |
| LED (rojo o verde) | 1 |
| Resistencia de 220 Ω | 1 |
| Pulsador | 1 |
| Zumbador pasivo | 1 |
| Protoboard | 1 |
| Cables puente macho-macho | ~8 |
| Cable USB | 1 |
Conexiones

| Componente | Conexión | Pin de Arduino |
|---|---|---|
| LED | Pata larga (a través de 220 Ω) | D8 |
| LED | Pata corta | GND |
| Botón | Una pata | D2 |
| Botón | Pata opuesta en diagonal | GND |
| Zumbador | + (pata larga) | D9 |
| Zumbador | – | GND |
Código
// Juego de tiempo de reacción con Arduino - ozandamci.com
const int ledPin = 8;
const int buttonPin = 2;
const int buzzerPin = 9;
unsigned long bestScore = 0; // 0 = todavía no hay puntuación
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(buzzerPin, OUTPUT);
Serial.begin(9600);
randomSeed(analogRead(A0)); // obtiene el azar de un pin sin usar
Serial.println("¡Bienvenido al juego de reacción!");
}
void loop() {
Serial.println("Prepárate... ¡pulsa el botón cuando se encienda el LED!");
// Espera entre 2 y 5 segundos al azar y detecta las pulsaciones anticipadas
unsigned long waitTime = random(2000, 5000);
unsigned long start = millis();
while (millis() - start < waitTime) {
if (digitalRead(buttonPin) == LOW) {
Serial.println("¡Demasiado pronto! Inténtalo de nuevo.");
tone(buzzerPin, 200, 600);
delay(2000);
return; // vuelve a empezar loop()
}
}
// Enciende el LED y empieza a cronometrar
digitalWrite(ledPin, HIGH);
unsigned long lightOnTime = millis();
while (digitalRead(buttonPin) == HIGH) {
// espera a que se pulse el botón
}
unsigned long reaction = millis() - lightOnTime;
digitalWrite(ledPin, LOW);
tone(buzzerPin, 1500, 100);
Serial.print("Tu tiempo de reacción: ");
Serial.print(reaction);
Serial.println(" ms");
if (bestScore == 0 || reaction < bestScore) {
bestScore = reaction;
Serial.println("¡Nuevo récord!");
}
Serial.print("Mejor puntuación: ");
Serial.print(bestScore);
Serial.println(" ms");
Serial.println("-----------------------");
while (digitalRead(buttonPin) == LOW) {
// espera a que se suelte el botón
}
delay(2000);
}
Paso a paso
- Coloca el LED. Conecta una resistencia de 220 Ω a la pata larga del LED y llévala a D8; conecta la pata corta a GND.
- Coloca el botón. Pon el botón sobre la separación central de la protoboard. Conecta una pata a D2 y la pata opuesta en diagonal a GND.
- Coloca el zumbador. Conecta su pata larga a D9 y su pata corta a GND.
- Sube el código. Elige tu placa y tu puerto y haz clic en Subir.
- Empieza a jugar. Abre Herramientas → Monitor Serie (9600 baudios). Cuando veas “Prepárate”, mira el LED y pulsa el botón en cuanto se encienda.
- Competid. Jugad por turnos varias personas y mirad quién consigue la mejor puntuación. El tiempo de reacción medio de una persona ronda los 200–300 ms.
Solución de problemas
- Dice “Demasiado pronto” antes de que se encienda el LED: Puede que las patas del botón estén mal colocadas; comprueba que usas patas opuestas en diagonal.
- El Monitor Serie muestra caracteres raros: Ajusta la velocidad en la esquina inferior derecha del Monitor Serie a 9600 baudios.
Pruébalo tú mismo
- Crea un modo duelo para dos jugadores con dos botones y dos LED: quien pulse primero enciende su LED.
- Muestra la puntuación en una pantalla LCD I2C para no necesitar el ordenador.

Birisi “Juego de tiempo de reacción con Arduino (materiales y código)” üzerinde düşündü