基于树莓派Pico嵌入式系统学习平台制作一个反应测试器
2023年寒假在家一起练的平台之一,购买板卡即可参加活动,并附赠15节MicroPython编程课程的学习。 开发项目随机点亮板上的一个LED,按下板上的一个按键,在显示屏上显示出从灯亮到按键之间的时间。
标签
嵌入式系统
2023寒假在家练
mini城
更新2023-03-29
1010

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. 框图和软件流程图

Fl5_GgZAWwNGsDHb-p9PGmPLG4xX


 

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

FoEJKVTW8a7x814mIC8f1RER4QAU


 

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. 遇到的主要难题及解决方法  

  1. 题目被我曲解为亮灯到按按钮中间的时间差,观看老师视频后发现问题解决问题。
  2. top状态栏一直留给实时时间显示,但是没有实现实时更新,解决的办法就是使用多线程<_thread> or <threading>处理同步问题。
  3. 对类的继承运用很差,无法用更简洁的代码实现目的,非常头疼。只能多看多练。

 


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
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号