Precisie Reactietijd Test met Arduino UNO
Onderdelen en benodigdheden
| Onderdeel | Aantal |
|---|---|
| Drukknoppen | 3 |
| 5mm LED: Rood | 2 |
| Man-Man Jumper Draadjes | 1 set |
| Breadboard (standaard) | 1 |
| Arduino UNO | 1 |
| USB-A naar B Kabel | 1 |
| Weerstand 100 ohm | 2 |
| Weerstand 10k ohm | 3 |
Apps en online diensten
- Arduino IDE
Over dit project
Ik las een artikel over reactietijd bij atleten, snipers, cricket/spelers en de impact op het dagelijks leven. Langzamere reactietijd bij rijden kan fataal zijn. Hoe meet ik mijn eigen reactietijd?
Stap 1: Benodigdheden







Componenten liggen waarschijnlijk op de vloer van elke elektronica hobbyist :).
Stap 2: Procedure voor reactietijd meting
Veel soorten reactietijd: auditief, visueel, tast. We meten visuele reactietijd.
Procedure:
- Seriële monitor: "Druk op ready knop als je klaar bent".
- Na random wachttijd (2-5 sec) brandt één van de twee LED's (willekeurig).
- Testpersoon drukt zo snel mogelijk op de bijbehorende knop (LED1→Knop1, LED2→Knop2).
- Arduino meet tijdverschil tussen LED aan en knop indruk.
- Reactietijd tonen op seriële monitor.
Van de 3 knoppen: 1x ready, 2x voor LED's. Pin nummers naar keuze aanpasbaar.

Stap 3: Schakeling bouwen

- 5V en GND van Arduino → breadboard.
- Kathoden LED's via 100Ω weerstanden.
- Anoden LED1, LED2 → pinnen 8, 12.
- Drukknoppen aansluiten (open: zijpennen kortgesloten, ingedrukt: diagonale pennen).
- 10kΩ pull-down weerstanden zoals getoond.
- Andere kant knoppen → 5V rail.
- Knoppen → pinnen 2, 4, 7.
Let op: Pin nummers zijn mijn keuze, vrij aanpasbaar.
Stap 4: Programmeren
Code bijgevoegd, maar zelf schrijven is leerzamer. Let op:
- Debouncing van drukknoppen.
- Goede resolutie voor reactietijd meting.
- Seriële monitor voor debugging en interface.
Bij twijfel: kijk de bijgevoegde video.
Stap 5: Testen
Vrienden uitnodigen, snelste wint. Gemiddelde visuele reactietijd ~250ms.
PS: Als het na alcohol meer is, niet rijden!
Code
Arduino code voor reactietijd meting
// set pin numbers:
const int buttonPin1 = 4;
const int buttonPin2 = 2;
const int buttonPin3 = 7;
const int ledPin1 = 8;
const int ledPin2 = 12;
// Variables will change:
int ledState1 = LOW;
int ledState2 = LOW;
int buttonState1, buttonState2, buttonState3;
int lastButtonState1 = LOW, lastButtonState2 = LOW, lastButtonState3 = LOW;
unsigned long lastDebounceTime = 0;
long debounceDelay = 20000; // microseconds
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 == 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;
}
Schema's
Productieproces
- Slimme Plantenalarmer – DIY Sensor voor Optimale Hydratatie
- Bouw een Italiaanse Woordklok met Arduino Nano, NeoPixel, LCD en RTC
- Bespaar Arduino-pins: Sluit een 4x3-toetsenblok aan met slechts 3 verbindingen
- Bouw een Betrouwbare Sigfox kWh Meter met Arduino MKR Fox 1200
- Bluetooth Temperatuurmeter met Arduino Nano
- Contactloos Gebaarslot: Veilige toegang met APDS-9960 en Arduino
- Arduino Nano Companion Kit – Essentiële Componenten & Hulpmiddelen voor DIY Electronica
- USB MIDI Adapter Kit voor Arduino Micro / Leonardo – Complete Onderdelenlijst
- Geïsoleerde analoge ingangsschakeling voor Arduino bouwen
- Wanneer uw heftruckvorken te vervangen: Een praktische gids
- Tijd om Uw Compressor te Upgraden? Herken de Signalen Vroegtijdig