Gioco di reazione con scheda Arduino

Il gioco da tavolo “Reaction” è un semplice progetto per Arduino, per il quale sono necessari solo LED, resistenze per i pulsanti e breadboard. In questo articolo abbiamo inserito lo schema dell’assemblaggio del gioco con il microcontrollore Arduino e il programma di funzionamento con commenti dettagliati. Nei parametri è possibile cambiare la modalità di funzionamento – modificare gli intervalli di tempo, il numero di tentativi e il numero di pulsanti.




Per questa attività sono necessari:

  • Arduino Uno / Arduino Nano / Arduino Micro
  • LED e resistenze
  • pulsanti
  • breadboard
  • cavi di collegamento

Gioco di reazione con Arduino Uno / Nano

Il principio del gioco è piuttosto semplice: dopo aver acceso i LED (che si accendono in modo casuale), è necessario premere il pulsante corrispondente il più rapidamente possibile. L’intervallo di tempo di accensione dei LED e altre impostazioni possono essere modificate nello schizzo. Dopo aver effettuato tutti i tentativi, il numero di tentativi corretti, la media e il miglior tempo di reazione vengono visualizzati sul monitor seriale dell’IDE Arduino.

Schema per la costruzione di un gioco di reazione

Schema per la costruzione di un gioco di reazione con Arduino
Сome creare un gioco di reazione con Arduino Uno

Lo schema mostra il collegamento di tre coppie di LED e pulsanti al microcontrollore, ma è possibile collegare fino a sei coppie modificando le impostazioni appropriate nello sketch. Importante: collegare i LED in serie a partire dal pin 4 e i pulsanti dal pin A0 ad A5. Il gioco si avvia quando tutti i LED sono brevemente accesi. Se si desidera, è possibile collegare un altoparlante piezoelettrico ad Arduino per ottenere un segnale sonoro per avviare il gioco.

Programma Arduino per gioco di reazione (Reaction game)




/* parametri che possono essere modificati */
int d1 = 1000;   // d1 e d2 sono l'intervallo in mlsec dell'illuminazione a LED
int d2 = 2000;
int d3 = 3000;   // dopo quanti mlsec l'errore viene cancellato
byte tarrgr = 5; // numero di tentativi
byte knp = 3;    // numero di coppie LED / pulsanti
/* parametri che possono essere modificati */
 
byte pinD = 4 + knp;
byte pinA = 14 + knp;
byte ext = 9;
byte hit;
byte err;
byte tarrgn;
boolean finich = true;

unsigned long timing;
unsigned long setreakt;
unsigned long bestreakt = 99999;
unsigned long medreakt;

void setup() {
   Serial.begin(9600);
   for (byte i = 4; i < pinD; i++) { pinMode(i, OUTPUT); digitalWrite(i, HIGH); }
   delay(500); 
   for (byte i = 4; i < pinD; i++) { digitalWrite(i, LOW); }
   for (byte i = 14; i < pinA; i++) { pinMode(i, INPUT); }
   for (byte i = 14; i < pinA; i++) { analogWrite(i, LOW); }
}

void loop() {
   while (tarrgn < tarrgr) {
    
      int LED = random(4, 4 + knp);
      int BTN = LED + 10;

      int DEL = random(d1, d2);
      delay(DEL);
      digitalWrite(LED, HIGH);
      timing = millis();

      ext = 9;

      while (ext < 10 && tarrgn < tarrgr) {

         if (digitalRead(BTN) == HIGH) {
            digitalWrite(LED, LOW);
            setreakt = millis() - timing;
            delay(300); hit++; tarrgn++; ext = 11;
         }

         if (millis() - timing > d3) {
            digitalWrite(LED, LOW);
            delay(300); setreakt = 0; err++; tarrgn++; ext = 11;
         }
      }

    if (setreakt < bestreakt && setreakt > 100) { bestreakt = setreakt; }
    medreakt = medreakt + setreakt;
  }

    if (tarrgn == tarrgr && finich == true) {
       medreakt = medreakt / hit;
       if (medreakt > 99998) { medreakt = 0; }
       if (bestreakt > 99998) { bestreakt = 0; }

       Serial.println();
       Serial.println("--- End of Raund ---");
       Serial.println();
       Serial.println("Coups - " + String(hit));
       Serial.println("Errors - " + String(err));
       Serial.println("The best reaction - " + String(bestreakt));
       Serial.println("The average reaction - " + String(medreakt));
       Serial.println();
       Serial.println("Please reboot for restart");
       finich = false;
  }
}

Spiegazione del codice per gioco di reazione (Reaction game Arduino):



  1. tutte le impostazioni del gioco possono essere modificate all’inizio del programma;
  2. un ordine errato di collegamento dei LED e dei pulsanti influisce sul funzionamento del programma. È possibile collegare un massimo di sei coppie di LED e pulsanti.

Conclusione. È inoltre possibile collegare il display LCD di Arduino al microcontrollore e visualizzare i risultati del gioco sullo schermo. Inoltre, è possibile pensare a diverse opzioni per l’accensione dei LED, ad esempio accendere contemporaneamente due LED. Se avete domande, potete lasciarle nei commenti a questo post – cerchiamo sempre di risolvere i problemi e di rispondere a tutti i commenti dei nostri cari utenti.

5/5 - (1 vote)


Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.