Измерьте время реакции
Компоненты и расходные материалы
| × | 3 | ||||
![]() |
| × | 2 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 2 | |||
![]() |
| × | 3 |
Приложения и онлайн-сервисы
![]() |
|
Об этом проекте
Я читал статью, в которой писатель пытался произвести впечатление о влиянии времени реакции на жизнь спортсменов, снайперов, игроков в крикет и бейсболистов. В заключение он закончил, сказав, что это влияние на жизнь нормальных людей, и я был поражен, увидев, что время реакции имело множество последствий для нашей повседневной жизни.
Например, более медленная, чем обычно, реакция во время вождения может иметь серьезные последствия.
Я подумал:как мне измерить время своей реакции?
Вот результат.
Шаг 1. Что нам понадобится
Ниже приводится список вещей, которые нам понадобятся для измерения времени нашей реакции.
Оборудование:







Программное обеспечение:
- IDE Arduino
Вышеупомянутые компоненты должны лежать на полу электронного любителя :).
Если у вас есть сомнения относительно какого-либо компонента, просто посмотрите на изображения.
Шаг 2. Каким будет наша процедура измерения времени реакции (RT)?
Наш человеческий организм имеет много времени реакции. у нас есть Audio RT, visual RT, Touch RT и многие другие. В этом руководстве мы рассмотрим измерение
Визуальное время реакции.
Процедура измерения времени визуальной реакции:
- На мониторе последовательного порта Arduino появится сообщение "нажмите кнопку готовности, когда будете готовы"
- Когда испытуемый нажимает кнопку «Готово», по прошествии некоторого случайного промежутка времени один из двух светодиодов должен загореться слишком случайным образом.
- Тестируемый должен как можно скорее нажать соответствующую кнопку.
- Arduino заметит разницу во времени между включением светодиода и нажатием соответствующей кнопки человеком.
- Поместите сообщение об измеренном времени реакции на последовательный монитор Arduino.
Позвольте мне уточнить, что из списка аппаратных компонентов, который я упомянул, из 3 кнопок одна кнопка будет действовать как кнопка готовности, а оставшиеся две кнопки будут
соответствуют двум светодиодам, т.е. LED1 -> BUTTON1, LED2 -> BUTTON2. Это означает, что если LED1 загорится, человек под тестом должен нажать BUTTON1, аналогично
LED2.

Шаг 3. Собираем все вместе
На изображении выше вы можете увидеть конструкцию схемы. позвольте мне отметить здесь несколько моментов.
- подключите 5V и GND от платы Arduino к макетной плате.
- подключите катоды обоих светодиодов через токоограничивающие резисторы 100 Ом.
- подключите анод светодиодов LED1 и LED2 к контактам 8 и 12 соответственно.
- кнопки плагина, как показано на рисунке. (в случае нажатия кнопок, когда кнопка открыта, выводы по бокам закорачиваются, при нажатии кнопки диагональные выводы
- закорачивается)
- подключите резистор 10 кОм, как показано на рисунке, он действует как понижающий резистор.
- подключите другой вывод к шине 5 В на макете.
- и, наконец, подключите кнопки к контактам 2, 4 и 7 платы Arduino.
Обратите внимание: Номера контактов, которые я упомянул выше, могут варьироваться в зависимости от вашего выбора, я только что упомянул свои предпочтения.

Шаг 4. Разрешите код
Я приложил код Arduino для инструкций, которые вы можете скачать и начать играть, но я предлагаю вам написать свой собственный. Ниже приведены несколько моментов, которые следует учитывать при написании кода.
- Позаботьтесь о запрете нажатия кнопок.
- Позаботьтесь о том, чтобы код обеспечивал хорошее разрешение при измерении времени реакции.
- Используйте серийный монитор для отладки, а также человеческий интерфейс.
Если вы сомневаетесь в выполнении любого из вышеперечисленных шагов, просто просмотрите прикрепленное видео.
Шаг 5. Время проверки
Готово, звоните друзьям и давайте посмотрим, кто из них самый быстрый. Подготовьте диаграмму, взяв среднее значение (лучше пусть это сделает Arduino) и объявите победителя. Я приложил свое демонстрационное видео, не стесняйтесь его смотреть. Среднее время визуальной реакции для нас составляет около 250 мс.
PS:если после напитков этого больше, пожалуйста, не садитесь за руль.
Код
- Код Arduino для измерения времени реакции.
Код Arduino для измерения времени реакции. Arduino
просто запустите код и откройте монитор последовательного порта.// установить номера контактов:const int buttonPin1 =4; // номер pinconst pushbutton1 int buttonPin2 =2; // номер pinconst pushbutton2 int buttonPin3 =7; // номер pinconst кнопки 3 int ledPin1 =8; // номер анода LED1 (+) pinconst int ledPin2 =12; // номер контакта анода (+) LED2 // Переменные изменятся:int ledState1 =LOW; // текущее состояние LED1int ledState2 =LOW; // текущее состояние LED2int buttonState1; // текущее чтение с входа pin1int buttonState2; // текущее чтение с входа pin2int buttonState3; // текущее чтение с входа pin3int lastButtonState1 =LOW; // предыдущее чтение с входа pin1int lastButtonState2 =LOW; // предыдущее чтение с входа pin2int lastButtonState3 =LOW; // предыдущее чтение с входного контакта 3 // следующие переменные являются длинными, потому что время, измеренное в микросекундах, // быстро станет большим числом, чем может быть сохранено в int.unsigned long lastDebounceTime =0; // последний раз, когда выходной вывод был включен на длительное время debounceDelay =20000; // время дребезга в микросекундах без знака long randNumber; // Сгенерированное случайное число без знака long minRandomNumber =2000; // минимальное число, используемое для указания диапазона случайных чисел без знака long maxRandomNumber =5000; // максимальное число, используемое для указания диапазона случайных чисел unsigned long time1, time2; int button3Pressed =LOW; int printcount =0; int takeReading =LOW; // следующая переменная помогает при чтении кнопок pinsint read1; int read2; int read3; / / следующая переменная помогает в чтении кнопки, соответствующей перикулярному светодиоду, т.е. LED1 -> BUTTON1 и LED2 -> BUTTON2int oddNumber; int evenNumber; void setup () {pinMode (buttonPin1, INPUT); pinMode (buttonPin2, ВХОД); pinMode (buttonPin3, ВХОД); pinMode (ledPin1, ВЫХОД); pinMode (ledPin2, ВЫХОД); // включение последовательной связи Serial.begin (115200); // устанавливаем начальное состояние светодиода digitalWrite (ledPin1, ledState1); digitalWrite (ledPin2, ledState2); // если аналоговый входной вывод 0 не подключен, случайный // аналоговый шум вызовет вызов randomSeed () для генерации // разных начальных чисел при каждом запуске скетча. // randomSeed () затем перемешает случайную функцию. randomSeed (analogRead (0));} void loop () {if (printcount ==0) {Serial.println («нажмите кнопку 3, когда будете готовы»); printcount =1; takeReading =LOW; // не читать кнопки номер 1 и 2 oddNumber =LOW; evenNumber =LOW; } если (button3Pressed ==ВЫСОКИЙ) {digitalWrite (ledPin1, LOW); digitalWrite (ledPin2, LOW); randNumber =random (minRandomNumber, maxRandomNumber); // в нашем коде мы сохранили их как от 2000 до 5000 delay (randNumber); если (randNumber &1 ==1) {digitalWrite (ledPin1, HIGH); digitalWrite (ledPin2, LOW); время1 =микросхема (); //Serial.println("ODD "); oddNumber =ВЫСОКИЙ; } else {digitalWrite (ledPin1, LOW); digitalWrite (ledPin2, HIGH); время1 =микросхема (); //Serial.println("EVEN "); evenNumber =ВЫСОКИЙ; } button3Pressed =НИЗКИЙ; } чтение3 =digitalRead (buttonPin3); // считываем button3 if (takeReading ==HIGH) {if (oddNumber ==HIGH) read1 =digitalRead (buttonPin1); если (evenNumber ==HIGH) read2 =digitalRead (buttonPin2); } // Если переключатель изменился из-за шума или нажатия:if (чтение1! =LastButtonState1 || чтение2! =LastButtonState2 || чтение3! =LastButtonState3) {// сбрасываем таймер устранения дребезга lastDebounceTime =micros (); } if ((micros () - lastDebounceTime)> debounceDelay) {// независимо от того, на каком уровне показания, оно было дольше, // чем задержка противодействия, поэтому принимайте это как фактическое текущее состояние:// если состояние кнопки имеет изменено:если (чтение1! =buttonState1) {buttonState1 =чтение1; // переключаем светодиод только в том случае, если новое состояние кнопки ВЫСОКОЕ if (buttonState1 ==ВЫСОКОЕ) {Serial.print ("Время вашей реакции:"); Serial.print (lastDebounceTime - time1); Serial.println («нас»); Serial.println (); printcount =0; }} если (чтение2! =buttonState2) {buttonState2 =чтение2; // включаем только светодиод, если новое состояние кнопки ВЫСОКОЕ if (buttonState2 ==ВЫСОКОЕ) {Serial.print ("Время вашей реакции:"); Serial.print (lastDebounceTime - time1); Serial.println («нас»); Serial.println (); printcount =0; }} если (чтение3! =buttonState3) {buttonState3 =чтение3; // переключение светодиода только в том случае, если новое состояние кнопки ВЫСОКОЕ if (buttonState3 ==ВЫСОКОЕ) {Serial.println ("READY TO GO"); button3Pressed =ВЫСОКИЙ; takeReading =HIGH; }}} // сохраняем чтение. В следующий раз в цикле // это будет lastButtonState:lastButtonState1 =reading1; lastButtonState2 =чтение2; lastButtonState3 =чтение3;}
Схема

Производственный процесс
- Пришло время заменить вилы вилочного погрузчика?
- Сигнал тревоги для растений, предупреждающий о жажде
- Итальянские часы со словами
- Только три контакта для клавиатуры 4x3
- Счетчик кВтч Sigfox
- Монитор температуры Bluetooth
- Блокировка, управляемая жестами
- Компаньон IC
- Изолированный аналоговый вход для Arduino
- Не пора ли обновить компрессор?