如何在Arduino上使用RGB LED

电子说

1.3w人已加入

描述

概述

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

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

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

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

零件

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

零件 数量

扩散RGB LED 10mm 1

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

3

Arduino

半尺寸面包板 1

Arduino Uno R3 1

跳线包 1

面包板布局

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

Arduino

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

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

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

Arduino

颜色

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

在某种程度上,通过使用三个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引脚之一的信号。

Arduino

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

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

其他要做的事情

尝试将乒乓球放在LED上

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

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

责任编辑:wv

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分