一起玩转树莓派(3)——点亮RGB炫彩LED灯

简介: 一起玩转树莓派(3)——点亮RGB炫彩LED灯

在阅读本篇博客之前,如果你对树莓派的GPIO还没有基本的了解,我建议你先阅读本系列博客的上一篇,关于双色LED灯实验的。了解树莓派GPIO的基本用法是进行本篇博客实验的基础。上篇博客地址如下:


https://my.oschina.net/u/2340880/blog/5123429


现在,如果你已经成功完成过树莓派双色LED灯实验,并且对深入树莓派玩法有更多的兴趣的话,那么我们在进一步,尝试点亮一个更加绚丽的LED灯:RGB3色LED灯。


一、认识RGB三原色LED灯并连线


通过前面的实验,我们已经知道,双色的LED灯内部封装了红绿两个发光二极管,其有3个引脚,其中1个引脚是共用的(共阴或共阳),对于共阴型的双色LED灯,控制另外两个引脚的高低电平来分别点亮红灯或绿灯。对于RGB3色LED灯也类似,只是其内部封装了3个发光二极管,分别可以发出红光,绿光和蓝光。其有4个引脚,1个引脚共用和3个控制发光二极管的引脚。


本次实验,我们依然采用共阴型的RGB3色LED灯,元件如下图所示:


image.png


共阴型的LED灯,GND引脚是其公共的阴极,接线的时候我们需要将此引脚接地,另外3个引脚分别接3个GPIO来控制亮灯。下面两种图,非常直观的演示了此LED灯的工作原理:


image.pngimage.png


在将LED灯连接到树莓派之前,我们需要预定几个要用的GPIO引脚,之后我们在编写代码时,依然采用物理编码,首先我们先确定要使用的GPIO引脚的BCM编码下的GPIO18,GPIO19和GPIO20,通常查看引脚编码对应图,我们可以找到其所对应的物理引脚分别为12,24和28。如果不使用扩展板,直接将原件上的对应引脚连接到树莓派的这些物理引脚上即可,如果使用的是BCM编码的扩展板,则我们在连线时无需关心这些物理引脚,直接连接即可,如下:


image.png


好了,现在我们已经完成了基本的连线工作。


二、三原色与脉冲宽度调制


三原色本指色彩中不能再分解的三种基本颜色,在光学上,红、绿、蓝为最基本的三原色。三原色经过混合后,可以组成各式各样的颜色。例如将三原色等比混合后将能组成白色,将红色和绿色组合后会生成黄色,将红色和蓝色混合后会得到紫色等等。如下图所示:

image.png



因此,从原理上说,我们只要可以控制RGB灯三种颜色的显示亮度,就可以让LED灯调制出各种颜色。控制LED等中各个发光二极管的亮和灭非常简单,我们只需要向其加高电平或低电平即可,那么如何控制发光二极管的亮度呢?我们需要使用到另外一种电流控制技术:PWM脉冲宽度调制。


脉冲宽度调制(PWM)是一种模拟控制方式,其通过控制脉冲电压中高电压的占空比来控制流过元件的电流大小。PWM技术中有两个非常重要的参数:频率与占空比。频率用来控制脉冲信号的周期,如果频率过低,在控制LED灯的时候,灯就会进行闪烁,当频率足够高,人眼已无法分辨出其闪烁,看上起LED灯就是常亮的。占空比指的是在输出的脉冲信号中,高电平保持的时间与该脉冲信号的周期时间之比。例如,假设设置周期为100Hz,则其周期时间为10ms,如果设置的占空比为20%,则当前周期中,高电平的占比时间为2ms。


Python的GPIO库中提供了PWM控制接口,使用也非常简单,使用如下方法可以获取某个引脚的PWM实例:


p = GPIO.PWM(channel, frequency)

其中,channel参数为引脚编码,frequency参数为设置的PWM频率。下面方法用来开启PWM脉冲:


p.start(dc)

其中,dc参数设置脉冲的高电平占空比,取值范围为0-100。


通过下面的方法可以对PWM脉冲频率和占空比进行修改:


p.ChangeFrequency(freq)

p.ChangeDutyCycle(dc)

需要结束PWM脉冲调制时,可以调用如下方法:


p.stop()

三、点亮炫彩的三彩LED灯


现在,我们已经做好了所有准备工作,可以开始编码了。我们要实现这样一个功能,当程序运行时,先控制LED灯的红灯,绿灯,靛色灯分别亮2秒,之后通过脉冲混合,让LED灯进行各种颜色的炫彩闪烁,完整代码如下:


#coding:utf-8


# 导入GPIO控制薄块

import RPi.GPIO as GPIO

# 导入time模块

import time

# 导入系统模块

import sys


# 定义引脚(物理引脚)

R,G,B = 12,35,38

# 设置使用的引脚编码模式

GPIO.setmode(GPIO.BOARD)


# 对要使用的引脚进行初始化

GPIO.setup(R,GPIO.OUT)

GPIO.setup(G,GPIO.OUT)

GPIO.setup(B,GPIO.OUT)


# 使用PWM脉冲宽度调制

pR = GPIO.PWM(R, 60)

pG = GPIO.PWM(G, 60)

pB = GPIO.PWM(B, 60)


# 开启脉冲,默认的占空比为0,灯不亮

pR.start(0)

pG.start(0)

pB.start(0)


# 初始时,各种颜色点亮2秒

# 红灯先亮2秒

pR.ChangeDutyCycle(100)

pG.ChangeDutyCycle(0)

pB.ChangeDutyCycle(0)

time.sleep(2)


# 替换为绿灯亮2秒

pR.ChangeDutyCycle(0)

pG.ChangeDutyCycle(100)

pB.ChangeDutyCycle(0)

time.sleep(2)


# 替换为靛色灯亮2秒

pR.ChangeDutyCycle(0)

pG.ChangeDutyCycle(0)

pB.ChangeDutyCycle(100)

time.sleep(2)


# 定义要闪烁的时间 这里定义为10秒

endTime = 100

current = 0


# 开始进行炫彩闪烁

while True:

   # 通过占空比控制红色的占比

for r in range(0, 101, 10):

 pR.ChangeDutyCycle(r)

       # 通过占空比控制绿色的占比

 for g in range(0, 101, 10):

  pG.ChangeDutyCycle(g)

           # 空通过占空比控制蓝色的占比

  for b in range(0, 101, 10):

   pB.ChangeDutyCycle(b)

   time.sleep(0.1)

   current += 1

               # 结束程序

   if (current > endTime):

    pR.stop()

    pG.stop()

    pB.stop()

    GPIO.cleanup()

    sys.exit(0)

在树莓派上运行此程序,注意!小心不要被太亮的LED闪到了眼睛😝。

目录
相关文章
uniapp根据官方文档上传图片的方法
uniapp根据官方文档上传图片的方法
|
IDE 物联网 开发工具
【史上最全面esp32教程】点灯大师篇
【史上最全面esp32教程】点灯大师篇
1397 0
|
传感器 存储 定位技术
一起玩转树莓派(18)——MPU6050陀螺仪加速度传感器模块应用
现在智能手机的功能已经非常强大,除了基础的通信功能外,测位测速,空间角度等数据的测量也非常方便,这在线路导航,地图,体感游戏等应用中十分重要。不知你是否想过,智能设备是如何获取到其所在的空间状态与加速度等数据的呢?MPU6050就是提供这类数据测量的一种传感器模块。
2806 0
|
传感器 机器学习/深度学习 编解码
最新综述!基于视觉的自动驾驶环境感知(单目、双目和RGB-D)
目相机使用来自单个视点的图像数据作为输入来估计对象深度,相比之下,立体视觉是基于视差和匹配不同视图的特征点,深度学习的应用也进一步提高了准确性。此外,SLAM可以建立道路环境模型,从而帮助车辆感知周围环境并完成任务。本文介绍并比较了各种目标检测和识别方法,然后解释了深度估计的发展,并比较了基于单目、立体和RGB-D传感器的各种方法,接下来回顾并比较了SLAM的各种方法。最后总结了当前存在的问题,并提出了视觉技术的未来发展趋势。
最新综述!基于视觉的自动驾驶环境感知(单目、双目和RGB-D)
|
6月前
|
前端开发 API 开发者
一键抠图有多强?19Kstar 的 Rembg 开源神器,5 大实用场景颠覆想象!
Rembg是一款基于Python的开源抠图工具,利用深度学习模型(U-Net/U-2-Net)实现高质量背景移除。它支持命令行、Python API、服务端API及插件等多种形式,适用于电商商品图、社交头像优化、设计项目图像等场景。凭借高精准度、即插即用特性和全面生态,Rembg在GitHub上已获19.1K星,成为开发者社区中的热门工具。其本地部署特性确保数据隐私,适合专业与商业环境使用。项目地址:https://github.com/danielgatis/rembg。
1611 24
|
5月前
|
自然语言处理 API 语音技术
是时候说点方言了,Qwen-TTS上新!
Qwen-TTS更新支持北京话、上海话和四川话三种中文方言,新增七种中英双语音色。模型基于超300万小时语料训练,合成语音自然流畅,可自动调整韵律与情绪。用户可通过Qwen API便捷调用,体验多语言、多风格的高质量语音生成服务。
1056 1
|
网络协议 Java 程序员
【网络】局域网LAN、广域网WAN、TCP/IP协议、封装和分用
【网络】局域网LAN、广域网WAN、TCP/IP协议、封装和分用
650 2
|
存储 大数据 数据挖掘
【数据新纪元】Apache Doris:重塑实时分析性能,解锁大数据处理新速度,引爆数据价值潜能!
【9月更文挑战第5天】Apache Doris以其卓越的性能、灵活的架构和高效的数据处理能力,正在重塑实时分析的性能极限,解锁大数据处理的新速度,引爆数据价值的无限潜能。在未来的发展中,我们有理由相信Apache Doris将继续引领数据处理的潮流,为企业提供更快速、更准确、更智能的数据洞察和决策支持。让我们携手并进,共同探索数据新纪元的无限可能!
459 11
大尺度信道建模 | 带你读《大规模天线波束赋形技术原理与设计 》之二十四
本节将介绍 3D 信道模型中 不同传输场景的大尺度衰落模型,包括路损计算、穿透损耗、直射径概率、阴 影衰落等。
大尺度信道建模  | 带你读《大规模天线波束赋形技术原理与设计 》之二十四
|
存储 缓存 NoSQL
Redis缓存应用与最佳实践:优化性能与处理挑战
本篇深入探讨了Redis在缓存应用中的最佳实践,旨在优化性能并处理常见的缓存挑战。我们首先介绍了设计高效缓存架构的基本原则,展示了如何使用Redis作为缓存存储来提升应用性能。进一步地,我们讨论了缓存更新策略,演示了如何在源数据更新时同时更新缓存,以确保数据的一致性。
1199 0