0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Arduino基础:调节LED的亮度

YYXIAO 来源:YYXIAO 作者:YYXIAO 2023-02-20 09:47 次阅读

这篇文章来源于DevicePlus.com英语网站的翻译稿。

Originally published by Feb 5, 2020

前言

本文最初发布在deviceplus.jp网站上,而后被翻译成英语。

Device Plus网站中介绍了有关Arduino的各种应用和作品示例,但无论创作任何作品,基础知识都很重要!
在本文中,我们将通过使Arduino能够调节LED亮度,为您带来“关键”的Arduino基础知识。

我们曾介绍过,通过将LED连接到Arduino的数字输出引脚,并设置HIGH (5V) 和LOW (0V) ,可以轻松地切换LED的开和关。但是,由于数字输出只能输出两种状态,因此无法进行亮度调节等控制。

要想解决这个问题,您可以使用“PWM”输出。PWM可在HIGH和LOW状态之间反复切换输出,所以可以用来调节LED的亮度。
在本文中,我们将学习如何使用PWM来调节LED的亮度。我们还将学习如何编写使用PWM输出逐渐点亮LED的程序。

数字不能调节亮度

正如我们上次介绍过的,LED的亮度会随电流的变化而变化。比如,分别通过330Ω的电阻和10kΩ的电阻来调节连接到LED的电流量,并对它们的结果进行比较时,会发现连接330Ω小电阻时电流量更大,这会使LED更亮。或者,改变连接到LED的电源电压,也会使流过的电流量发生变化。

如果分别施加5V和3.3V的电压,施加5V电压时LED灯更亮。根据上一次介绍过的电阻和流过LED的电流之间的关系式,要想让LED更亮,要么“降低电阻”,要么“提高电压”。

pYYBAGPy0J2AVwoEAAC6xizQbfA504.png

然而,Arduino的数字输出只有HIGH (5V)或 LOW (0V)两种状态,这意味着直接连接并不能改变电压和电阻值,也就是说,无法调节LED的亮度。但是,虽然只有HIGH和LOW两种输出状态,通过一些努力还是可以改变LED亮度的。

使用数字输出改变LED亮度

让我们尝试一下只用数字输出来改变LED的亮度吧。亮度可以通过让LED闪烁来调节。我们按照步骤一步一步来实际操作,看看LED的亮度是如何变化的。将LED连接到Arduino的数字引脚5,如下图所示:

poYBAGPy0KKAawc6AAJoUIlweMY641.png

接下来,创建如下所示的程序并将其传送给Arduino。此时,LED应该会每隔1秒闪烁1次。

在程序中,通过第11行的“digitalWrite( LED_PIN, HIGH )”输出HIGH,使LED亮起,然后通过第12行的“delay (ON_TIME)”在指定的时间内保持亮灯。持续时间以毫秒为单位,如果指定1000,则LED将保持点亮1秒钟。

接下来,通过第14行的“digitalWrite( LED_PIN, LOW )”输出LOW,使LED熄灭,然后通过第15行的“delay( OFF_TIME )”在指定的时间内保持熄灭状态。通过反复执行该程序即可实现LED的闪烁。

下面,让我们尝试一下缩短点亮和熄灭的持续时间。可以使用第3行的“const int ON_TIME”来更改点亮状态的持续时间,使用第4行的“const int OFF_TIME”来更改熄灭状态的持续时间。将这两个值都更改为“500”并发送程序,然后确认LED的状态。可以看到闪烁速度增加。接着,当将值逐渐减小到“250”、“100”、“75”、“50”等数字时,闪烁速度变得更快。当值为“10”左右时,LED看起来像在保持点亮状态。这是因为如果它闪烁得太快,人眼就跟不上它的速度,从而使灯看起来就像一直亮着。

接下来,我们试着改变点亮和熄灭的持续时间。将“ON_TIME”和“OFF_TIME”都设置为“10”。然后,依次将“ON_TIME”的值更改为“9”、“8”、“7”……“1”,并确认LED的点亮状态。可以看到当减小该值时,LED会逐渐变暗。

poYBAGPy0KWAWbWDAAETgPJnsy8241.png

这是因为持续亮灯时间缩短,发光量减少,从而使LED看起来变暗。也就是说,通过改变“点亮持续时间”也可以调节LED的亮度。使用该方法,可以实现用仅能控制开/关的Arduino数字输出功能来控制LED的亮度。

通过PWM调节亮度

如上所述,通过调整HIGH和LOW的比例,使LED以较短的周期闪烁,即可调节LED的亮度。但是,自己创建程序来控制闪烁持续时间并不现实。因为处理其他程序需要时间,而这会使闪烁间隔出现偏差,从而会使亮度发生变化。

Arduino可以使用PWM(Pulse Width Modulation,脉冲宽度调制)功能来周期性地输出HIGH和LOW。PWM是以指定的速率周期性地在HIGH和LOW之间切换的一种功能,可用于上述的LED亮度调节。

但是,需要注意的是,可用于PWM功能的引脚在Arduino中是固定的。只有数字旁边带有“〜”标记的引脚(即引脚3、5、6、9、10和11)可使用PWM功能,其他引脚不支持PWM输出。

poYBAGPy0K2AQemBAAMMqTYHyYc797.png

另外,由于PWM是通过Arduino的微控制器产生的功能,因此具有输出稳定、不影响程序运行的优点。
在这里,我们将LED连接到引脚5来试一下。用与前述电路相同的方式连接LED。
接下来,创建如下所示的程序并将其发送给Arduino,LED将会亮起,但是较暗。

通过PWM功能输出时,需要通过第6行的“pinMode()”将对象引脚设置为输出模式。实际输出时,使用第10行的“analogWrite()”。指定对象引脚编号,然后在0到255的范围内设置保持HIGH的比率。如果设置为“0”,将始终输出LOW,如果设置为“255”,则始终输出HIGH。如果设置为“127”,将会以各一半的比率输出HIGH和LOW。

在这个程序中,可以通过第3行的“const int DUTY”来指定PWM比率。更改该值可以确认亮度的变化情况。

让LED逐渐闪烁

我们使用PWM输出拓展了LED点亮的方法。现在,让我们逐渐改变PWM来尝试实现LED逐渐变亮的效果。

编写如下程序:

在上述程序中,将PWM比率存储在loop()函数中使用的“i”变量中,以使其可以逐渐增加该值,从而使LED逐渐变亮。

第14行的while处理以STEP指定的增量增加值,直到i达到 255。增加的值由第15行的analogWrite()输出,以使LED的亮度改变。此外,每次第16行的PWM输出改变时,将等待由WAITTIME指定的持续时间。

当PWM比率达到255时,它会逐渐减小该值直到0,以使LED逐渐变暗(第21到25行)。可以通过更改第3行的WAITTIME或第4行的STEP的值来调节闪烁速度。

此次我们学习了如何控制LED的亮度。下篇再见!

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    237

    文章

    22450

    浏览量

    645879
  • PWM
    PWM
    +关注

    关注

    114

    文章

    4901

    浏览量

    209910
  • 数字输出
    +关注

    关注

    0

    文章

    21

    浏览量

    8879
  • Arduino
    +关注

    关注

    184

    文章

    6427

    浏览量

    184841
收藏 人收藏

    评论

    相关推荐

    led亮度自动调节

    各位大神!有没有谁知道基于热敏电阻的LED亮度自动调节功能怎么实现啊????
    发表于 03-04 11:41

    LED显示亮度能依据环境亮度变化自动调节

    如何实现依据环境亮度来自动调节LED的显示亮度,那位大神知道,帮帮忙啊{:soso_e150:}
    发表于 08-05 11:13

    PWM调节LED亮度的工作过程

    求下图PWM调节LED亮度的工作过程
    发表于 05-06 22:21

    亮度LED驱动一般用什么驱动?LED亮度调节怎么做?

    随着高亮LED效率的不断提高,即流明/瓦特比的增加,越来越多的照明应用开始选择高亮度LED,例如汽车的外灯;日间行车灯,近光灯、远光灯等。电路设计中高亮度
    发表于 04-06 06:32

    如何采用PWM方式调节LED亮度

    采用PWM方式调节LED亮度的原理调节LED亮度的两种方式:1.改变
    发表于 11-23 07:06

    LED亮度电流调节

    描述LED亮度电流调节器20mA如果您需要调节 LED 亮度,可以使用此电路。一个
    发表于 08-15 06:39

    用超声波的距离远近对应来调节LED亮度调节亮度不稳定怎么解决?

    用超声波的距离远近对应来调节LED亮度调节亮度不稳定。怎么解决?
    发表于 11-09 08:27

    一款LED亮度调节IC的应用

    SJT5301B是一颗适用於LED灯光亮度调节的触摸式调光IC,有无段调光、二段调光和三段调光等调光模式,三段调光可由高亮到低亮调节,也可由低亮到高亮
    发表于 08-05 15:40 2738次阅读
    一款<b class='flag-5'>LED</b><b class='flag-5'>亮度</b><b class='flag-5'>调节</b>IC的应用

    LED亮度调节方案

    使用LED型固态照明(SSL)的便携式设备要求使用高效驱动电路来延长电池使用时间,同时还要求使用一些亮度调节方法来对光线输出进行调节,以适应周围的照明环境。在诸如智能手机或者便携式GP
    发表于 06-11 09:08 1.3w次阅读
    <b class='flag-5'>LED</b><b class='flag-5'>亮度</b><b class='flag-5'>调节</b>方案

    充电式LED调节亮度的方法

    可以调节亮度的充电式LED调节亮度一般有两种方法:一是采用简单的电阻调节
    的头像 发表于 02-12 15:52 1.3w次阅读
    充电式<b class='flag-5'>LED</b>灯<b class='flag-5'>调节</b><b class='flag-5'>亮度</b>的方法

    两种控制LED显示屏亮度调节的方法

      LED显示屏亮度调节方式有两种,为自动调节和手动调节。其中,自动调节是根据环境
    发表于 08-11 13:44 4857次阅读

    如何调节LED灯箱的亮度,灯箱安装LED调光器怎么接线

    调节LED灯箱的亮度:1.灯箱亮度比较亮,需要进行调暗。2.多个灯箱亮度不均,需要调节到统一的
    发表于 09-02 09:59 5573次阅读

    Arduino Nextion Display使用滑块控制LED亮度

    电子发烧友网站提供《Arduino Nextion Display使用滑块控制LED亮度.zip》资料免费下载
    发表于 10-28 14:31 0次下载
    <b class='flag-5'>Arduino</b> Nextion Display使用滑块控制<b class='flag-5'>LED</b><b class='flag-5'>亮度</b>

    Arduino手势控制LED亮度

    电子发烧友网站提供《Arduino手势控制LED亮度.zip》资料免费下载
    发表于 01-31 14:47 1次下载
    <b class='flag-5'>Arduino</b>手势控制<b class='flag-5'>LED</b><b class='flag-5'>亮度</b>

    使用电位器和Arduino控制LED亮度

    电子发烧友网站提供《使用电位器和Arduino控制LED亮度.zip》资料免费下载
    发表于 07-06 09:50 0次下载
    使用电位器和<b class='flag-5'>Arduino</b>控制<b class='flag-5'>LED</b><b class='flag-5'>亮度</b>