电子说
概述
在本课程中,您将学习如何在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
全部0条评论
快来发表一下你的评论吧 !