飘易博客(作者:Flymorn)
订阅《飘易博客》RSS,第一时间查看最新文章!
飘易首页 | 留言本 | 关于我 | 订阅Feed

Arduino控制RGB三色LED灯,实现1600万种酷炫颜色

Author:飘易 Source:飘易
Categories:物联网 PostTime:2019-8-28 11:29:20
正 文:

RGB LED 模块由一个贴片全彩 LED 制成,通过 R、G、B 三个引脚的 PWM 电压输入可以调节三种基色(红/蓝/绿)的强度从而实现全彩的混色效果。用 Arduino 对模块的控制可实现酷炫的灯光效果。


RGB LED产品特性

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三种颜色的混合达到全彩的效果,


Arduino接线图

R接arduino的9号数字口

G接arduino的10号数字口

B接arduino的11号数字口

公共的阴极接arduino的gnd


编写arduino程序

注意,由于受引脚数量和云端控制节点的限制,我们把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);
}



最后接线完成类似下图:


本文结束。

作者:飘易
来源:飘易
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
Tag:Arduino RGB LED 浏览(次) 我要评论(0条)
上一篇:没有了
下一篇:Arduino通过DHT11数字式温湿度传感器获取温度、湿度
0条评论 “Arduino控制RGB三色LED灯,实现1600万种酷炫颜色”
No Comment .
发表评论
名称(*必填)
邮件(选填)
网站(选填)

记住我,下次回复时不用重新输入个人信息
© 2007-2019 飘易博客 Www.Piaoyi.Org 原创文章版权由飘易所有