RGB LED 模块由一个贴片全彩 LED 制成,通过 R、G、B 三个引脚的 PWM 电压输入可以调节三种基色(红/蓝/绿)的强度从而实现全彩的混色效果。用 Arduino 对模块的控制可实现酷炫的灯光效果。
1,使用 5050 全彩 LED
2,RGB 三基色接限流电阻防止烧坏
3,通过 PWM 调节三基色可混合得到不同的颜色
4,可与各种单片机接口
5.工作电压:5V
6.LED 驱动模式:共阴驱动
市面上常见的RGB LED灯有各种各样的,飘易本篇文章里,主要以下面的图片中的LED 为例子进行介绍:


这个透明的led灯接线,最长的是GND:

这些LED灯有个特性就是共阴,即RGB三个引脚分别接入Arduino的三个数字IO口,剩余的一个接arduino的GND。
除了这些共阴的RGB灯外,还有另外一种共阳的,就是公共的引脚接3.3V的VCC,比如下面这个共阳的三色RGB灯:

注意,共阳的和共阴的在设置颜色时要转换一下的,即 255 -R/G/B ,下面程序里会说明。
显示原理是在一棵LED灯里,有三种颜色的灯,红,绿,蓝。每种颜色的灯上的驱动电压不一样,亮度就不一样,它们组合在一起,就形成了各种颜色。
模块有3个输出:
1. R,红色输出,
2. G,绿色输出,
3. B,蓝色输出.
模块特点:3组信号输出,可通过单片机编程实现R,G,B三种颜色的混合达到全彩的效果,
R接arduino的9号数字口
G接arduino的10号数字口
B接arduino的11号数字口
公共的阴极接arduino的gnd
注意,由于受引脚数量和云端控制节点的限制,我们把rgb的三种颜色转换为数字,RGB颜色对应的数字:-1(白色) 到 -16777216(对应全黑,不亮)。
#define REDPIN 9 //red 模拟量
#define GREENPIN 10 //green 模拟量
#define BLUEPIN 11 //blue 模拟量
long colorNum = -19456;// RGB颜色对应的数字:-1 到 -16777216
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
while (!Serial) {}
pinMode(REDPIN, OUTPUT);
pinMode(GREENPIN, OUTPUT);
pinMode(BLUEPIN, OUTPUT);
Serial.println(int2rgb(-1, ""));
Serial.println(rgb2int("255", "255", "255"));
Serial.println(int2rgb(-16777216, ""));
Serial.println(rgb2int("0", "0", "0"));
Serial.println(int2rgb(-19456, ""));
Serial.println(rgb2int("255", "180", "0"));
}
void loop() {
testColor();// 颜色校正
setColorByNum(colorNum);
delay(2000);
}
// ***共阴RGB*** - 设置RGB三色,参数范围:0-255
void setColor(int red, int green, int blue)
{
analogWrite(REDPIN, red);
analogWrite(GREENPIN, green);
analogWrite(BLUEPIN, blue);
}
// ***共阳RGB*** - 设置RGB三色,参数范围:0-255
void setColor(int red, int green, int blue)
{
analogWrite(REDPIN, 255-red);
analogWrite(GREENPIN, 255-green);
analogWrite(BLUEPIN, 255-blue);
}
// 根据颜色对应的数值设置RGB三色
void setColorByNum(long num)
{
String r = int2rgb(num, "r");
String g = int2rgb(num, "g");
String b = int2rgb(num, "b");
int r2 = r.toInt();
int g2 = g.toInt();
int b2 = b.toInt();
setColor(r2, g2, b2);
}
// 数字转成rgb字符串
String int2rgb(long int i, String flag) {
long int r = (i & 0xff0000) >> 16;
long int g = (i & 0xff00) >> 8;
long int b = (i & 0xff);
if(flag == "r") return String(r);
if(flag == "g") return String(g);
if(flag == "b") return String(b);
return String(r) + "," + String(g) + "," + String(b);
}
// rgb转数字
long int rgb2int(String r, String g, String b) {
long int r2 = r.toInt();
long int g2 = g.toInt();
long int b2 = b.toInt();
long int color = ((0xff << 24) | (r2 << 16) | (g2 << 8) | b2);
color = color - 16777216;
return color;
}
// 颜色校正函数
void testColor()
{
setColor(255, 0, 0); //Red
Serial.println("RED");
delay(2000);
setColor(0, 255, 0); //Green
Serial.println("GREEN");
delay(2000);
setColor(0, 0, 255); //blue
Serial.println("BLUE");
delay(2000);
setColor(135, 206, 250); //
Serial.println("LightSkyBlue");
delay(2000);
setColor(0, 255, 255); //
Serial.println("Cyan");
delay(2000);
setColor(255, 215, 0); //
Serial.println("Gold");
delay(2000);
}最后接线完成类似下图:

本文结束。