Juego de tiempo de reacción con Arduino (materiales y código)

Arduino ile Reaksiyon Süresi Ölçme Oyunu projesi kapak görseli

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 con random(), el bucle while, guardar una puntuación en una variable

Lista de materiales

MaterialCant.
Arduino Uno (o compatible)1
LED (rojo o verde)1
Resistencia de 220 Ω1
Pulsador1
Zumbador pasivo1
Protoboard1
Cables puente macho-macho~8
Cable USB1

Conexiones

Esquema de conexiones del juego de tiempo de reacción con Arduino
ComponenteConexiónPin de Arduino
LEDPata larga (a través de 220 Ω)D8
LEDPata cortaGND
BotónUna pataD2
BotónPata opuesta en diagonalGND
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

  1. 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.
  2. 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.
  3. Coloca el zumbador. Conecta su pata larga a D9 y su pata corta a GND.
  4. Sube el código. Elige tu placa y tu puerto y haz clic en Subir.
  5. 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.
  6. 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.

Vídeo

La narración está en turco. Hay subtítulos en español: pulsa CC en el vídeo.

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

Bir Cevap Yazın