FastBond2阶段2-基于模拟按键的控制LED闪烁方式装置
Click板与十二指神探对应接口连接,使用Click板上的六个模拟按键来控制十二指神探上LED灯的闪烁方式。每个按键对应一种闪烁模式,按下相应的按键后,LED灯将根据所选模式进行闪烁。实现了三种不同的闪烁方式:快速闪烁、慢速闪烁和常亮。
标签
PCB设计
LED
FastBond第二季
模拟键盘
hhhh
更新2023-08-10
成都信息工程大学
362

一、前言

在阶段1的项目文档中,介绍了使用Scheme-it绘制的原理图和系统框图,以及项目中所使用到的活动规定厂家的芯片。

想了解阶段1的具体内容可以通过链接跳转:FastBond2阶段1-模拟按键的原理图设计

本文之后的内容将介绍使用kicad绘制的原理图及PCB,成品的功能测试和主要程序的说明。

二、原理图的介绍及PCB介绍

流程图及原理图的绘制都是在Scheme-it网页上完成的,操作很简单。使用了FastBond活动中要求的一家厂商的芯片,TI公司的OPA344运放芯片。下面是分享链接:

https://www.digikey.cn/schemeit/project/detail/8b7338dc5cd44ea8b75a3bc2da9e8f8e

FhSfhxqaIqNZEQIk6jrTVV7Ry1WH

如框图所示,由RP2040-十二指神探拓展板给模拟按键模块提供电源VCC,可提供3.3V或5V的输入电源,模拟按键模块再根据用户按键情况输出不同的电压,模拟按键模块共有六个按键,可输出七种不同的电压,模拟按键模块输出的电压再传输到RP2040-十二指神探拓展板,RP2040-十二指神探拓展板共有三个接口可以接收模拟信号,选其中一个作为接收端就可以了,然后十二指神探根据接收到的电压大小,判断用户按下的哪个按键,LED灯将根据所选模式进行闪烁。

使用Scheme-it设计的原理图导出到KiCad后,有一些地方并不匹配,需要继续更改完善。修改后的原理图如下。

FoxBlZdzAjKt-NLZwM4a8f0D2I6f

根据原理图绘制的PCB如下:

Fggi0dUHPuaeDgv5Xe-irNLM370z

三、产品功能测试:

板卡焊接完成之后与十二指神探连接实物图:

FvQtMqFqnQiU-5jYpeLW-QDCP9uq

每当用户按下一个按钮,LED将根据对应按钮的闪烁模式进行闪烁,并且在电脑上显示当前LED灯闪烁模式。十二指神探上只有一个LED灯可用,可设置的LED灯状态模式较少,总共设置了7个LED状态,当没有按钮按下时,LED灯处于熄灭状态;当用户按下SW1,LED灯处于呼吸状态;当用户按下SW2,LED灯处于快速闪烁状态,频率为50KHz;当用户按下SW3,LED灯处于快速闪烁状态,频率为20KHz;当用户按下SW4,LED灯处于快速闪烁状态,频率为8KHz;当用户按下SW5,LED灯处于快速闪烁状态,频率为200Hz;当用户按下SW6,LED灯处于常亮状态。快速闪烁模式,不同的频率对应的LED灯亮度不同,LED灯亮度随着PWM的频率的增大而减小。由于图片展示LED灯闪烁模式效果不佳,所以本文档展示在电脑上显示当前LED灯闪烁模式的结果图,具体LED灯闪烁模式效果将在视频中展示,电源选择的3.3V,也可以选择5V。

FnIevapOclDMsBdddCdZCNING7Qx

四、程序功能说明:

首先是引入MicroPython的内置时间模块(time模块)、机器(machine)模块,配置LED引脚、按键引脚。时间模块提供了与时间相关的函数和方法,例如sleep函数,用于在代码中添加延迟。机器模块提供了与硬件相关的功能,例如控制GPIO引脚、PWM、ADC等硬件控制功能。在使用模块之前,你需要先导入相应的模块,这样才能在代码中使用它们的功能。

import time
import machine

# LED引脚配置
led_pin = machine.Pin(0, machine.Pin.OUT)
led_pwm = machine.PWM(led_pin)

# 按键引脚配置
adc_pin = machine.ADC(26)

然后是设置LED闪烁模式,定义一个名为set_blink_mode的函数,用于设置LED灯的闪烁模式。这个函数接受一个参数mode,用来指定要设置的闪烁模式。根据mode的不同,可以在函数内部编写代码来执行不同的闪烁模式操作。

# 设置闪烁模式
def set_blink_mode(mode):
    if mode == 0:
        # 熄灭
        led_pwm.duty_u16(0)
    elif mode == 1:
        # 呼吸灯
        for duty in range(0, 1024, 32):
            led_pwm.duty_u16(duty)
            time.sleep_ms(100)
        for duty in range(1024, 0, -32):
            led_pwm.duty_u16(duty)
            time.sleep_ms(100)
    elif mode == 2:
        # 快速闪烁,频率为50KHz
        led_pwm.freq(500000)         # set/change the frequency of slice 0
        for _ in range(5):
            led_pwm.duty_u16(1023)
            time.sleep_ms(100)
            led_pwm.duty_u16(0)
            time.sleep_ms(100)
    elif mode == 3:
        # 快速闪烁,频率为20KHz
        led_pwm.freq(200000)         # set/change the frequency of slice 0
        for _ in range(5):
            led_pwm.duty_u16(1023)
            time.sleep_ms(100)
            led_pwm.duty_u16(0)
            time.sleep_ms(100)
    elif mode == 4:
        # 快速闪烁,频率为8KHz
        led_pwm.freq(8000)         # set/change the frequency of slice 0
        for _ in range(5):
            led_pwm.duty_u16(1023)
            time.sleep_ms(100)
            led_pwm.duty_u16(0)
            time.sleep_ms(100)
    elif mode == 5:
        # 快速闪烁,频率为200Hz
        led_pwm.freq(200)         # set/change the frequency of slice 0
        for _ in range(5):
            led_pwm.duty_u16(1023)
            time.sleep_ms(100)
            led_pwm.duty_u16(0)
            time.sleep_ms(100)
    elif mode == 6:
        #常亮
        led_pwm.duty_u16(1023)

然后下面是一个使用while TRUE的无限循环的示例程序,用于读取模拟信号值并将其转换为电压,然后根据电压选择LED灯的闪烁模式。

while True:
    analog_value = adc_pin.read_u16()   # 读取模拟信号
    voltage = (analog_value / 65535) * 3.3  # 将模拟值转换为电压值(假设使用默认3.3V参考电压)
    print("Analog Value: {}".format(analog_value)) # 输出结果
    print("Voltage: {:.2f} V".format(voltage))
    # 根据电压选择LED灯闪烁模式
    if 0<= voltage <=0.5:
        mode=0
        set_blink_mode(mode)  # 按钮按下,设置常亮模式
        print("当前LED闪烁模式:熄灭")
    elif 3<= voltage <=3.3:
        mode=1
        set_blink_mode(mode)  # 按钮松开,设置呼吸灯模式
        print("当前LED闪烁模式:呼吸")
    elif 2.5<= voltage <=2.9:
        mode=2
        set_blink_mode(mode)  # 按钮松开,设置呼吸灯模式
        print("当前LED闪烁模式:快速闪烁,频率为50KHz")
    elif 2<= voltage <=2.5:
        mode=3
        set_blink_mode(mode)  # 按钮松开,设置呼吸灯模式
        print("当前LED闪烁模式:快速闪烁,频率为20KHz")
    elif 1.5<= voltage <=2:
        mode=4
        set_blink_mode(mode)  # 按钮松开,设置呼吸灯模式
        print("当前LED闪烁模式:快速闪烁,频率为8KHz")
    elif 1<= voltage <=1.5:
        mode=5
        set_blink_mode(mode)  # 按钮松开,设置呼吸灯模式
        print("当前LED闪烁模式:快速闪烁,频率为200Hz")
    elif 0.5<= voltage <=1:
        mode=6
        set_blink_mode(mode)  # 按钮松开,设置呼吸灯模式
        print("当前LED闪烁模式:常亮")
   
    time.sleep(2)  # 间隔2秒钟进行下一次读取

五、活动总结:

感谢硬禾科技举办的这次活动,看着自己画的板子做成成品,并且还可以正常工作,有所应用,内心十分的激动。虽然在这过程中遇到了很多困难,但最终都解决了,并且收获很多。

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