内容介绍
视频课程
内容介绍
1. 项目描述
随机点亮板上的一个LED,按下板上的一个按键,在显示屏上显示出从灯亮到按键之间的时间。
2. 项目介绍
制作一个反应测试器利用树莓派Pico开发板上的led、olde、按钮来实现监测人的反应时长。通过软件产生随机数,程序启动以后在随机数控制的时间下点亮板上的LED,被测试者按下按键以后,处理器计算从点亮灯到接收到按键之间的时间差,并将时间差在OLED上显示。
3. 设计思路
需要用到的库machine、random、time、ws2812b。
首先用ws2812b库实现led点亮,之后用random库求导<1 ≤ x ≤ 12>的随机正整数,利用得到的随机数点亮对应led灯,使用time库中的sleep函数控制led亮灯时间,亮灯之后用time库的ticks_ms函数求得开始时间,当按下按钮时再求得结束时间并灭灯,求出结束时间和开始时间的差,就是实际的反应时间了。
4. 框图和软件流程图
5. 简单的硬件介绍
- 1个128*64像素 OLED显示屏
- 12个WS2812B RGB三色灯
- 4个单色LED(Y、R、G、B)
- 2个按键输入
- 1个姿态传感器
- 1个蜂鸣器
- 1个可调电位计
- 1路音频信号输入(mic)
- 8位R-2R电阻网络构成的DAC
6. 实现的功能及图片展示
开机后随机点亮板上一个LED,在灯灭后开始计时,当按下板上的<k1>按键后,在oled上会显示出从灯灭到按键之间所用的时间。在休眠5秒后循环测试。当按下<k2>按键,循环False,再次按键将True
7. 主要代码片段及说明
def time_start():
global start
start = time.ticks_ms() #计时
def button_k1(pin): #按钮k1
global start #全局变量
led_off() #按k1,led灭灯
top_state() #顶部状态栏
oled.fill_rect(0, 10, 128, 64, 0)#清理除顶部状态栏以外的区域
oled.text('Reaction Time',0,12)
oled.text('was:%d ms'%(time.ticks_ms()-start),0,24)#结束计时,同时计算时间差写入缓存
print('reaction time was:%d ms'%(time.ticks_ms()-start))#时间差打印在pc终端
oled.show() #将缓存内容显示在oled屏
def led_on(): #led开合函数
global number
wb.on(number)
def led_off(): #led闭合函数
global number
wb.off(number)
k1 = button(pin_cfg.k1,button_k1,trigger=Pin.IRQ_FALLING)
k2 = button(pin_cfg.k2,button_k2,trigger=Pin.IRQ_FALLING)
start = 0
system = True #控制开关
number = random.randint(1,13) #随机<1-12>整数
def main(): #主函数
while True: #循环主程序
while system: #变量控制循环
screen() #oled显示
time.sleep(random.uniform(1,3)) #取随机浮点数控制睡眠时间
led_on() #led亮灯
time_start() #led亮灯后开始计时
time.sleep(5) #睡眠时间
8. 遇到的主要难题及解决方法
- 题目被我曲解为亮灯到按按钮中间的时间差,观看老师视频后发现问题解决问题。
- top状态栏一直留给实时时间显示,但是没有实现实时更新,解决的办法就是使用多线程<_thread> or <threading>处理同步问题。
- 对类的继承运用很差,无法用更简洁的代码实现目的,非常头疼。只能多看多练。
9. 未来的计划或建议
- 对于python中类、函数的应用还不是很熟悉,需要更多积累和训练,希望可以掌握更便捷的方式编写代码。
- 关于反应测试应用,可以添加一个排行榜,增加趣味性
- 可以添加一个loding,好看的图片或者动图
- 开机可以添加一个启动声音,增强互动性
- led灯可以根据音乐声音设计闪烁状态增强互动性
软硬件
元器件
RP2040
树莓派基金会推出的双核Arm Cortex M0+微控制器,133MHz时钟速率,264KB SRAM,支持C/C++、MicroPython编程
LMV358
双路低电压轨到轨输出运算放大器
ADA4891-1
低成本CMOS、高速、轨到轨放大器, 2.7 V至5.5 V, −3 dB带宽:240 MHz (G = +1),压摆率:170 V/μs
MMA7660
重力感应传感器 - 3-Axis Orientation/Motion Detection Sensor
TPH2501
250MHz,精密,轨到轨I/O, CMOS运算放大器
WS2812B
WS2812B是一款智能控制LED光源,它将控制电路和RGB芯片集成到5050组件包中。它包括智能数字端口数据锁存器和用于放大驱动器的信号整形电路。它还包括一个内部精密振荡器和一个恒流5电压控制端口,以确保一致的像素点光颜色高度。这些可以添加到全彩面板、条状全彩软灯、led装饰照明和不规则视频室内外led屏幕。
SSD1306
OLED控制器 - 支持128*32、128*64 OLED显示屏
Buzzer -蜂鸣器
一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。
电路图
附件下载
project.7z
团队介绍
没有团队,个人对嵌入式开发感兴趣
评论
0 / 100
查看更多
猜你喜欢
基于树莓派Pico嵌入式系统学习平台制作一个反应测试器2023寒假在家一起练活动。选择项目为设计一个反应检测器。具体进程是先随机点亮板上的一个LED,按下板上的一个按键,在显示屏上显示出从灯亮到按键之间的时间,这是心理学上的一个重要实验。
mxy_
791
基于树莓派Pico的嵌入式系统学习平台制作一个反应测试器在树莓派Pico的嵌入式系统学习平台,通过MicroPython编程完成制作一个反应测试器
于天星
715
基于树莓派Pico的嵌入式系统学习平台制作一个反应测试器基于树莓派Pico的嵌入式系统学习平台,利用平台LED显示、按键输入响应、OLED显示等功能,制作一个简易的反应测试器。
mushed-potato
692