引言
呼吸灯最早是由苹果公司发明并应用于笔记本睡眠提示上,一经展出,立刻吸引众多科技厂商争相效仿。将其广泛用于各种电子产品中,尤其是智能手机。于是研究了一下,一起来DIY一个变色RGB呼吸灯吧。呼吸灯其实是在芯片控制下,由暗渐亮,然后再由亮渐暗,模仿人呼吸方式的LED灯。
实现效果如下:变色呼吸灯https://www.zhihu.com/video/1079077606984507392
关键词:RGB变色,对数调光,呼吸灯什么是呼吸灯?
呼吸灯是指灯在微控器控制之下完成由暗到亮的逐渐变化,再由亮到暗的逐渐变化,亮暗的节奏感觉像是人在呼吸。
2. 呼吸灯实现原理
对成人而言,平均每分钟呼吸16~18次; 对儿童而言,平均每分钟呼吸20次。由此可得,每次呼吸用时约3秒。吸气过程1.5s, 呼气过程1.5s。
吸气:指数曲线上升,该过程需要1.5s
呼气:指数曲线下降,该过程需要1.5s
所以要实现呼吸灯分为两个过程:亮度由暗到亮(模拟吸气过程,该过程需要1.5s )
由亮到暗(模拟呼气过程,该过程需要1.5s)
所以用微控器做呼吸灯是利用频率来控制呼吸灯的呼吸时间,用占空比来控制灯的亮度。也就是采用PWM的方式,在固定的频率下,采用占空比的方式来实现LED亮度的变化。占空比为0,LED灯不亮,占空比为100%,则LED灯最亮。所以将占空比从0到100%,再从100%到0不断变化,就可以实现LED灯实现特效呼吸。但是有一个问题,如果PWM按线性变化在低占空比时,LED的亮度变化非常快,可以说肉眼能非常容易分辨的亮度变化区域在占空比5%~30%之间就完成了,也就是如果PWM是线性增加,亮度一开始是急剧变化,到最后变化就不明显了,这样造成显示效果非常不好。所以采用对数调光,使得LED的亮度变化效果“在视觉上是线性的”。让人眼能够感受到灯由暗到亮的调光过程。
假设设计中分成10级亮度。PWM有255级: 10=x*lg255 计算得x=4.16,然后9,8,7.....2,1反过来应用公式算出对应的PWM值,每一级对应一个相应的PWM值,按照这个PWM值变出来的LED亮度才是平顺变化的。
1.5s变化10级,则每级变化的时间间隔为0.15s也就是150ms。
理解了上述原理,在实际编程时亮度级数为80级,变化间隔20ms,也就是视频中的效果。
3. 趣味小知识
1. 【人眼视觉特性】人眼对亮度的响应具有对数非线性性质,以达到其亮度的动态范围。由于人眼对亮度响应的这种非线性,在平均亮度大的区域,人眼对灰度误差不敏感。
2. 不仅是视觉,包括人耳朵对声音也是非线性的,所以调节音量的电位器也是对数的。