引言

呼吸灯最早是由苹果公司发明并应用于笔记本睡眠提示上,一经展出,立刻吸引众多科技厂商争相效仿。将其广泛用于各种电子产品中,尤其是智能手机。于是研究了一下,一起来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. 不仅是视觉,包括人耳朵对声音也是非线性的,所以调节音量的电位器也是对数的。

esp8266灯上电闪一下_如何在ESP8266上实现变色呼吸灯效果?相关推荐

  1. linux上开发应用程序_如何在Linux上安装软件应用程序

    linux上开发应用程序 如何在Linux上安装应用程序? 与许多操作系统一样,该问题不仅有一个答案. 应用程序可以来自许多来源-几乎无法计数-每个开发团队都可以以自己认为最佳的方式交付软件. 知道如 ...

  2. 上facebook安卓_如何在Facebook上阻止某人

    上facebook安卓 Facebook is the world's most popular social network, and with that comes a load of probl ...

  3. android线上内存监控_如何在Android上监控(和减少)您的数据使用情况

    android线上内存监控 Increasingly sophisticated phones and data-hungry applications make it easier than eve ...

  4. 上facebook安卓_如何在Facebook上保护您的隐私

    上facebook安卓 In response to the Cambridge Analytica fiasco and the new EU General Data Protection Reg ...

  5. android8 通知呼吸灯_手机呼吸灯那么好用!为什么要取消它?没有呼吸灯真的好吗?...

    说起手机的呼吸灯相信大家应该都是不会陌生吧,当我们手机内有消息的时候,呼吸灯就会亮起,甚至是有些手机的呼吸灯还可以因为不同的消息设置不同的提示颜色,随着智能手机的发展,相比过去单调的设计,有的厂商为其 ...

  6. java安装_如何在 Mac 上安装 Java | Linux 中国

    macOS 用户可以运行 Java 的开源版本,以及用于云原生开发的新框架. 来源:https://linux.cn/article-12393-1.html 作者:Daniel Oh 译者:MCGA ...

  7. docker删除所有容器_如何在Linux上创建,列出和删除Docker容器

    本篇文章介绍的内容是关于在Linux机器上创建,列出和删除docker容器,下面我们来看具体的内容. 我的官方群点击此处 1.启动Docker容器 使用下面的命令启动新的Docker容器.这将启动一个 ...

  8. shell 统计一个词出现的概率_如何在Mac上设置系统范围的字数统计服务

    在本文中,我们将向您展示如何创建系统范围的服务,使您能够在TextEdit,Safari,Mail或Mac上的任何可让您突出显示文本的应用程序中立即获得字数统计和字符计数.如果您经常发现自己粘贴到空白 ...

  9. 更改日期为英文_如何在 Linux 上检查所有用户密码到期日期 | Linux 中国

    如果你很少使用自己的帐户,那么可能由于密码过期而被锁定.在许多情况下,这可能会在无需密码登录的服务帐户中发生,因为没人会注意到它. -- Magesh Maruthamuthu(作者) 如果你在 Li ...

最新文章

  1. Android开发:怎样把Android studio中的Library公布到Jcenter
  2. 3.1 Tensorflow: 批标准化(Batch Normalization)
  3. 全面剖析【二叉树】的各类遍历方法
  4. 2017.9.5 DZY Loves Math 失败总结
  5. 反三角函数的积分公式
  6. 智慧教育平台android,智慧教育平台APP 1.0.2 安卓版
  7. PyQt5开发桌面程序二(获取公网ip)
  8. Scheduler 配置与注意事项
  9. 6360. 【NOIP2019模拟2019.9.18】最大菱形和(rhombus)
  10. 苹果蓝牙耳机平替哪个好用?苹果蓝牙耳机平替推荐
  11. c语言分拆素数和,分拆素数和。
  12. 直接访问html网址怎么输入,如何设置输入IP地址就直接访问到某一个网站
  13. 单例模式( Single Pattern ): 不仅仅是回字的四种写法
  14. 配置大华网络摄像机,并远程存储到FTP服务器
  15. scite 运行c语言,SciTE常用编译环境的配置,scite编译环境
  16. 如何求出两个整数的最大公约数
  17. 广告狂人第一至七季/全集Mad Men迅雷下载
  18. Linux仿Ubuntu图标包,优秀的 Ubuntu 14.04 图标主题
  19. R语言使用单个向量创建矩阵数据、通过byrow参数指定从向量转化为矩阵的过程中的数据排布方式
  20. ERP 实施,甲方公司前期应该准备什么?

热门文章

  1. 如何让HTML字体变的更小
  2. 虚拟机VMware的安装和Ubuntu安装过程
  3. 轻松6步完成App开发
  4. 【鲲鹏HCIA考试】随堂习题卷二
  5. eclipse安卓 DDMS中打不开Sdcard文件夹的问题
  6. 软键盘实例 request参数修改
  7. CDH 端口未授权访问:hdfs-50070, yarn-8088, jetty漏洞修复
  8. 2. RabbitMQ 的基本使用
  9. 国产cms java_国产java类cms v3.0.161109
  10. 小码王python_小码王为你解读Python编程课程