Test Précis de Temps de Réaction avec Arduino UNO
Composants et fournitures
| Boutons poussoirs | 3 |
| LED 5 mm rouge | 2 |
| Fils de liaison mâle-mâle | 1 jeu |
| Breadboard | 1 |
| Arduino UNO | 1 |
| Câble USB-A vers B | 1 |
| Résistance 100 Ω | 2 |
| Résistance 10 kΩ | 3 |
Applications et services en ligne
- Arduino IDE
À propos du projet
Je lisais un article sur l'impact du temps de réaction chez les athlètes, snipers, cricketers, joueurs de baseball… et sa conclusion sur les implications dans la vie quotidienne m'a frappé. Par exemple, un temps de réaction trop lent au volant peut avoir des conséquences graves.
Je me suis demandé : comment mesurer mon propre temps de réaction ? Voici le résultat.
Étape 1 : Matériel nécessaire







Logiciel : Arduino IDE. Tous ces composants trainent probablement dans le tiroir d'un amateur d'électronique. En cas de doute sur un composant, regardez les images.
Étape 2 : Procédure de mesure du temps de réaction visuel
Il existe plusieurs types de temps de réaction (auditif, visuel, tactile…). Ici on mesure le temps de réaction visuel.
Procédure :
- Afficher sur le moniteur série : « Appuyez sur le bouton prêt quand vous êtes prêt »
- Quand la personne testée appuie sur le bouton « prêt », après un délai aléatoire, l'une des deux LED s'allume (choisie aléatoirement).
- La personne doit appuyer sur le bouton correspondant le plus vite possible.
- L'Arduino mesure la différence de temps entre l'allumage de la LED et l'appui sur le bouton.
- Afficher le temps de réaction mesuré sur le moniteur série.
Sur les 3 boutons : 1 = bouton « prêt », 2 = bouton correspondant à LED1, 3 = bouton correspondant à LED2. (LED1 → BOUTON1, LED2 → BOUTON2).

Étape 3 : Assemblage du circuit

Points clés :
- Reliez 5V et GND de l'Arduino au breadboard.
- Cathodes des deux LED → résistances 100 Ω → GND.
- Anode LED1 → broche 8, Anode LED2 → broche 12.
- Boutons poussoirs : au repos, les pattes latérales sont connectées ; appuyé, ce sont les pattes diagonales qui se connectent.
- Résistances 10 kΩ en pull-down (voir schéma).
- Autre patte des boutons → rail 5V.
- Boutons → broches 2, 4, 7 de l'Arduino.
Note : les numéros de broches sont indicatifs, adaptez selon vos préférences.
Étape 4 : Le code
Le code Arduino est fourni en pièce jointe (section Code), mais je vous encourage à l'écrire vous-même. Points clés à respecter :
- Gérer l'antirebond (debouncing) des boutons.
- Assurer une bonne résolution de mesure (microsecondes).
- Utiliser le moniteur série pour le débogage et l'interface utilisateur.
En cas de doute, visionnez la vidéo jointe.
Étape 5 : Tests
Tout est prêt. Appelez vos amis, voyons qui est le plus rapide ! Notez les résultats, calculez la moyenne (faites-le faire à l'Arduino) et déclarez le gagnant. Ma vidéo de démo est jointe. Temps de réaction visuel moyen : ~250 ms.
PS : si c'est plus que ça après quelques verres, ne conduisez pas.
Code
Code Arduino pour mesurer votre temps de réaction
Lancez le code et ouvrez le moniteur série.
// numéros de broches
const int buttonPin1 = 4; // bouton 1
const int buttonPin2 = 2; // bouton 2
const int buttonPin3 = 7; // bouton "prêt"
const int ledPin1 = 8; // LED 1
const int ledPin2 = 12; // LED 2
// variables d'état
int ledState1 = LOW, ledState2 = LOW;
int buttonState1, buttonState2, buttonState3;
int lastButtonState1 = LOW, lastButtonState2 = LOW, lastButtonState3 = LOW;
unsigned long lastDebounceTime = 0;
long debounceDelay = 20000; // microsecondes
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("Appuyez sur le bouton 3 quand vous etes pret");
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("Votre temps de reaction est: ");
Serial.print(lastDebounceTime - time1);
Serial.println(" us");
Serial.println();
printcount = 0;
}
}
if (reading2 != buttonState2) {
buttonState2 = reading2;
if (buttonState2 == HIGH) {
Serial.print("Votre temps de reaction est: ");
Serial.print(lastDebounceTime - time1);
Serial.println(" us");
Serial.println();
printcount = 0;
}
}
if (reading3 != buttonState3) {
buttonState3 = reading3;
if (buttonState3 == HIGH) {
Serial.println("PRET A PARTIR");
button3Pressed = HIGH;
takeReading = HIGH;
}
}
}
lastButtonState1 = reading1;
lastButtonState2 = reading2;
lastButtonState3 = reading3;
}
Schémas

Processus de fabrication
- Quand Remplacer Vos Fourches de Chariot Élévateur : Guide Pratique
- Alerte Soif Plante Intelligente – Capteur DIY pour une Hydratation Optimale
- Horloge à Mots Italienne avec Arduino Nano, NeoPixel, LCD et RTC
- Économisez les broches Arduino : clavier 4×3 sur 3 entrées analogiques
- Compteur kWh Sigfox fiable avec Arduino MKR Fox 1200
- Moniteur de température Bluetooth avec Arduino Nano
- Serrure à gestes sans contact : Accès sécurisé avec APDS-9960 et Arduino
- Circuit d'entrée analogique isolée pour Arduino : Protection contre les parasites industriels
- Est-il Temps de Mettre à Niveau Votre Compresseur ? Repérez les Signes Avant-Coureurs