Test de Precisión de Tiempo de Reacción con Arduino UNO
Componentes y suministros
| Componente | Cantidad |
|---|---|
| Pulsadores | 3 |
| LED 5mm Rojo | 2 |
| Cables jumper macho-macho | 1 |
| Protoboard (genérica) | 1 |
| Arduino UNO | 1 |
| Cable USB-A a B | 1 |
| Resistencia 100 Ω | 2 |
| Resistencia 10k Ω | 3 |
Aplicaciones y servicios online
- Arduino IDE
Sobre el proyecto
Leí un artículo sobre cómo el tiempo de reacción afecta a atletas, francotiradores, jugadores de cricket y béisbol, y concluía su impacto en la vida cotidiana. Me sorprendió: un tiempo de reacción lento al conducir puede tener graves consecuencias.
Me pregunté: ¿cómo medir mi tiempo de reacción? Este es el resultado.
Paso 1: Qué necesitamos
Hardware:







Software: Arduino IDE
Todos los componentes los tendrá cualquier aficionado a la electrónica. Si dudas sobre alguno, mira las imágenes.
Paso 2: Procedimiento para medir tiempo de reacción (RT)
Existen muchos tipos: auditivo, visual, táctil… Aquí medimos tiempo de reacción visual.
Procedimiento:
- Mostrar en monitor serie: "pulsa botón listo cuando estés listo".
- Cuando el sujeto pulsa botón listo, tras intervalo aleatorio, se enciende uno de los 2 LEDs (aleatoriamente).
- El sujeto debe pulsar el botón correspondiente lo más rápido posible.
- Arduino mide diferencia de tiempo entre encendido LED y pulsación botón.
- Muestra tiempo de reacción medido en monitor serie.
De los 3 botones: uno es "listo", los otros dos corresponden a cada LED (LED1→BOTÓN1, LED2→BOTÓN2).

Paso 3: Montaje
En la imagen ves el circuito. Puntos clave:
- Conecta 5V y GND de Arduino a protoboard.
- Cátodos de ambos LEDs a través de resistencias 100Ω limitadoras.
- Ánodo LED1 → pin 8, Ánodo LED2 → pin 12.
- Conecta pulsadores como en imagen (abierto: patas laterales conectadas; pulsado: patas diagonales conectadas).
- Resistencias 10kΩ como pull-down (ver imagen).
- Otra pata a rail 5V en protoboard.
- Botones a pines 2, 4 y 7 de Arduino.
Nota: Los pines pueden variar según tu elección; son mis preferencias.

Paso 4: Programemos
Adjunto código Arduino para descargar y probar, pero te sugiero escribir el tuyo. Puntos clave al programar:
- Gestionar rebote (debounce) de pulsadores.
- Garantizar buena resolución en medición de tiempo.
- Usar monitor serie para depuración e interfaz humana.
Si dudas, revisa el video adjunto.
Paso 5: ¡A probar!
Llama a amigos y ve quién es más rápido. Haz tabla, calcula media (mejor que lo haga Arduino) y declara ganador. Adjunto video demo. Tiempo medio reacción visual ~250 ms.
PD: si tras copas te da >250 ms, ¡no conduzcas!
Código
Código Arduino para medir tu tiempo de reacción Arduino
Ejecuta y abre monitor serie.
// asignar pines:
const int buttonPin1 = 4; // pulsador 1
const int buttonPin2 = 2; // pulsador 2
const int buttonPin3 = 7; // pulsador 3 (listo)
const int ledPin1 = 8; // LED 1 ánodo (+)
const int ledPin2 = 12; // LED 2 ánodo (+)
// Variables:
int ledState1 = LOW, ledState2 = LOW;
int buttonState1, buttonState2, buttonState3;
int lastButtonState1 = LOW, lastButtonState2 = LOW, lastButtonState3 = LOW;
unsigned long lastDebounceTime = 0;
long debounceDelay = 20000; // microsegundos
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("pulsa boton 3 cuando estes listo");
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("Tu tiempo de reaccion es: ");
Serial.print(lastDebounceTime - time1);
Serial.println("us");
Serial.println();
printcount = 0;
}
}
if(reading2 != buttonState2) {
buttonState2 = reading2;
if(buttonState2 == HIGH) {
Serial.print("Tu tiempo de reaccion es: ");
Serial.print(lastDebounceTime - time1);
Serial.println("us");
Serial.println();
printcount = 0;
}
}
if(reading3 != buttonState3) {
buttonState3 = reading3;
if(buttonState3 == HIGH) {
Serial.println("LISTO PARA EMPEZAR");
button3Pressed = HIGH;
takeReading = HIGH;
}
}
}
lastButtonState1 = reading1;
lastButtonState2 = reading2;
lastButtonState3 = reading3;
}
Esquemáticos
Proceso de manufactura
- Alerta de Sed Inteligente para Plantas: Sensor DIY para Riego Óptimo
- Reloj de Palabras en Italiano con Arduino Nano, NeoPixel, LCD y RTC
- Ahorra Pines en Arduino: Conecta Teclado 4x3 con Solo 3 Conexiones Analógicas
- Medidor kWh Sigfox Fiable con Arduino MKR Fox 1200
- Monitor de temperatura con Bluetooth usando Arduino Nano
- Cerradura por Gestos Sin Contacto: Acceso Seguro con APDS-9960 y Arduino
- Kit Compañero Arduino Nano: Componentes y Herramientas Esenciales para Electrónica DIY
- Kit Adaptador USB MIDI para Arduino Micro / Leonardo: Lista Completa de Componentes
- Circuito de entrada analógica aislada para Arduino
- Cuándo Reemplazar las Horquillas de su Montacargas: Guía Práctica
- ¿Es Hora de Actualizar tu Compresor? Detecta las Señales a Tiempo