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

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

3天内不再提示

如何在Arduino上使用RGB LED

454398 来源:网络整理 作者:网络整理 2019-12-03 11:07 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

概述

在本课程中,您将学习如何在Arduino上使用RGB(红绿蓝)LED

您将使用 analogWrite 函数来控制LED的颜色。

乍一看,RGB(红色,绿色,蓝色)LED看起来就像普通的LED,但是,在通常的LED封装中,实际上有三个LED,一个红色,一绿色,是,一蓝色。通过控制每个LED的亮度,您可以混合几乎任何您想要的颜色。

我们可以混合颜色,就像您将音频与“混合板”或调色板上的颜料混合一样-通过调整三个LED各自的亮度。做到这一点的困难方法是使用第2课中使用的不同值的电阻器(或可变电阻器)。这是很多工作!对我们来说幸运的是,Arduino具有 analogWrite 函数,您可以将其与标有〜的引脚一起使用,以向相应的LED输出可变数量的功率。

零件

要构建本课中描述的项目,您将需要以下零件。

零件 数量

扩散RGB LED 10mm 1

270Ω电阻器(红色,紫色,棕色条纹)-可以使用的最大电阻为1K欧姆。小调光器

3

半尺寸面包板 1

Arduino Uno R3 1

跳线包 1

面包板布局

RGB LED有四根引线。封装中每个LED的正极连接都有一根引线,而LED的所有三个负极侧都有一根引线。

LED封装的公共负极连接是LED封装扁平侧的第二个引脚。它也是四个线索中最长的。该引线将接地。

封装内的每个LED都需要自己的270Ω电阻,以防止过多的电流流过。 LED的三个正极(一个红色,一个绿色和一个蓝色)使用这些电阻器连接到Arduino输出引脚。

如果您使用的是普通的ANODE LED而不是普通的CATHODE,请将长引脚连接到+5而不是接地端

颜色

您可以通过改变红色,绿色和蓝色的光量来混合任意颜色,这是因为您的眼睛具有三种类型的光接收器(红色,绿色和蓝色)。您的眼睛和大脑会处理红色,绿色和蓝色的数量,并将其转换为光谱的颜色。

在某种程度上,通过使用三个LED,我们在眼睛上发挥了作用。电视机中使用了相同的想法,其中LCD的红色,绿色和蓝色点彼此相邻,构成每个像素。

如果我们将所有三个LED的亮度设置为相同,则该灯的整体颜色将为白色。如果关闭蓝色LED,以便仅红色和绿色LED具有相同的亮度,则该光将显示为黄色。

我们可以分别控制LED的红色,绿色和蓝色部分的亮度,从而可以混合我们喜欢的任何颜色。

黑色并不是缺少光,而是一种颜色。因此,最能使我们的LED变成黑色的是关闭所有三种颜色。

Arduino草图

以下测试草图将循环显示红色,绿色,蓝色,黄色,紫色和浅绿色。这些颜色是一些标准的Internet颜色。

下载:文件

复制代码

/*

Adafruit Arduino - Lesson 3. RGB LED

*/

int redPin = 11;

int greenPin = 10;

int bluePin = 9;

//uncomment this line if using a Common Anode LED

//#define COMMON_ANODE

void setup()

{

pinMode(redPin, OUTPUT);

pinMode(greenPin, OUTPUT);

pinMode(bluePin, OUTPUT);

}

void loop()

{

setColor(255, 0, 0); // red

delay(1000);

setColor(0, 255, 0); // green

delay(1000);

setColor(0, 0, 255); // blue

delay(1000);

setColor(255, 255, 0); // yellow

delay(1000);

setColor(80, 0, 80); // purple

delay(1000);

setColor(0, 255, 255); // aqua

delay(1000);

}

void setColor(int red, int green, int blue)

{

#ifdef COMMON_ANODE

red = 255 - red;

green = 255 - green;

blue = 255 - blue;

#endif

analogWrite(redPin, red);

analogWrite(greenPin, green);

analogWrite(bluePin, blue);

} /*

Adafruit Arduino - Lesson 3. RGB LED

*/

int redPin = 11;

int greenPin = 10;

int bluePin = 9;

//uncomment this line if using a Common Anode LED

//#define COMMON_ANODE

void setup()

{

pinMode(redPin, OUTPUT);

pinMode(greenPin, OUTPUT);

pinMode(bluePin, OUTPUT);

}

void loop()

{

setColor(255, 0, 0); // red

delay(1000);

setColor(0, 255, 0); // green

delay(1000);

setColor(0, 0, 255); // blue

delay(1000);

setColor(255, 255, 0); // yellow

delay(1000);

setColor(80, 0, 80); // purple

delay(1000);

setColor(0, 255, 255); // aqua

delay(1000);

}

void setColor(int red, int green, int blue)

{

#ifdef COMMON_ANODE

red = 255 - red;

green = 255 - green;

blue = 255 - blue;

#endif

analogWrite(redPin, red);

analogWrite(greenPin, green);

analogWrite(bluePin, blue);

}

尝试一下草图,然后我们将对其进行详细剖析……。

草图通过指定每种颜色将使用哪些引脚:

下载:file

复制代码

int redPin = 11;

int greenPin = 10;

int bluePin = 9; int redPin = 11;

int greenPin = 10;

int bluePin = 9;

下一步是编写“设置”功能。正如我们在前面的课程中所了解的那样,设置功能在Arduino重置后仅运行一次。在这种情况下,它要做的就是定义我们用作输出的三个引脚。

下载:文件

复制代码

void setup()

{

pinMode(redPin, OUTPUT);

pinMode(greenPin, OUTPUT);

pinMode(bluePin, OUTPUT);

} void setup()

{

pinMode(redPin, OUTPUT);

pinMode(greenPin, OUTPUT);

pinMode(bluePin, OUTPUT);

}

在我们看一下“循环”功能之前,先看一下其中的最后一个功能。草图。

下载:文件

复制代码

void setColor(int red, int green, int blue)

{

analogWrite(redPin, red);

analogWrite(greenPin, green);

analogWrite(bluePin, blue);

} void setColor(int red, int green, int blue)

{

analogWrite(redPin, red);

analogWrite(greenPin, green);

analogWrite(bluePin, blue);

}

此函数使用三个参数,一个用于红色,绿色和蓝色LED的亮度。在每种情况下,该数字都将在0到255之间,其中0表示关闭,而255表示最大亮度。然后该函数调用‘analogWrite’来设置每个LED的亮度。

如果您查看‘loop’函数,您会看到我们正在设置红色,绿色和蓝色的光量我们要显示的内容,然后暂停一秒钟,然后再继续使用下一种颜色。

下载:文件

复制代码

void loop()

{

setColor(255, 0, 0); // red

delay(1000);

setColor(0, 255, 0); // green

delay(1000);

setColor(0, 0, 255); // blue

delay(1000);

setColor(255, 255, 0);// yellow

delay(1000);

setColor(80, 0, 80); // purple

delay(1000);

setColor(0, 255, 255);// aqua

delay(1000);

} void loop()

{

setColor(255, 0, 0); // red

delay(1000);

setColor(0, 255, 0); // green

delay(1000);

setColor(0, 0, 255); // blue

delay(1000);

setColor(255, 255, 0);// yellow

delay(1000);

setColor(80, 0, 80); // purple

delay(1000);

setColor(0, 255, 255);// aqua

delay(1000);

}

尝试向草图添加自己的几种颜色,并观察LED上的效果。

如果使用的是公共阳极RGB LED,则需要更改模拟写入值,以便从255中减去颜色,在草图中取消注释#define COMMON_ANODE行!

使用Internet颜色

如果您已完成任何Internet编程,则可能会意识到颜色通常表示为“十六进制”数字。例如,红色的数字为#FF0000。您可以使用以下表格找到与特定颜色关联的数字:https://htmlcolorcodes.com/color-names/

该数字的六个数字实际上是三对数字。第一对是颜色的红色部分,后两位是绿色部分,最后两位是蓝色部分。红色为#FF0000,因为它的最大红色(FF为十六进制255)并且没有绿色或蓝色部分。

能够拨出这些颜色编号之一以使其显示在屏幕上将非常有用。 RGB LED。

让我们尝试制作靛蓝色(#4B0082)。

i》

靛蓝的红色,绿色和蓝色部分(以十六进制表示)分别为4B,00和82。我们可以将它们插入“ setColor”函数中,如下所示:

下载:文件

复制代码

setColor(0x4B, 0x0, 0x82); // indigo setColor(0x4B, 0x0, 0x82); // indigo

我们在颜色的三个部分使用十六进制数字,方法是在颜色的三个部分前面加上“ 0x”。

尝试将自己的几种颜色添加到“循环”功能中。不要忘了在每个延迟之后添加延迟。

理论(PWM)

脉冲宽度调制(PWM)是一种控制功率的技术。我们还在这里使用它来控制每个LED的亮度。

下图显示了Arduino上PWM引脚之一的信号

大约每1/500秒,PWM输出将产生一个脉冲。该脉冲的长度由“ analogWrite”功能控制。因此,“ analogWrite(0)”将根本不会产生任何脉冲,而“ analogWrite(255)”将产生一直持续到下一个脉冲到期的脉冲,因此输出实际上一直都在。 》如果我们在AnalogWrite中指定一个介于0到255之间的值,那么我们将产生一个脉冲。如果输出脉冲仅在5%的时间内为高电平,那么无论我们驱动什么,都将仅获得5%的全功率。

但是,如果在90%的时间内输出为5V,则负载将获得90%的电力。我们看不到LED会以这种速度打开和关闭,所以对我们来说,亮度似乎在变化。

其他要做的事情

尝试将乒乓球放在LED上

尝试更改延迟以加快速度或减慢颜色变化的速度

使用RGB LED可以做很多事情。检出Internet上使用RGB LED的一些项目,您会发现视觉设备的多色持久性以及各种照明效果。

责任编辑:wv

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

    关注

    243

    文章

    24434

    浏览量

    687391
  • Arduino
    +关注

    关注

    190

    文章

    6515

    浏览量

    195959
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ‌LP5861 18通道RGB LED驱动器技术解析与应用指南

    Texas Instruments LP5861 18通道RGB LED矩阵驱动器设计用于使用LED矩阵以小尺寸解决方案来改善具有动画效果和指示功能的善用户体验。LP5861集成了18个具有N(N
    的头像 发表于 09-19 10:36 542次阅读
    ‌LP5861 18通道<b class='flag-5'>RGB</b> <b class='flag-5'>LED</b>驱动器技术解析与应用指南

    ‌LP5520 RGB背光LED驱动器技术文档总结

    LP5520 是一款用于小型彩色 LCD 的 RGB 背光 LED 驱动器。与白色 LED 背光相比,RGB 背光可在显示屏实现更好的色彩
    的头像 发表于 09-05 15:16 736次阅读
    ‌LP5520 <b class='flag-5'>RGB</b>背光<b class='flag-5'>LED</b>驱动器技术文档总结

    ‌LP55281 12通道RGB/白光LED驱动器技术文档总结

    LP55281 器件是用于手持设备的四重 RGB LED 驱动器。它可以驱动 4 个 RGB LED 组和一个 fun-light LED
    的头像 发表于 09-04 14:15 695次阅读
    ‌LP55281 12通道<b class='flag-5'>RGB</b>/白光<b class='flag-5'>LED</b>驱动器技术文档总结

    何在 NuMaker-IoT-M467 板使用 Arduino IDE 控制 Wi-Fi 模块?

    在NuMaker开发板,有一个ESP-12F Wi-Fi模块;但是,Arduino IDE 中的 NuMaker UNO 包不提供该模块的相关控制。如果您希望在 Arduino IDE 中控制此模块,您应该如何进行?
    发表于 09-04 08:28

    ‌LM3435 RGB LED驱动器技术文档总结

    LM3435 是一款同步整流非隔离反激式转换器,具有实现高效且经济高效的 RGB LED 驱动器所需的所有功能。与传统的反激式转换器不同,LED 通过相应 LED 引脚上的内部传递元件
    的头像 发表于 08-29 14:42 677次阅读
    ‌LM3435 <b class='flag-5'>RGB</b> <b class='flag-5'>LED</b>驱动器技术文档总结

    ‌LP5812 4×3矩阵RGB LED驱动器技术文档总结

    LP5812 是一款具有自主动画引擎控制功能的 4 × 3 矩阵 RGB LED 驱动器。该器件在点亮LED时具有0.4mA(典型值)的超低正常工作电流。 采用时间交叉复用(TCM)结构
    的头像 发表于 08-20 15:21 664次阅读
    ‌LP5812 4×3矩阵<b class='flag-5'>RGB</b> <b class='flag-5'>LED</b>驱动器技术文档总结

    如何使用 MS51 PWM 通过 UART 控制 RGB LED

    使用 MS51 PWM 通过 UART 控制 RGB LED
    发表于 08-20 07:24

    LP5813同步升压4×3矩阵RGB LED驱动器技术解析与应用指南

    Texas Instruments LP5813 4 × 3矩阵RGB LED驱动器是一款同步升压RGB驱动器,具有自主动画引擎控制功能。该器件非常适合用于支持输入电压范围为0.5V至5.5V的电池供电应用,具有超低正常工作电流
    的头像 发表于 08-12 16:24 760次阅读
    LP5813同步升压4×3矩阵<b class='flag-5'>RGB</b> <b class='flag-5'>LED</b>驱动器技术解析与应用指南

    RGB LED 时尚照明控制器 skyworksinc

    电子发烧友网为你提供()RGB LED 时尚照明控制器相关产品参数、数据手册,更有RGB LED 时尚照明控制器的引脚图、接线图、封装手册、中文资料、英文资料,
    发表于 07-28 18:34
    <b class='flag-5'>RGB</b> <b class='flag-5'>LED</b> 时尚照明控制器 skyworksinc

    何在树莓派上安装并运行 Arduino 集成开发环境!

    使用树莓派单板计算机,你可以运行各种应用程序,包括广受欢迎的Arduino集成开发环境(IDE)。这意味着你可以用它轻松地为通过USB连接到树莓派计算机的微控制器编程,以创建交互式电子项目。下面
    的头像 发表于 07-01 17:41 4038次阅读
    如<b class='flag-5'>何在</b>树莓派上安装并运行 <b class='flag-5'>Arduino</b> 集成开发环境!

    何在iMX8MM EVK启用红外接收器?

    使用 iMX8MM EVK,您还可以获得一个与其中一个 GPIO 接口的 IR 接收器 LED。通过今天的这篇文章,我将演示如何在 iMX8MM EVK 启用红外接收器,以便可以在 iMX8MM
    发表于 03-24 06:20

    Melexis推出MLX80142双RGB LED驱动芯片

    Melexis宣布推出MLX80142双RGB LED驱动芯片(六通道),作为迈来芯智能状态机LED驱动芯片系列的最新成员,这是第一款支持MeLiBu® 2.0协议的产品。该芯片不仅搭载迈来芯成熟
    的头像 发表于 03-18 11:20 1213次阅读

    DLPA2000重复启动RGB LED不亮的原因?

    我目前使用 DLPC3433+DLPA2000 搭配 DLP2010, 应用在AR眼镜 (左右两眼显示), 系统第一次开机时, 两边的光机背光 ( RGB LED ) 皆可以正常点亮, 但是有
    发表于 02-24 07:36

    海信全球首款RGB-MiniLED电视国内首次亮相

    2025年CES展会上,海信凭借RGB三维控色液晶显示技术以及全球最大的116吋RGB-Mini LED电视获得全球关注。2月19日,海信在北京举办了世俱杯旗舰新品媒体前瞻体验会,正式在国内展示了
    的头像 发表于 02-20 17:54 1120次阅读
    海信全球首款<b class='flag-5'>RGB</b>-MiniLED电视国内首次亮相

    海信116英寸RGB-Mini LED:一朵绽放在科技穹顶的中国花火

    中国显示技术的花火就在你我眼前,变革将从RGB-Mini LED开始
    的头像 发表于 01-08 09:11 6484次阅读
    海信116英寸<b class='flag-5'>RGB</b>-Mini <b class='flag-5'>LED</b>:一朵绽放在科技穹顶的中国花火