用基于STEP-Pico制作一个反应测试器
随机点亮板上的一个LED,按下板上的一个按键,在显示屏上显示出从灯亮到按键之间的时间
标签
嵌入式系统
测试
显示
2022寒假在家练
fincy
更新2023-03-29
北京理工大学
375

  2023寒假一起练活动

 

1、项目介绍

随机点亮板上的一个LED,按下板上的一个按键,在显示屏上显示出从灯亮到按键之间的时间,这是心理学上的一个重要实验,人类的反应时间:一般人的反应时间应该在0.2秒以上,经过训练的运动员应该也不会低于0.1秒。

反应时间概述

反应时间(reaction time, RT)是心理实验中使用最早、应用最广的反应变量之一。反应并不能在给予刺激的同时就发生。反应时间是指从刺激的呈现到反应的开始之间的时距。刺激施于有机体之后到明显反应开始所需要的时间。速度素质是指人体进行快速运动的能力, 即在单位时间内迅速完成某一动作或通过某一距离的能力。它包括反应速度, 动作速度和周期性运动的位移速度。反应速度是速度素质中的一个重要的部分, 反应速度是指人体对刺激发生反应的快慢。从生理机制分析, 反应快' 曼取决于“ 反射弧” 的五个环节: 感受器一一传入神经一一中枢严格一一传出神经一一效应器。反应速度通常用“ 从刺激到开始发生反应的时间” , 即反应时来衡量。

目前, 国内外常用反应时指标研究运动员的机能状态及心理活动过程。反应速度是人类的基本生理素质之一反应测试系统这个题目的提出是建立在学习接口技术课程的基础上。通过课程的学习, 对计算机接口技术中各个重要的接口芯片内部原理, 实现功能有了一定程度的掌握。在此之上, 提出在接口技术范畴内一些较为复杂的仪器设计, 主要复杂在进行多个芯片。功能的组合以实现更为高级实用的功能。反应测试仪能够定量的测试人的反应速度。利用这种仪器, 可以在人才的选拔中起到积极地作用。例如选择少年体育运动员, 舞蹈, 杂技, 魔术学员及其他要求机敏素质的培养对象时, 可以提供科学的数据。所以, 反应测试仪的潜在实用价值极大。并且,在计算机专业中, 反应测试仪的提出,主要对计算机接口的芯片的控制和计算功能提出更高要求。

2、设计思路

通过软件产生随机数,程序启动以后在随机数控制的时间下点亮板上的LED,被测试者按下按键以后,处理器计算从点亮灯到接收到按键之间的时间差,并将时间差通过USB显示在PC上,也可以将OLED用起来,在OLED上显示时间信息。

3、软件流程图

Fm6ptrpTKaHAMVBSSAcHpMh63JLP

4、简单的硬件介绍

【基于STEP Pico的嵌入式系统学习平台】专为嵌入式系统学习而设计,其可以通过C/C++以及MicroPython编程来学习嵌入式系统的工作原理和应用。

2个按键输入

4个单色LED

12个WS2812B RGB三色灯

1个姿态传感器

1个128*64 OLED显示屏

1个蜂鸣器

1个可调电位计(用于电压表)

1路音频信号输入(用于示波器)

8位R-2R电阻网络构成的DAC(用于DDS信号发生器)

本项目使用的主要是一个按键输入、1个128*64 OLED显示屏、一个单色led灯。

 

5、实现的功能及图片展示

项目运行开始后,首先计算出随即数,led灯光经过随机时间熄灭后,亮起灯光,人眼观察到亮起的led灯,迅速按下按钮,此处检测下降沿触发,可以通过计算按下按钮的时间与灯光亮起的时间来计算人的反应时间

FsOdq3OFOGeHrPeeYLJS5ktFSY8L

记录每次的时间差在电脑端

FtlNNJe5oyz4MtMp1w0TibUqdMAz

 

6、主要代码段

K1的回调函数如下,主要是按下k1后计算当前时间,然后计算时间差,最后通过oled.py将结果显示在oled屏幕上。oled显示没有再单独调用一个函数,而是直接在回调函数中使用

def k1_callback(pin):

    global T1

    #print('k1 is run')

    T2 = time.ticks_ms()

    action_T = T2 - T1

    #print(T1)

    # print(T2)

    print(str(action_T)+'ms')

    oled.fill(0)

    oled.show()

    oled.text(str(action_T)+"ms",32,16)

    oled.show()

    pass


k1 = button(pin_cfg.k1,k1_callback,trigger=Pin.IRQ_FALLING)

 

主函数如下,主要是蓝灯的亮灭与随机时间的产生

while True:

    rt = random.randint(2,5) ##生成随机数

    time.sleep(rt)

    r = Pin(pin_cfg.blue_led, Pin.OUT)

    r.on()

    T1 = time.ticks_ms()       ##灯亮开始计时

    #time.sleep(5)

    r.off()

7、遇到的困难及解决方法

遇到的困难,灯亮起时候是在主函数里面,然后按按钮打断时候是在k1的回调函数中,两个时间的时间差计算的很麻烦,还需要函数之间传递数值,最后直接将两个时间设为全局变量,完美解决。

最开始用oled包的时候导入错了,在app里面找了一个同名的,最后在broad里重新找了一遍才找到正确的包。

8、未来的计划或建议

灯光可以改为随机亮起不同的小灯。

可以将几次的反应时间收集起来,最后再排除一些不正常的值(比如排除0.1s以下的值排除500ms以上的值),计算平均值,得到更加准确的反应时间。

可以将回调函数写两个,然后同时计算两个人的反应时间,比较大小。

可以加入报错机制,如果使用者提前按下按钮,就会报错,并且将错误结果显示在oled屏幕上面。

 

附件下载
actiom_time.py
团队介绍
北京理工大学电子信息工程大四学生李石磊
团队成员
fincy
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号