亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

测量你的反应时间

组件和用品

按钮
× 3
5 毫米 LED:红色
× 2
公/公跳线
× 1
面包板(通用)
× 1
Arduino UNO
× 1
USB-A 转 B 线
× 1
电阻 100 ohm
× 2
电阻 10k ohm
× 3

应用和在线服务

Arduino IDE

关于这个项目

我正在阅读一些文章,其中作者试图对反应时间对运动员、狙击手、板球运动员和棒球运动员的生活的影响留下深刻印象。最后他总结了它对正常人生活的影响,我很惊讶地看到反应时间对我们的日常生活有很多影响。

例如,驾驶时比正常反应时间慢可能会导致严重后果。

我想,如何衡量我的反应时间?

结果如下。

第 1 步:我们需要的东西

以下是我们需要测量反应时间的清单。

硬件:

软件:

  • Arduino IDE

上述组件必须放在电子爱好者的地板上:)

如果您对任何组件有疑问,请查看图像。

第 2 步:我们测量反应时间 (RT) 的程序是什么?

我们的人体涉及许多反应时间。我们有音频 RT、视觉 RT、Touch RT 等等。在本教程中,我们将研究测量

视觉反应时间。

测量视觉反应时间的程序:

  • 在 Arduino 的串行监视器上弹出一条消息“当你准备好时按下准备按钮”
  • 当被测者按下准备按钮时,经过一段随机时间间隔后,两个 LED 之一必须随机点亮。
  • 被测者应尽快按下相应的按钮。
  • Arduino 会记录 LED 亮起与人按下相应按钮之间的时间差。
  • 将测量到的反应时间的消息放在 Arduino 串行监视器上。

让我澄清一下,从我提到的硬件组件列表中,在 3 个按钮中,一个按钮将用作准备按钮,其余两个按钮将

对应两个 LED,即 LED1-->BUTTON1、LED2-->BUTTON2。这意味着如果 LED1 点亮被测者应该按下 BUTTON1 类似的情况

LED2.

第 3 步:把东西放在一起

在上图中,您可以看到电路的构造。让我在这里提几点。

  • 将 arduino 板的 5V 和 GND 连接到面包板。
  • 通过限流 100 欧姆电阻器连接两个 LED 的阴极。
  • 将 LED1 和 LED2 的阳极分别连接到引脚 8 和 12。
  • 如图所示的插件按钮。 (如果按钮打开时按钮,两侧引线短路,按下按钮时对角引线
  • 短路)
  • 如图所示连接 10K Ohm 电阻,用作下拉电阻。
  • 将其他导线连接到面包板上的 5V 电源轨。
  • 最后将按钮连接到 Arduino 板的 2、4 和 7 号引脚。

请注意: 我上面提到的引脚编号可以根据您的选择而有所不同,我刚刚提到了我的偏好。


第 4 步:让我们编码

我已经附上了 Arduino 代码,你可以下载并开始玩,但我建议你自己写。以下是您在编写代码时需要牢记的几点。

  • 注意取消按钮。
  • 注意代码应在测量反应时间方面提供良好的分辨率。
  • 使用串行监视器进行调试以及人机界面。

如果您对上述任何步骤有疑问,请查看附件视频。

第 5 步:测试时间

一切就绪,打电话给你的朋友,看看谁跑得最快。准备图表取平均值(最好让 arduino 这样做)并宣布获胜者。我附上了我的演示视频,请随意观看。我们的平均视觉反应时间约为 250 毫秒。

PS:如果酒后超过这个,请不要开车。


代码

  • 用于测量反应时间的 Arduino 代码。
用于测量反应时间的 Arduino 代码。Arduino
只需运行代码并打开串行监视器。
// 设置引脚编号:const int buttonPin1 =4; // pushbutton1 pinconst int buttonPin2 =2; // pushbutton2 pinconst int buttonPin3 =7; // pushbutton3 pinconst 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 读取的数据; // 之前从输入 pin3 读取的数据// 以下变量是 long 的,因为时间(以微秒为单位)// 将很快变成一个比 int.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;//以下变量帮助读取按钮pinsint reading1;int reading2;int reading3;/ /以下变量帮助读取与特定 LED 对应的按钮,即 LED1 --> BUTTON1 和 LED2 --> BUTTON2intoddNumber;int evenNumber;void setup(){ pinMode(buttonPin1, INPUT); pinMode(buttonPin2,输入); pinMode(buttonPin3,输入); pinMode(ledPin1,输出); pinMode(ledPin2,输出); //启用串行通信Serial.begin(115200); // 设置初始 LED 状态 digitalWrite(ledPin1, ledState1);数字写入(ledPin2,ledState2); // 如果模拟输入引脚 0 未连接,随机模拟 // 噪声将导致对 randomSeed() 的调用在每次草图运行时生成 // 不同的种子编号。 // randomSeed() 然后将随机函数打乱。 randomSeed(analogRead(0));} void loop() { if(printcount ==0) { Serial.println("准备好后按下按钮 3");打印计数 =1; takeReading =低; // 不读取按钮编号 1 和 2oddNumber =LOW;偶数 =低; } if( button3Pressed ==HIGH) { digitalWrite(ledPin1, LOW);数字写入(ledPin2,低); randNumber =random(minRandomNumber,maxRandomNumber); //在我们的代码中,我们将它们保留为 2000 到 5000 delay(randNumber); if (randNumber &1 ==1) { digitalWrite(ledPin1, HIGH);数字写入(ledPin2,低);时间 1 =微秒(); //Serial.println("奇数");奇数 =高; } else { digitalWrite(ledPin1, LOW);数字写入(ledPin2,高);时间 1 =微秒(); //Serial.println("偶数");偶数 =高; } button3Pressed =低; } reading3 =digitalRead(buttonPin3); //读取 button3 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) { // 无论读数是什么,它在那里的时间都比去抖动延迟要长 // 所以把它作为实际的当前状态: // 如果按钮状态有改变:如果(reading1 !=buttonState1){ buttonState1 =reading1; // 只有在新按钮状态为 HIGH 时才切换 LED if (buttonState1 ==HIGH) { Serial.print("你的反应时间是:"); Serial.print(lastDebounceTime - time1); Serial.println("我们"); Serial.println();打印计数 =0; } } if (reading2 !=buttonState2) { buttonState2 =reading2; // 只有在新按钮状态为 HIGH 时才切换 LED if (buttonState2 ==HIGH) { Serial.print("你的反应时间是:"); Serial.print(lastDebounceTime - time1); Serial.println("我们"); Serial.println();打印计数 =0; } } if (reading3 !=buttonState3) { buttonState3 =reading3; // 只有在新按钮状态为高时才切换 LED if (buttonState3 ==HIGH) { Serial.println("READY TO GO"); button3Pressed =HIGH; takeReading =HIGH; } } } // 保存读数。下一次循环时, // 它将是 lastButtonState:lastButtonState1 =reading1; lastButtonState2 =reading2; lastButtonState3 =reading3;}

示意图


制造工艺

  1. 是时候更换您的叉车货叉了吗?
  2. 干渴警报植物警报
  3. 意大利字时钟
  4. 4x3 键盘只有三个引脚
  5. Sigfox kWh Meter
  6. 蓝牙温度监视器
  7. 手势控制锁
  8. 伴侣 IC
  9. USB MIDI 适配器
  10. Arduino 的隔离模拟输入
  11. RGB 32-Band Audio Spectrum Visualizer
  12. 是时候升级您的压缩机了吗?