基于STEP Pico的嵌入式系统学习平台制作一个反应测试器
基于STEP Pico制作一个反应测试器,程序使用micropython编写,开发软件为thonny。
标签
嵌入式系统
MicroPython
树莓派PICO
2023寒假在家练
反应测试器
BIN
更新2023-03-29
北京理工大学
349

一、项目介绍

本次寒假一起练是基于树莓派Pico的嵌入式系统学习平台,此平台专为嵌入式系统学习而设计,可以通过C/C++以及MicroPython编程来学习嵌入式系统的工作原理和应用。这里我选择thonny作为开发软件,使用MicroPyhthon进行编程。

由于是嵌入式初学者,我选择了较简单的项目1-制作一个反应测试器。

具体要求:随机点亮板上的一个LED,按下板上的一个按键,在显示屏上显示出从灯亮到按键之间的时间,这是心理学上的一个重要实验

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

二、硬件介绍

平台包含:

树莓派Pico扩展板 x1

硬禾版本树莓派Pico核心模块 - STEP Pico x1

Type-C 数据线 x1

本次项目需使用:

k1按键

12个WS2812B RGB三色灯

128*64 OLED显示屏

三、设计思路

根据项目要求:

第一步、先产生1-12之间的一个整数,对应板子上围绕oled屏幕的12个led灯,并点亮;

第二步、观察者看到灯亮后,按下板子上的k1按键,表明接收到灯亮的信号并作出反应;

第三步、程序计算出灯亮至按下按键的时间,以毫秒表示,并在oled屏幕和电脑上显示,经过2-4秒后灯灭并点亮下一个灯,进行下一轮测试。

FiVzhpLj5otzs_bzYKO6leC-QgZL

四、代码实现

实现该项目要用到如下6个python文件,其中my_test_game.py文件是自己编写的。其他5个文件为电子森林的开源代码得到,初学时跟着寒假练平台提供的15节micropython课程(嵌入式系统入门 - 用树莓派Pico嵌入式系统学习板学用MicroPython编程 (eetree.cn)),代码文件可以在开源项目里面下载到https://gitee.com/picospuch/eetree-mpy-lecture-code

FsGM8PR4B-2BRi9m9fwqBqtFsn2n

my_test_game.py文件主要代码部分讲解:

while True:
    oled.fill(0)
    oled.show()
    ws2812b.on(random.randint(1,12),"ff0000")
    time_start = time.ticks_ms()
    time.sleep(random.uniform(2,4))
    ws2812b.off_all()

 

randint可产生随机整数,这里设定为1-12

ws2812b为灯亮和灯灭部分的库,ws2812b.on可点亮指定的一个led灯,ff0000为设定的灯的颜色(红色)

time_start = time.ticks_ms()   表示灯亮后开始计时

time.sleep(random.uniform(2,4))   让灯亮持续2-4秒后在灭,灯灭后立即进入下一轮测试

def k1_callback(pin):
    global time_start
    oled.fill(0)
    oled.show()
    reaction_time = time.ticks_ms() - time_start
    print(str(reaction_time) + "ms")
    oled.text(str(reaction_time) + "ms",32,0)
    oled.show()
    
k1 = button(pin_cfg.k1, k1_callback, trigger = Pin.IRQ_FALLING)

此部分为k1按键被按下后的反馈部分:

k1 = button(pin_cfg.k1, k1_callback, trigger = Pin.IRQ_FALLING)   此部分定义了k1在上升沿(按下)时运行k1_callback函数

reaction_time = time.ticks_ms() - time_start   计算反应时间

print(str(reaction_time) + "ms")

oled.text(str(reaction_time) + "ms",32,0)

oled.show()   将反应时间显示在电脑和oled屏幕上

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

在thonny中运行my_test_game.py文件,随机点亮一个led灯:

FhHCcv9CaEhV4zc6aX0G5zHVP5Bf

按下按键后oled屏幕显示反应时间:

FpdGyEkhkboUdGCJnRN-MoYCFB4S

同时电脑屏幕显示反应时间,此次测试的反应时间为793ms

Fur-r4QQ7bJIdY8NWzsdmwApahyC

六、遇到的主要难题及解决方法

此次项目也遇到了不少困难,具体如下:

1.在直播课时学习使用thonny,电脑可以识别pico的盘符,但是在thonny里找不到pico端口,提示解释器不匹配,且uf2文件拖进pico就断开,重启后uf2文件消失。

解决方法:按照直播课的方法,uf2文件拖进pico后就是会断开的,后面看了微信群大家的讨论,发现大家也有类似情况,thonny软件的右下角是可以配置解释器的,选择Paspberry Pi Pico后就可以了。

作为初学者,当时因为这个耽误了很长时间,及时交流沟通太关键了!

Fg1LhTzu_ru9pqtf9Q65d1WDo2sm

2.由于之前没有接触过python,有了设计思路后,不知道如何计算反应时间,怎么去实现。在看了赠送的 micropython课程后,才知道有time.ticks_ms这样的函数,为了让按下按键后屏幕有显示,可以设置k1_callback函数。

七、未来的计划

目前只完成了最简单的一个项目,在后面的学习中会继续完成后面的项目,学海无涯。通过这次学习,发现python学习起来挺容易的,而且有很多库,方便调用,未来也会自学一些python的编程。

 

 

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