Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Точный тест времени реакции на Arduino UNO

Компоненты и материалы

Тактовые кнопки × 3
Светодиод 5 мм красный × 2
Провода male-male × 1
Макетная плата × 1
Arduino UNO × 1
USB A-B кабель × 1
Резистор 100 Ом × 2
Резистор 10 кОм × 3

Приложения и сервисы

О проекте

Читал статью о влиянии времени реакции на жизнь спортсменов, снайперов, крикетистов, бейсболистов. Автор заключил: реакция влияет и на обычных людей. Например, задержка реакции за рулём — трагичные последствия.

Подумал: как измерить свою реакцию? Результат ниже.

Шаг 1: Необходимые детали

Железо:

Точный тест времени реакции на Arduino UNO
Точный тест времени реакции на Arduino UNO
Точный тест времени реакции на Arduino UNO
Точный тест времени реакции на Arduino UNO
Точный тест времени реакции на Arduino UNO
Точный тест времени реакции на Arduino UNO
Точный тест времени реакции на Arduino UNO

Софт: Arduino IDE.

Все компоненты, скорее всего, лежат у любого радиолюбителя. Если что-то непонятно — смотрите фото.

Шаг 2: Процедура измерения визуального времени реакции

Существует много видов реакции: аудиальная, визуальная, тактильная. Здесь — визуальная.

Алгоритм:

  1. Вывод в Serial Monitor: «Нажмите кнопку готовности, когда готовы».
  2. После нажатия кнопки готовности — случайная пауза, затем случайно загорается один из двух светодиодов.
  3. Испытуемый должен как можно быстрее нажать соответствующую кнопку (LED1 → Кнопка1, LED2 → Кнопка2).
  4. Arduino измеряет разницу между зажиганием LED и нажатием кнопки.
  5. Результат выводится в Serial Monitor.

Из 3 кнопок: одна — «Готов», две другие — под светодиоды.

Точный тест времени реакции на Arduino UNO

Шаг 3: Сборка схемы

На фото выше — схема. Основные моменты:

Примечание: номера пинов могут быть любыми — я указал свои.

Точный тест времени реакции на Arduino UNO

Шаг 4: Программирование

Код прилагается, но лучше написать самому. Ключевые моменты:

При сомнениях — смотрите видео.

Шаг 5: Тестирование

Всё готово. Зовите друзей — устраиваем соревнование. Записывайте результаты, считайте среднее (лучше пусть считает Arduino) и объявляйте победителя. Мой демо-ролик прилагается. Среднее визуальное время реакции ~250 мс.

P.S. Если после алкоголя больше — не садитесь за руль!

Код

Arduino код для измерения времени реакции Arduino

Запустите код и откройте Serial Monitor.

// 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; // мкс
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;
}

Схемы

Точный тест времени реакции на Arduino UNO

Производственный процесс

  1. Когда заменять вилы погрузчика: практическое руководство
  2. Умный датчик полива «Thirst Alert» на Arduino — DIY сигнализация засухи для растений
  3. Итальянские словесные часы на Arduino Nano, NeoPixel, LCD и RTC
  4. Экономия пинов Arduino: подключение 4×3 клавиатуры по трём аналоговым входам
  5. Надежный счетчик кВт·ч на Sigfox с Arduino MKR Fox 1200
  6. Bluetooth-монитор температуры на Arduino Nano с NTC-термистором
  7. Бесконтактный жестовый замок: APDS-9960 + Arduino для безопасного доступа
  8. Набор-компаньон для Arduino Nano — необходимые компоненты и инструменты для DIY-электроники
  9. Гальванически разделённый аналоговый вход для Arduino на LM331 и оптопаре 4N25
  10. Пора ли обновить компрессор? Распознайте признаки вовремя