用树莓派PICO制作一个反应测试器
设计思路首先是点亮LED灯,在树莓派PICO上共有四个颜色的灯。先调用随机函数来产生一个随机数,控制一个灯的亮起。在LED亮起之后计时,被测试者在看到灯亮起之后按下K1键,再进行计时,将两次的计时点相减计算出看到LED灯亮起后的反应时间
标签
嵌入式系统
MicroPython
树莓派PICO
2022寒假在家练
陈瑞cr
更新2023-03-29
北京理工大学
502

用树莓派PICO制作一个反应发生器

一.项目介绍

该项目是制作一个简单的反应测试器。反应测试器,顾名思义为测试人反应速度的仪器。这是心理学上的一个重要实验。心理学家在对人的反应时间进行测试后发现,一般人的反应时间都大于0.1s,也就是100ms;反应时间和人的状态、心情有很大的关系, 一般心情好的时候比心情差的时候反应快,兴奋的时候比沮丧的时候反应快;比如人在没睡醒或酒后反应时间会大大延长,一般人的反应时间为0.2秒-0.4秒。本次项目通过随机点亮板上的一个LED,再按下板上的一个按键,在显示屏上显示出从灯亮到按键之间的时间,即为人的反应时间。

二.设计思路

项目的设计思路首先是点亮LED灯,在树莓派PICO上共有四个颜色的灯,分别是Yellow,Green,Red,Blue。需要先调用random随机函数来产生一个随机数,进而随机控制一个灯的亮起,从而实现一个随机LED的亮起。

在LED亮起之后进行计时,被测试者在看到灯亮起之后按下K1键,再进行一次计时,将两次的计时点相减从而计算出被测试者在看到LED灯亮起之后的反应时间

三.软件流程概述

产生随机数→随机控制一个LED灯的亮起(time-start灯亮时刻)→按下按键K1(按键时刻)→time.ticks_ms()→OLED输出时间差值(反应时间)

  1. 简单的软件与硬件介绍

软件:thonny

本项目使用的开发软件是thonny,作为官方推荐使用的开发软件,thonny的调试器是专为学习和教学编程而设计的,具有页面简洁,基础功能齐全,简单易上手,对初学者十分友好的特点。

硬件:基于树莓派Pico的嵌入式系统学习平台

本项目使用的硬件是基于树莓派Pico的嵌入式系统学习平台,平台包括硬禾版本树莓派pico核心模块和树莓派pico扩展板。树莓派PICO核心板块是一款低成本,高性能的微控制器开发板,具有灵活数字接口,硬件上采用Raspberry Pi官方自主研发的RP2040微控制器芯片,搭载了ARM CortexM0+双核处理器,高达133赫兹的运行频率,内置了264KB SRAM和2 MB 闪存,还板载有多达26个多功能的GPIO引脚。硬件开发软件可以选择C语言/C++SDK,或者使用microPython,可以快速入门实现开发。

核心板引脚图

9KEu1P2b7XsAAAAASUVORK5CYII=

39TfjSP0YdmBAAAAABJRU5ErkJggg==

  1. 项目功能的实现与展示

本次项目设计实现了要求的全部功能。在程序开始运行之后,预备了三秒的缓冲时间给被测试者,在三秒之后,随机点亮红、蓝、黄、绿四个LED中的一个,之后被测试者在按下K1键之后,在OLED屏幕上显示被测试者的反应时间。

IMG_20230315_135311

LED黄灯亮起之后,被测试者按下K1键,OLED屏幕上显示反应时间为689ms

代码展示主要包括三部分

6CNL3KU6YA5{9NSG@S%77FP

第一部分为从库中调取函数

C@A@@5XOIFJJV)XF]%2~2`T

第二部分为定义三个函数

clear清屏函数

在按下K1键之后清楚OLED屏幕上的数字,防止数字叠加

print_result 打印函数

在OLED屏幕上打印出反应时间并显示

K1_callback 按键回调函数

按下K1按键之后,将两次时间进行作差最后计算出反应时间

FB~ZLL19P8RXZ96IP6`A)FB

第三部分进行程序主要的循环

主要用于随机数的产生以及控制灯的亮起与熄灭

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

对于本次项目设计,其实在最开始拿到开发板时,我还是一头雾水的状态,完全不知道从何下手。但是当我观看完平台赠送的MicroPython编程课程指导之后,我又对本次项目设计重拾起了信心。课程的讲述通俗易懂,深入浅出,使我很快对树莓派PICO产生了浓厚的兴趣和想要一展身手的强烈欲望。而随着课程的逐渐深入和对项目设计的逐渐完善,问题也接踵而至。

首先的问题便是如何随机控制LED灯的亮起与熄灭。在对随机函数进行深入学习之后,我也熟练掌握了控制LED灯的亮起,而灯的熄灭问题也是在我充分理解了time.sleep函数后迎刃而解。

之后的问题便是如何在OLED屏幕上显示反应时间。如何获取这个反应时间呢?在我对time.ticks_ms()这个函数有了充分的认识与理解之后,timer_start记录LED灯点亮时的数值,在按键后返回time.ticks_ms()与timer_start的差值,即得LED从点亮到接收到按键之间的时间差。而在得到了反应时间后,如何正确的显示在OLED屏幕上又困扰住了我。因为我发现在第二次显示反应时间时,两次的数字叠加在了一起,在我查阅资料后了解到要清空上一次OLED屏幕上的数字,这样一来,问题也就得到了完美的解决。

  1. 未来的计划和建议

对于这次树莓派PICO的学习与研究,让我对数字电路产生了浓厚的兴趣,也是第一次自主的学习知识再将其投入到实践与应用中,让我产生了难以言表的自豪与满足感。

我殷切期盼这次的项目设计在审核阶段能获得成功,既是对我这段时间学习成果的肯定,也能更加鼓舞我在之后的学习生涯中不断向前,锐意进取。

最后的建议,从我出发,我认为这样富有意义的学习活动贵平台可以多多举行,让更多的学子提高自己,充实自己,为以后的学习生活打下坚实的基础。

感谢!

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