查看: 2665|回复: 0

树莓派入门-利用PWM来控制一个RGB彩色LED灯(三)

[复制链接]

该用户从未签到

发表于 2016-7-22 10:31:28 | 显示全部楼层 |阅读模式
分享到:
上一篇我们学会如何通过PWM来控制LED的亮度,这次我们还是利用PWM来控制一个RGB彩色LED灯来显示各种我们想要的颜色。

最终效果


硬件


  • 彩色RGB二极管。我用的是淘宝买的带4根引脚的S801。你也可以用别的原理都是一样的。
  • 杜邦线4条。3根连接红色绿色蓝色,还有一根连接树莓派5V电源引脚。

硬件图
原理说明

这 个RGB彩色LED里其实有3个灯,分别是红灯绿灯和蓝灯。控制这三个灯分别发出不同强度的光,混合起来就能发出各种颜色的光了。  LED灯上的4根引脚分别是VCC,R,G,B。 VCC需要接到电源正极。我们把它连到树莓派的5V引脚上。  R,G,B分别是红绿蓝灯的负极接口。我们把它们连接到树莓派的GPIO口上。  然后跟前一篇一样,使用PWM来控制3个小灯的明暗程度即可混合出各种不同颜色的光。
硬件连接


硬件连接图

引脚原理图
代码:
#!/usr/bin/env python<br># encoding: utf-8<br><br>import RPi.GPIO<br>import time<br><br>R,G,B=15,18,14<br><br>RPi.GPIO.setmode(RPi.GPIO.BCM)<br><br>RPi.GPIO.setup(R, RPi.GPIO.OUT)<br>RPi.GPIO.setup(G, RPi.GPIO.OUT)<br>RPi.GPIO.setup(B, RPi.GPIO.OUT)<br><br>pwmR = RPi.GPIO.PWM(R, 70)<br>pwmG = RPi.GPIO.PWM(G, 70)<br>pwmB = RPi.GPIO.PWM(B, 70)<br><br>pwmR.start(0)<br>pwmG.start(0)<br>pwmB.start(0)<br><br>try:<br><br>        t = 0.4<br>        while True:<br>                # 红色灯全亮,蓝灯,绿灯全暗(红色)<br>                pwmR.ChangeDutyCycle(0)<br>                pwmG.ChangeDutyCycle(100)<br>                pwmB.ChangeDutyCycle(100)<br>                time.sleep(t)<br><br>                # 绿色灯全亮,红灯,蓝灯全暗(绿色)<br>                pwmR.ChangeDutyCycle(100)<br>                pwmG.ChangeDutyCycle(0)<br>                pwmB.ChangeDutyCycle(100)<br>                time.sleep(t)<br><br>                # 蓝色灯全亮,红灯,绿灯全暗(蓝色)<br>                pwmR.ChangeDutyCycle(100)<br>                pwmG.ChangeDutyCycle(100)<br>                pwmB.ChangeDutyCycle(0)<br>                time.sleep(t)<br><br>                # 红灯,绿灯全亮,蓝灯全暗(黄色)<br>                pwmR.ChangeDutyCycle(0)<br>                pwmG.ChangeDutyCycle(0)<br>                pwmB.ChangeDutyCycle(100)<br>                time.sleep(t)<br><br>                # 红灯,蓝灯全亮,绿灯全暗(洋红色)<br>                pwmR.ChangeDutyCycle(0)<br>                pwmG.ChangeDutyCycle(100)<br>                pwmB.ChangeDutyCycle(0)<br>                time.sleep(t)<br><br>                # 绿灯,蓝灯全亮,红灯全暗(青色)<br>                pwmR.ChangeDutyCycle(100)<br>                pwmG.ChangeDutyCycle(0)<br>                pwmB.ChangeDutyCycle(0)<br>                time.sleep(t)<br><br>                # 红灯,绿灯,蓝灯全亮(白色)<br>                pwmR.ChangeDutyCycle(0)<br>                pwmG.ChangeDutyCycle(0)<br>                pwmB.ChangeDutyCycle(0)<br>                time.sleep(t)<br><br>                # 调整红绿蓝LED的各个颜色的亮度组合出各种颜色<br>                for r in xrange (0, 101, 20):<br>                        pwmR.ChangeDutyCycle(r)<br>                        for g in xrange (0, 101, 20):<br>                                pwmG.ChangeDutyCycle(g)<br>                                for b in xrange (0, 101, 20):<br>                                        pwmB.ChangeDutyCycle(b)<br>                                        time.sleep(0.01)<br><br>except KeyboardInterrupt:<br>        pass<br><br>pwmR.stop()<br>pwmG.stop()<br>pwmB.stop()<br><br>RPi.GPIO.cleanup()文章来源于网络
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /5 下一条

手机版|小黑屋|与非网

GMT+8, 2024-12-20 16:35 , Processed in 0.118235 second(s), 17 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.