Arduino电子制作基础④ 调节LED的亮度

第1篇:让电子元器件动起来!
第2篇: Arduinoの準備
第3篇:用数字输出来控制LED点亮

 

※本翻译文章最初发表于2022年5月12日,现重新编辑后再次发表。

虽然Devices Plus已经介绍过Arduino的多种应用和作品示例,但是了解相关基础知识对于任何项目的构建仍然是非常重要的!
这次,我们将为您介绍Arduino电子制作的基础知识。此次的分享嘉宾是著名的福田和宏老师,他因编写了《有这本书足够!用Arduino开始电子制作 超简单入门教程》等书籍而广为人知。

前面我们曾介绍过,通过将LED连接到Arduino的数字输出引脚,并设置HIGH (5V) 和LOW (0V) ,可以轻松地切换LED的开(点亮)和关(熄灭)。

 

但是,由于数字输出只能输出两种状态,因此无法进行亮度调节等控制。要想解决这个问题,您可以使用“PWM”输出功能。该功能可在HIGH和LOW状态之间反复切换输出,所以可以用来调节LED的亮度。
在本文中,将为您介绍如何使用PWM来调节LED的亮度。另外,还会为您介绍如何编写使用PWM输出徐缓地点亮LED的程序。

 

目录

  1. 数字不能调节亮度
  2. 使用数字输出改变LED亮度
  3. 通过PWM调节亮度
  4. 让LED徐缓闪烁

 

数字不能调节亮度

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

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

01

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

 

使用数字输出改变LED亮度

让我们尝试一下只用数字输出来改变LED的亮度吧。亮度可以通过让LED闪烁来调节。我们按照步骤一步一步来实际操作,看看LED的亮度是如何变化的。所用的电子部件与是在第2篇中使用的LED和电阻器相同。将LED连接到Arduino的数字引脚5,如下图所示:

11

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

const int LED_PIN = 5;

const int ON_TIME = 1000;
const int OFF_TIME = 1000;

void setup(){
    pinMode( LED_PIN, OUTPUT );
}

void loop(){
    digitalWrite( LED_PIN, HIGH );
    delay( ON_TIME );
    
    digitalWrite( LED_PIN, LOW );
    delay( OFF_TIME );
}

在程序中,通过第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会逐渐变暗。

12

这是因为持续亮灯时间缩短,发光量减少,从而使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输出。

21

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


const int LED_PIN = 5;

const int DUTY = 64;

void setup(){
    pinMode( LED_PIN, OUTPUT );
}

void loop(){
    analogWrite( LED_PIN, DUTY );
}

通过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逐渐变亮的效果。

编写如下程序。

const int LED_PIN = 5;

const int WAITTIME = 50;
const int STEP = 5;

void setup(){
    pinMode( LED_PIN, OUTPUT );
}

void loop(){
    int i;

    i = 0;
    while ( i <= 255 ){
        analogWrite( LED_PIN, i );
        delay( WAITTIME );
        i = i + STEP;
    }

    i = 255;
    while ( i >= 0 ){
        analogWrite( LED_PIN, i );
        delay( WAITTIME );
        i = i - STEP;
    }
}

在程序中,将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基础知识的读者朋友,欢迎访问 ROHM官网的“电子小百科”!

 

 

本系列连载的内容

第1篇:让电子元器件动起来!
第2篇:Arduino的准备工作
第3篇:用数字输出来控制LED点亮
第4篇:LED的亮度调节(本文)
第5篇:驱动电机并实现自动控制
第6篇:读取开关状态
第7篇:用模拟输入来读取电压
总结:Arduino电子制作基础知识总结! 基于微控制器的电子制作基础之基础篇

福田和宏
福田和宏

作家,居住在日本札幌。喜欢撰写有关电子创作、电脑、Linux、智能手机等方面的文章。在为“Raspberry Pi Magazine”和“日经Linux”供稿。著有《这本书足够!Raspberry Pi超简单入门教程》(SOTECHSHA)、《学习各种电子元器件的控制!Arduino电子创作 实战教程》(SOTECHSHA)、《Arduino实用入门》(技术评论出版社)等书籍。 目前,创办了“札幌电子工艺部”(https://sapporo-elec.com/),这里汇集了众多电子创作发烧友,大家使用各自的电子技能创作各种作品。任何人都可以参加,也期待您的加入!

https://deviceplus.jp

相关文章

  1. Arduino电子制作基础⑦ 用模拟输入来读取电压

  2. Arduino电子制作基础⑥ 读取开关状态

  3. 12

    Arduino电子制作基础⑤ 驱动电机并实现自动控制

  4. 01

    Arduino电子制作基础③ 用数字输出来控制LED点亮

  5. 01-1

    Arduino电子制作基础② Arduino的准备工作

  6. 01_new

    Arduino电子制作基础①让电子元器件动起来!

  7. 795316b92fc766b0181f6fef074f03fa

    从历史到使用方法的全面了解!人气微控制器开发板Arduino究竟是何方神圣?

TECH INFO

  • Sugiken老师的电机驱动器课堂
  • 重点必看
  • 技术分享
  • Arduino入门指南

基础知识

  • Si功率元器件
  • IGBT功率元器件
  • 热设计
  • 电路仿真
  • 开关噪声-EMC
  • AC/DC
  • DC/DC
  • 电机
  • 传递函数

工程技巧


Sugiken老师的电机驱动器课堂

PICK UP

PAGE TOP