树莓派论坛

 找回密码
 立即注册
搜索
查看: 6006|回复: 0

树莓派GPIO入门02-GPIO控制LED亮度,制作呼吸灯效果

[复制链接]

78

主题

144

帖子

5920

积分

超级版主

Rank: 8Rank: 8

积分
5920
发表于 2016-5-10 22:00:58 | 显示全部楼层 |阅读模式
树莓派GPIO入门02-GPIO控制LED亮度,制作呼吸灯效果
我们上一篇通过控制GPIO口输出高低电平来控制一只发光二极管的亮灭。这次我们来控制发光二极管的亮度。最后做出呼吸灯的效果。
最终效果
ani.gif
GPIO口控制亮度制作呼吸灯

硬件
  • 树莓派一台
  • LED发光管
  • 杜邦线两条

raspi-study.jpg
硬件图

原理说明
我们知道,通过LED的电流越大,LED越亮,电流越小,LED越暗。如果可以控制输出电流大小就可以控制LED的明暗了。
但是树莓派的各引脚并没有直接调整输出电流大小的功能。要想别的办法。
我们先学习一个名词:脉宽调制(PWM)
简单的说,PWM技术就是不停的通断电路并控制通断持续的时间片段长度来控制用电器在单位时间内实际得到的电能。
这么说好像还是复杂了,再简单点说,如果你的手足够快,打开电灯开关后马上关闭,如果这个时间间隔足够短,灯丝还没有全部亮起来就暗下去了。你再次打开电灯再关闭,再打开再关闭。。。如果你一直保持相同的频率,那么电灯应该会保持一个固定的亮度不变。理论上,你可以通过调整开灯持续的时间长度和关灯持续的时间长度的比例就能得到不同亮度了。这个比例被称为“占空比”。
PWM就是差不多这个意思。
树莓派1代B型的26个针脚里,有一个特殊的GPIO口是支持硬件PWM的,不过从B+开始不知道什么原因这个很实用的接口被去掉了。
但是没关系,根据我上面的描述,我们完全可以自己写一个程序来模拟PWM。
不想自己写,没关系,我们强大的GPIO库已经帮我们写好了,直接用就可以了。
硬件连接
跟前一篇一模一样的连接方式。
connect.jpg
原理图

代码
直接看代码和注释吧,一看就能明白。
  1. #!/usr/bin/env python
  2. # encoding: utf-8

  3. import RPi.GPIO
  4. import time

  5. RPi.GPIO.setmode(RPi.GPIO.BCM)
  6. RPi.GPIO.setup(14, RPi.GPIO.OUT)

  7. # 创建一个 PWM 实例,需要两个参数,第一个是GPIO端口号,这里我们用14号
  8. # 第二个是频率(Hz),频率越高LED看上去越不会闪烁,相应对CPU要求就越高,设置合适的值就可以
  9. pwm = RPi.GPIO.PWM(14, 80)

  10. # 启用 PWM,参数是占空比,范围:0.0 <= 占空比 >= 100.0
  11. pwm.start(0)

  12. try:
  13.         while True:
  14.                 # 电流从小到大,LED由暗到亮
  15.                 for i in xrange(0, 101, 1):
  16.                         # 更改占空比,
  17.                         pwm.ChangeDutyCycle(i)
  18.                         time.sleep(.02)
  19.                         
  20.                 # 再让电流从大到小,LED由亮变暗
  21.                 for i in xrange(100, -1, -1):
  22.                         pwm.ChangeDutyCycle(i)
  23.                         time.sleep(.02)

  24. # 最后一段是一个小技巧。这个程序如果不强制停止会不停地执行下去。
  25. # 而Ctrl+C强制终端程序的话,GPIO口又没有机会清理。
  26. # 加上一个try except 可以捕捉到Ctrl+C强制中断的动作,
  27. # 试图强制中断时,程序不会马上停止而是会先跳到这里来做一些你想做完的事情,比如清理GPIO口。
  28. except KeyboardInterrupt:
  29.         pass

  30. # 停用 PWM
  31. pwm.stop()

  32. # 清理GPIO口
  33. RPi.GPIO.cleanup()
复制代码

源代码下载
prog.zip (990 Bytes, 下载次数: 12)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部快速回复上一主题下一主题返回列表找客服关注微信

QQ|Archiver|手机版|小黑屋|树莓派论坛 ( 豫ICP备13020861号-6

GMT+8, 2021-6-24 13:52 , Processed in 0.068444 second(s), 26 queries .

Powered by Discuz! X3.2 Designed by BBs.ShuMeiPaiBa.Com

© 2015- Comsenz Inc. www.shumeipaiba.com

快速回复 返回顶部 返回列表