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); }
最后接线完成类似下图:
本文结束。