之前我们学会如何通过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个小灯的明暗程度即可混合出各种不同颜色的光。
硬件连接
硬件连接图
引脚原理图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | #!/usr/bin/env python # encoding: utf-8 import RPi.GPIO import time R,G,B = 15 , 18 , 14 RPi.GPIO.setmode(RPi.GPIO.BCM) RPi.GPIO.setup(R, RPi.GPIO.OUT) RPi.GPIO.setup(G, RPi.GPIO.OUT) RPi.GPIO.setup(B, RPi.GPIO.OUT) pwmR = RPi.GPIO.PWM(R, 70 ) pwmG = RPi.GPIO.PWM(G, 70 ) pwmB = RPi.GPIO.PWM(B, 70 ) pwmR.start( 0 ) pwmG.start( 0 ) pwmB.start( 0 ) try : t = 0.4 while True : # 红色灯全亮,蓝灯,绿灯全暗(红色) pwmR.ChangeDutyCycle( 0 ) pwmG.ChangeDutyCycle( 100 ) pwmB.ChangeDutyCycle( 100 ) time.sleep(t) # 绿色灯全亮,红灯,蓝灯全暗(绿色) pwmR.ChangeDutyCycle( 100 ) pwmG.ChangeDutyCycle( 0 ) pwmB.ChangeDutyCycle( 100 ) time.sleep(t) # 蓝色灯全亮,红灯,绿灯全暗(蓝色) pwmR.ChangeDutyCycle( 100 ) pwmG.ChangeDutyCycle( 100 ) pwmB.ChangeDutyCycle( 0 ) time.sleep(t) # 红灯,绿灯全亮,蓝灯全暗(黄色) pwmR.ChangeDutyCycle( 0 ) pwmG.ChangeDutyCycle( 0 ) pwmB.ChangeDutyCycle( 100 ) time.sleep(t) # 红灯,蓝灯全亮,绿灯全暗(洋红色) pwmR.ChangeDutyCycle( 0 ) pwmG.ChangeDutyCycle( 100 ) pwmB.ChangeDutyCycle( 0 ) time.sleep(t) # 绿灯,蓝灯全亮,红灯全暗(青色) pwmR.ChangeDutyCycle( 100 ) pwmG.ChangeDutyCycle( 0 ) pwmB.ChangeDutyCycle( 0 ) time.sleep(t) # 红灯,绿灯,蓝灯全亮(白色) pwmR.ChangeDutyCycle( 0 ) pwmG.ChangeDutyCycle( 0 ) pwmB.ChangeDutyCycle( 0 ) time.sleep(t) # 调整红绿蓝LED的各个颜色的亮度组合出各种颜色 for r in xrange ( 0 , 101 , 20 ): pwmR.ChangeDutyCycle(r) for g in xrange ( 0 , 101 , 20 ): pwmG.ChangeDutyCycle(g) for b in xrange ( 0 , 101 , 20 ): pwmB.ChangeDutyCycle(b) time.sleep( 0.01 ) except KeyboardInterrupt: pass pwmR.stop() pwmG.stop() pwmB.stop() RPi.GPIO.cleanup() |
原文链接 http://blog.mangolovecarrot.net/2015/04/29/raspi-study03/,版权属于:芒果爱吃胡萝卜。
运行脚本不报错,但是灯不亮“`
这个四脚是R\G\B\VCC,我这个是R\G\B\GND,请问有什么区别吗?
注意这个是VCC,GND的这个代码需要修改。另外GND不要接到5.5V上去,虽然不会烧但是不安全。
首先得知道这个是发光二极管,至于这个是什么自己查吧,如果运行这个程序,当R\G\B\VCC亮的时候,…GND是灭的,…VCC灭时,…GND是亮的。这个程序人眼应该看不出来,主要是低电平持续时间太短
0.4是不是闪的太快了