Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Präziser Reaktionszeit-Test mit Arduino UNO

Komponenten und Zubehör

Taster×3
5 mm LED: Rot×2
Männlich-Männlich-Jumperkabel×1
Breadboard×1
Arduino UNO×1
USB-A-auf-B-Kabel×1
Widerstand 100 Ω×2
Widerstand 10 kΩ×3

Apps & Online-Dienste

Über dieses Projekt

Ein Artikel über Reaktionszeit bei Athleten, Scharfschützen, Cricket-/Baseball-Spielern zeigte mir, wie sehr Reaktionszeit den Alltag beeinflusst – z. B. beim Autofahren kann langsame Reaktionszeit fatale Folgen haben. Wie misst man die eigene Reaktionszeit? Hier die Lösung.

Schritt 1: Benötigte Hardware

Präziser Reaktionszeit-Test mit Arduino UNO
Präziser Reaktionszeit-Test mit Arduino UNO
Präziser Reaktionszeit-Test mit Arduino UNO
Präziser Reaktionszeit-Test mit Arduino UNO
Präziser Reaktionszeit-Test mit Arduino UNO
Präziser Reaktionszeit-Test mit Arduino UNO
Präziser Reaktionszeit-Test mit Arduino UNO

Software: Arduino IDE. Bauteile sollte jeder Elektronik-Bastler herumliegen haben. Unklare Teile? Bilder anschauen.

Schritt 2: Messverfahren für visuelle Reaktionszeit

Es gibt auditive, visuelle, taktile Reaktionszeiten. Hier: Visuelle Reaktionszeit.

Ablauf:

  1. Serielle Konsole: „Drücke Ready-Taste, wenn du bereit bist“
  2. Nach zufälligem Zeitintervall leuchtet eine der beiden LEDs (zufällig gewählt)
  3. Testperson drückt so schnell wie möglich den zugehörigen Taster (LED1→Taster1, LED2→Taster2)
  4. Arduino misst Zeitdifferenz: LED-An → Tasterdruck
  5. Gemessene Reaktionszeit auf Serial Monitor ausgeben

Von den 3 Tastern: 1× Ready, 2× für LEDs (LED1↔Taster1, LED2↔Taster2).

Präziser Reaktionszeit-Test mit Arduino UNO

Schritt 3: Aufbau

Präziser Reaktionszeit-Test mit Arduino UNO

Hinweis: Pin-Belegung frei wählbar, hier nur meine Wahl.

Schritt 4: Programmieren

Code unten zum Download, aber selbst schreiben ist lehrreicher. Wichtige Punkte:

Bei Unklarheiten: Video anschauen.

Schritt 5: Testen

Freunde einladen, wer ist am schnellsten? Tabelle führen, Durchschnitt bilden (Arduino kann das übernehmen), Sieger küren. Demo-Video angehängt. Durchschnittliche visuelle Reaktionszeit ~250 ms.

PS: Wenn es nach Alkohol über 250 ms liegt – nicht Auto fahren!

Code

Arduino-Code für Reaktionszeitmessung
// Pin-Definitionen
const int buttonPin1 = 4;
const int buttonPin2 = 2;
const int buttonPin3 = 7;
const int ledPin1 = 8;
const int ledPin2 = 12;

// Variablen
int ledState1 = LOW, ledState2 = LOW;
int buttonState1, buttonState2, buttonState3;
int lastButtonState1 = LOW, lastButtonState2 = LOW, lastButtonState3 = LOW;
unsigned long lastDebounceTime = 0;
long debounceDelay = 20000; // µs
unsigned long randNumber;
unsigned long minRandomNumber = 2000;
unsigned long maxRandomNumber = 5000;
unsigned long time1, time2;
int button3Pressed = LOW;
int printcount = 0;
int takeReading = LOW;
int reading1, reading2, reading3;
int oddNumber, evenNumber;

void setup() {
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT);
  pinMode(buttonPin3, INPUT);
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  Serial.begin(115200);
  digitalWrite(ledPin1, ledState1);
  digitalWrite(ledPin2, ledState2);
  randomSeed(analogRead(0));
}

void loop() {
  if (printcount == 0) {
    Serial.println("press button 3 when you are ready");
    printcount = 1;
    takeReading = LOW;
    oddNumber = LOW;
    evenNumber = LOW;
  }
  if (button3Pressed == HIGH) {
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, LOW);
    randNumber = random(minRandomNumber, maxRandomNumber);
    delay(randNumber);
    if (randNumber & 1) {
      digitalWrite(ledPin1, HIGH);
      digitalWrite(ledPin2, LOW);
      time1 = micros();
      oddNumber = HIGH;
    } else {
      digitalWrite(ledPin1, LOW);
      digitalWrite(ledPin2, HIGH);
      time1 = micros();
      evenNumber = HIGH;
    }
    button3Pressed = LOW;
  }
  reading3 = digitalRead(buttonPin3);
  if (takeReading == HIGH) {
    if (oddNumber == HIGH) reading1 = digitalRead(buttonPin1);
    if (evenNumber == HIGH) reading2 = digitalRead(buttonPin2);
  }
  if (reading1 != lastButtonState1 || reading2 != lastButtonState2 || reading3 != lastButtonState3) {
    lastDebounceTime = micros();
  }
  if ((micros() - lastDebounceTime) > debounceDelay) {
    if (reading1 != buttonState1) {
      buttonState1 = reading1;
      if (buttonState1 == HIGH) {
        Serial.print("Your reaction time is: ");
        Serial.print(lastDebounceTime - time1);
        Serial.println("us");
        Serial.println();
        printcount = 0;
      }
    }
    if (reading2 != buttonState2) {
      buttonState2 = reading2;
      if (buttonState2 == HIGH) {
        Serial.print("Your reaction time is: ");
        Serial.print(lastDebounceTime - time1);
        Serial.println("us");
        Serial.println();
        printcount = 0;
      }
    }
    if (reading3 != buttonState3) {
      buttonState3 = reading3;
      if (buttonState3 == HIGH) {
        Serial.println("READY TO GO");
        button3Pressed = HIGH;
        takeReading = HIGH;
      }
    }
  }
  lastButtonState1 = reading1;
  lastButtonState2 = reading2;
  lastButtonState3 = reading3;
}

Schaltplan

Präziser Reaktionszeit-Test mit Arduino UNO

Herstellungsprozess

  1. Wann Gabelstapler-Gabeln ersetzen: Praktischer Leitfaden
  2. Smart Thirst Alert: DIY Pflanzen-Alarm für optimale Bewässerung
  3. Italienische Word Clock mit Arduino Nano, NeoPixel, LCD & RTC
  4. Arduino-Pins sparen: 4x3 Tastenfeld mit nur 3 Anschlüssen verbinden
  5. Zuverlässiger Sigfox-kWh-Zähler mit Arduino MKR Fox 1200
  6. Bluetooth-Temperaturmonitor mit Arduino Nano
  7. Berührungsloses Gesten-Schloss: Sicherer Zugang mit APDS-9960 & Arduino
  8. Arduino Nano Begleiter-Set – Essentielle Bauteile & Werkzeuge für DIY-Elektronik
  9. Isolierter Analogeingang für Arduino: Spannung/Strom galvanisch trennen
  10. Zeit für ein Kompressor-Upgrade? Die Anzeichen frühzeitig erkennen