点亮你的创意,使用Python与树莓派制作呼吸灯的详细教程

前言

  在上一篇文章中,我们介绍了如何在树莓派上点亮一个LED灯,并让它以时间间隔为1秒进行闪烁。闪亮登场!在树莓派上点亮LED灯的简单详细方法_☞黑心萝卜三条杠☜的博客-CSDN博客。现在,我们将介绍如何制作一个呼吸灯。

PWM的介绍

  PWM是脉冲宽度调制(Pulse Width Modulation)的缩写。与STM32一样,树莓派也可以通过PWM输出来控制电子元件,例如控制电机的速度和方向、LED的亮度等。

  树莓派上的PWM输出通常是通过GPIO(General Purpose Input/Output)引脚来实现的。树莓派上有一些专门用于PWM输出的GPIO引脚,例如GPIO18、GPIO19等。在树莓派的Linux系统中,可以使用GPIO驱动程序和相关的库函数来控制PWM输出,以达到控制电子元件的目的。

  树莓派的系统支持软件PWM和硬件PWM两种实现方式。软件PWM是通过程序来模拟PWM信号,实现较为简单且灵活,但精度相对较低。硬件PWM是由树莓派上的专用PWM控制器来实现的,具有精度高、稳定性好等特点,但需要使用专用的GPIO引脚,且控制复杂、功能较为有限。

实现PWM控制LED亮度

  Python是一种十分流行的高级编程语言,也是许多树莓派项目中常用的编程语言之一。我们可以使用RPi.GPIO库来实现GPIO控制。
  在其原理图上模拟连接LED其效果图为:
image-20230620121930339

  下面是以Python语言为基础,实现PWM信号输出的详细步骤:

    1. 设置树莓派引脚编码方式,并实例化一个PWM对象;
    # 设置编码方式
    GPIO.setmode(GPIO.BCM)
    # 设置GPIO引脚
    GPIO.setup(GPIO_Pin, GPIO.OUT)
    # 实例化PWM对象
    pwmObject = GPIO.PWM(GPIO_Pin, frequency)
    1. 启动PWM;
    pwmObject.start(10)
    1. 使用函数ChangeDutyCycle()修改PWM的占空比,让LED灯呈现先逐渐点亮,再不断变暗的效果。
    1. 不需要使用PWM输出时,可调用函数stop()停止PWM输出;

下面是完整的源码:

def pwmControlLed(GPIO_Pin: int, frequency: int):
    """
    使用PWM控制LED呼吸灯
    :param GPIO_Pin: 可控制的引脚
    :param frequency: PWM的频率
    :return:
    """
    # 设置编码方式
    GPIO.setmode(GPIO.BCM)
    # 设置GPIO引脚
    GPIO.setup(GPIO_Pin, GPIO.OUT)
    # 实例化PWM对象
    pwmObject = GPIO.PWM(GPIO_Pin, frequency)

    # 启动PWM
    pwmObject.start(0)
    try:
        while True:
            for dc in range(0, 101, 5):
                pwmObject.ChangeDutyCycle(dc)
                time.sleep(0.05)
            for dc in range(100, -1, -5):
                pwmObject.ChangeDutyCycle(dc)
                time.sleep(0.05)
    except KeyboardInterrupt:
        pass

    # 停止PWM
    pwmObject.stop()
    GPIO.cleanup()

结果与分析

  我们可以看到,在这个实现PWM控制LED亮度的例子中,使用PWM实现呼吸灯的效果,保证了LED的亮度在一定范围内的平滑变化。通过修改PWM的占空比,LED的亮度可以实现从暗到亮再到暗的呼吸效果。

树莓派制作呼吸灯

  注意,在使用PWM控制LED亮度时,建议使用硬件PWM,效果更加稳定。同时,在使用软件PWM时,需要考虑CPU负载和精度的问题,以免影响PWM输出的稳定性和精度。

  最后,建议在使用PWM控制器时,注意控制器的输出频率和幅度等参数,以避免因输出不稳定而对电子元件造成损害。

猜你喜欢

转载自blog.csdn.net/qq_53960242/article/details/131367342