Teste de Tempo de Reação Preciso com Arduino UNO
Componentes e Materiais
| Botões push-button | 3 |
| LED 5mm Vermelho | 2 |
| Jumpers macho-macho | 1 conjunto |
| Breadboard | 1 |
| Arduino UNO | 1 |
| Cabo USB-A para B | 1 |
| Resistor 100 Ω | 2 |
| Resistor 10k Ω | 3 |
Aplicativos e Serviços Online
- Arduino IDE
Sobre o Projeto
Li artigo sobre impacto do tempo de reação em atletas, snipers, jogadores de críquete e beisebol. Concluía que afeta até a vida cotidiana — ex: reação lenta ao dirigir pode ser fatal. Perguntei: como medir meu tempo de reação? Resultado abaixo.
Passo 1: O Que Precisamos







Componentes comuns para hobistas eletrônicos. Dúvidas? Veja as imagens.
Passo 2: Procedimento para Medir Tempo de Reação Visual
Existem vários tipos: auditivo, visual, tátil. Aqui medimos tempo de reação visual.
- Mensagem no Serial Monitor: "pressione botão pronto quando estiver pronto"
- Ao pressionar botão pronto, após intervalo aleatório, um dos 2 LEDs acende aleatoriamente
- Pessoa testada deve pressionar botão correspondente o mais rápido possível
- Arduino mede diferença entre LED acender e botão pressionado
- Exibe tempo de reação medido no Serial Monitor
Dos 3 botões: 1 = botão pronto, 2 botões correspondem aos LEDs (LED1→Botão1, LED2→Botão2).

Passo 3: Montando o Circuito

- Conecte 5V e GND do Arduino ao breadboard
- Cátodos dos LEDs → resistores 100Ω limitadores de corrente
- Anodo LED1 → pino 8, Anodo LED2 → pino 12
- Botões: quando solto, terminais laterais curto-circuitados; pressionado, terminais diagonais curto-circuitados
- Resistores 10kΩ como pull-down (conforme imagem)
- Outro terminal dos botões → trilha 5V do breadboard
- Botões → pinos 2, 4 e 7 do Arduino
Nota: pinos podem variar conforme sua preferência.
Passo 4: Vamos Codificar
Código anexado para download, mas sugiro escrever o seu. Pontos-chave:
- Tratar debounce dos botões
- Garantir boa resolução na medição (use
micros()) - Use Serial Monitor para debug e interface humana
Dúvidas? Veja vídeo demonstrativo anexo.
Passo 5: Hora do Teste
Chame amigos, veja quem é mais rápido. Faça tabela, calcule média (melhor: faça o Arduino calcular) e declare vencedor. Meu vídeo demo anexo. Tempo médio de reação visual ~250 ms.
PS: se for mais que isso após bebidas, não dirija.
Código
Código Arduino para medir seu tempo de reação
// definir pinos:
const int buttonPin1 = 4; // botão 1
const int buttonPin2 = 2; // botão 2
const int buttonPin3 = 7; // botão pronto
const int ledPin1 = 8; // LED 1 anode (+)
const int ledPin2 = 12; // LED 2 anode (+)
// Variáveis:
int ledState1 = LOW, ledState2 = LOW;
int buttonState1, buttonState2, buttonState3;
int lastButtonState1 = LOW, lastButtonState2 = LOW, lastButtonState3 = LOW;
unsigned long lastDebounceTime = 0;
long debounceDelay = 20000; // microssegundos
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)); // seed aleatório ruído analógico pino 0
}
void loop() {
if (printcount == 0) {
Serial.println("pressione botao 3 quando estiver pronto");
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("Seu tempo de reacao: ");
Serial.print(lastDebounceTime - time1);
Serial.println("us");
Serial.println();
printcount = 0;
}
}
if (reading2 != buttonState2) {
buttonState2 = reading2;
if (buttonState2 == HIGH) {
Serial.print("Seu tempo de reacao: ");
Serial.print(lastDebounceTime - time1);
Serial.println("us");
Serial.println();
printcount = 0;
}
}
if (reading3 != buttonState3) {
buttonState3 = reading3;
if (buttonState3 == HIGH) {
Serial.println("PRONTO PARA COMECAR");
button3Pressed = HIGH;
takeReading = HIGH;
}
}
}
lastButtonState1 = reading1;
lastButtonState2 = reading2;
lastButtonState3 = reading3;
}
Esquemático

Processo de manufatura
- Quando Substituir os Garfos da Empilhadeira: Guia Prático
- Alerta Inteligente de Sede para Plantas – Sensor DIY para Hidratação Ideal
- Relógio de Palavras em Italiano com Arduino Nano, NeoPixel, LCD e RTC
- Economize Pinos do Arduino: Conecte Teclado 4x3 com Apenas Três Conexões
- Medidor kWh Confiável com Sigfox e Arduino MKR Fox 1200
- Monitor de Temperatura com Bluetooth usando Arduino Nano
- Fechadura por Gestos Sem Toque: Acesso Seguro com APDS-9960 e Arduino
- Companion IC: Relógio, Ohmímetro, Capacímetro e Testador de Diodos com Arduino Nano
- Circuito de Entrada Analógica Isolada para Arduino
- Hora de Atualizar seu Compressor? Identifique os Sinais Precocemente