基于STEP Pico设计反应时间测试器
参加”寒假在家一起练“项目,基于STEP Pico设计反应时间测试器,通过thonny编程,基于开发板完成设计
标签
嵌入式系统
FPGA
USB
2023寒假在家练
ybd
更新2023-03-29
北京理工大学
368

                                              硬禾学堂“寒假练”活动总结报告

 1、项目介绍

我本次参加硬核组织的寒假在家一起练项目,选择的是STEP pico的嵌入式板块,这个开发版虽然说是比较初级的版本,但是还是麻雀虽小,五脏俱全,具有蜂鸣器开关,LED灯等各种的控制元件,然后在听了老师的讲解之后,我选择了完成任务1,也就是做一个基本的反应时间测试游戏。

反应测试器这个项目的基本要求是首先在板子上随机点亮一个LED灯,然后由测试者进行按键,在电脑端显示出这两者之间的时间差。

    2、设计思路

我首先想到板子上有两个开关,那么我大概的先将其中开关k2定为重启开关,开关k2定为反应开关,那么我只需要在按一下k2后产生一个随机数作为时间,然后在随机的一小段时间后进行亮灯,并然后再测量出按下k1的时间,通过这两者的时间差,我就可以完成这个设计任务。

Z具体的过程为在版件上按下k2后,led版上显示出“start”字样,然后在等待一个随机时间后,板卡上的12个led灯中的随机一个led灯会亮起,测试者应该尽快的按下k1按钮,其中的时间差就记录为反应时间,并显示在pc端。

  

但是我立刻遇到了一个问题,就是代码的执行都是一次性的,怎么能让程序处于“等待”状态,一直检测按键的输入呢?经过查找资料,最终我学会了用while true语句来实现上述功能,同时,我也详细阅读了板载的各种库函数,对基础功能比如开灯、关灯、显示文字等功能的调用有了一点自己的理解。

 3、硬件介绍

IdcGzg0yBSNblajnL6cX+DCGLO5rgw08uFKMuY4QQQgghhBAyHqGMEUIIIYQQQsgoQBkjhBBCCCGEkFGAMkYIIYQQQgghowBljBBCCCGEEEJGAcoYIYQQQgghhIwClDFCCCGEEEIIGQUoY4QQQgghhBAyClDGCCGEEEIIIWQUoIwRQgghhBBCyChAGSOEEEIIIYSQUYAyRgghhBBCCCGjAGWMEEIIIYQQQkYByhghhBBCCCGEjAKUMUIIIYQQQggZBShjhBBCCCGEEDIKUMYIIYQQQgghZBSgjBFCCCGEEELIKEAZI4QQQgghhJBRgDJGCCGEEEIIIaMAZYwQQgghhBBCRgHKGCGEEEIIIYSMApQxQgghhBBCCBkFKGOEEEIIIYQQMgpQxgghhBBCCCFkFKCMEUIIIYQQQsgoQBkjhBBCCCGEkFHgNBm7gTJGCCGEEEIIIReEPhmbIP8P5+veTEyippgAAAAASUVORK5CYII=本次项目我使用的开发板是基于STEP Pico的开发板,这是一款专为嵌入式系统学习而设计,其可以通过C/C++以及MicroPython编程来学习嵌入式系统的工作原理和应用。,开发板包含2个按键输入、4个单色LED、12个WS2812B RGB三色灯、1个姿态传感器、1个128*64 OLED显示屏、1个蜂鸣器、1个可调电位计(用于电压表)、1路音频信号输入(用于示波器)、8位R-2R电阻网络构成的DAC(用于DDS信号发生器)。

STEP Pico是一款低成本、高性能的微控制器看i发版,具有灵活的数字接口,硬件上,采用Raspberry PI官方自主研发的RP2040微控制器芯片,搭载了

ARM Cortex双核处理器,高达133hz的运行频率,内置了264kb SRamh和2mb闪存,还板载了有多达26个多功能的GPIO引脚,软件上,可选择树莓派提供的C/C++SDk,或者使用micropython进行开发,且配置有完善的开发资料教程,可方便使用者快速入门并进入嵌入式产品的学习中,成为电子行业的一员。

 

4、实现的功能

实现的功能是在按下k2按键后屏幕显示“开始”,随机点亮1个led灯,再按下k1后,记录间隔时间并反应在电脑上。

这其中需要调用基础的板件功能,例如按键,板载的一些函数,接下来是演示照片:

8HsqCmF45ZbXYAAAAASUVORK5CYII=

zmnSdPTqptPOPUcoTen5ycrOn5fJ4NEM9J57T3f5xE7HSBk+RFAAAAAElFTkSuQmCC

 

Z

  1. 代码段说明
import ws2812b
from oled import oled
from button import k1,k2
from board import pin_cfg

import time
from machine import Pin
import random
##(这里是先加载一些基础的库函数和开发板驱动,本次项目只需要调用k1和k2两个按钮)
end_time=0
start_time=0
while True:
     if k2.value():##这里检测k2是否按下,开始执行检测反应时间游戏
         random_time=random.uniform(1,3)
         random_led=int(random.uniform(0,12))
         time.sleep(random_time)##产生随机的亮灯位置序号和等待时间
         ws2812b.on(random_led)
         start_time=time.ticks_ms()
         oled.text("start!",12,20)
         oled.show()
         while True:
           if k1.value():##检测k1是否按下,记录按下时间
             end_time=time.ticks_ms()
             ws2812b.off(random_led)
             break
         react_time=end_time-start_time
         oled.text("Teact time is"+str(react_time)+" ms",12,20)##计算反应时间并显示
         oled.show()
         print("Teact time is"+str(react_time)+" ms")
        
         print("game over!")
         time.sleep(0.3)
            
            




  1. 遇到的主要难题及解决方法

但是实际上这个思路实际实行起来还是有一定的困难,比如说在测量k1的按一下k1的时间的时候,我发现我无论写下怎样的命令,他都会立刻执行过去,而达不到一个一直处在检测状态的效果,因此在我咨询了硬核老师的之后,他告诉我可以采用,去执行一个一直循环的语句,就可以达到一时检测的效果

其次就是我对于板子中一些本来就包含在库里的函数,不够熟悉,这也需要我们在后面加强锻炼,努力的花时间,仔仔细细的去阅读代码。

  1. 未来的计划

  对于本项目还可以进行一些更为广阔的改良,由于开发板给我们提供了许多额外的硬件,因此我们还可以用上板上的,比如说其他的一些小灯或者不明显,来作为语音信号的输出,对我们的反应测试游戏进行测试,我们同时在编程上也应该更加仔细,例如本次编的项目可以通过一直案件的方式来使反应时间达到很短的,程度这显然不是我们开发者初中所希望的,因此在编程时更应该谨慎去考虑到各种多种多样的输出情况,尽量使自己的程序没有漏洞。

在未来我应该抓住暑期期间的机会,尽可能多的去参加此类有意义的,能提升自己综合素养的活动,努力锻炼自己的专业技能,并且在这样寓教于乐的活动中学到更多难能可贵的知识,一定会尽力锻炼自己,使自己能够成为一名有用的人,我的理想是成为一名电子工程师,为社会贡献出自己的价值,为祖国的建设添砖加瓦,同时我也会在我日后的学习和假期中更加积极的参与课外活动,尤其是像硬核平台所组织的这样,既有实践意义又能锻炼我们专业知识的活动

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