Arduino WS2812B LED灯带设计方案

今日头条

1139人已加入

描述

Arduino WS2812B LED灯带可单独控制每个LED的亮度和颜色,提供了一种简单而酷炫的LED效果体验。

WS2812B LED灯带以串联方式组合LED灯,内嵌有放大驱动电路、振荡器和电压可编程控制芯片,可寻址,可通过一个单线接口通讯。这意味着,用户可通过Arduino板子上的一个数字引脚,同时控制多个LEDs。

DC5V WS2812B 5米可寻址LED灯带特点如下:
输入电压:DC 5V
功率:60LEDS/M -18watt/M
FPCB宽度:60LEDS/M—-10mm
颜色:全色RGB,梦幻流彩
长度:定制
IC类型:内嵌
LED类型:SMD 5050
PCB颜色:白色
防护:IP65级防水

首先,按照电路图把Arduino插接到面包板上,连接电阻器和电容器后接通5V电源。其中,Arduino的#2数字引脚先通过一个330欧姆电阻器,再通过跳线连接到LED灯带中间的Din引脚。

 

led

 

接下来,下载 FastLED 库,在Arduino IDE中打开库。

键入FastLED,点击安装。

安装成功后,接着上传 FastLED header。

 

led

 

然后,设置LED数据引脚,本项目中为2。LED灯带的LED数可达60,本项目选择12。


#include
#define LED_PIN 2
#define NUM_LEDS 12

现在,创建阵型CRGB,长度为所使用的LEDs数量。

CRGB leds[NUM_LEDS];

通过RGB校验控制ws2812,本例中NUM LEDs为12。

FastLED.addLeds(leds, NUM_LEDS);,>

设置最大电压(5v)和最大电流(500mA),让不会消耗Arduino太大电流。

FastLED.setMaxPowerInVoltsAndMilliamps(5, 500);

每次上传一组新代码时,通过FastLED.clear() 和 FastLED.show() 刷新LEDs。

FastLED.clear();

FastLED.show();

按照常规顺序校准LEDs:即红 - 绿 - 蓝。如果实际显示的颜色顺序与FastLED.show()函数所写不一致,就对修改函数的顺序。

Arduino WS2812B LED灯带校准的代码如下:

#include
#define LED_PIN 2
#define NUM_LEDS 12

CRGB leds[NUM_LEDS];

void setup() {
 FastLED.addLeds(leds, NUM_LEDS);
 FastLED.setMaxPowerInVoltsAndMilliamps(5, 500);
 FastLED.clear();
 FastLED.show();

},>

void loop() {
 // RED Green Blue
for (int i=0; i{
   leds[i] = CRGB(0, 255-2*i, 20*i );
   FastLED.setBrightness(6*i);
   FastLED.show();
   delay (50);

for (int i=NUM_LEDS; i> 0; i-- )
{
   leds[i] = CRGB(20*i, 0, 255-20*i );
   FastLED.setBrightness(60-2*i);
   FastLED.show();
       delay (50);;>

}
}


校准后,LED灯带的所有LED都真是显示了函数赋值,即红色。

 

led

 

Arduino WS2812B LED灯带全部显示红色代码:

#include
#define LED_PIN 2
#define NUM_LEDS 12
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds(leds, NUM_LEDS);
FastLED.setMaxPowerInVoltsAndMilliamps(5, 500);
FastLED.clear();
FastLED.show();,>

}

void loop() {
 // RED Green Blue
for (int i=0; ileds[i] = CRGB(255, 0, 0 );
FastLED.show();
 };>


把代码上传到Arduino后,所有LED都将显示为红色。

如果改变函数中的第二个值为255,可改变LED的颜色为绿色:

leds[i] = CRGB(0, 255, 0 )

如果希望得到混色效果,如紫色,函数赋值为:leds[i] = CRGB(255, 0, 255 )。上传代码后,灯带就全部显示了紫色。

 

led

 

在保持紫色的同时,如果想让灯带闪烁,需要使用 FastLED.setBrightness() 函数,设置亮度的等级,并从0 逐渐递增。

下面是Arduino WS2812B LED灯带闪烁代码:


#include
#define LED_PIN 2
#define NUM_LEDS 12

CRGB leds[NUM_LEDS];


void setup() {
FastLED.addLeds(leds, NUM_LEDS);
FastLED.setMaxPowerInVoltsAndMilliamps(5, 500);
FastLED.clear();
FastLED.show();,>

}

void loop() {
 // RED Green Blue
for (int i=0; i{
leds[i] = CRGB(255, 0, 255 );
FastLED.setBrightness(2*i);
FastLED.show();
delay (20);

for (int i=NUM_LEDS; i> 0; i-- )
{
leds[i] = CRGB(255, 0, 255 );
FastLED.setBrightness(2*i);
FastLED.show();
delay (20);;>

}
}

上传上述代码后,就获得了闪烁效果。但是,这个闪烁实在是太快了,这就需要增加时延,获得理想的闪烁效果。

最后,让我们实现灯带从左向右,从绿向蓝渐变。将绿色RGB取值每个循环减小20,经过12次循环这个值就接近0,颜色就成为蓝色。

for (int i=0; i{
leds[i] = CRGB(0, 255-2*i, 20*i );
FastLED.setBrightness(6*i);
FastLED.show();
delay (50);
};>

再从红色开始循环……

 

led

 

这样,Arduino WS2812B LED灯带就按照我们希望的旋律和效果开始闪烁,代码如下:

#include
#define LED_PIN 2
#define NUM_LEDS 12

CRGB leds[NUM_LEDS];


void setup() {
FastLED.addLeds(leds, NUM_LEDS);
FastLED.setMaxPowerInVoltsAndMilliamps(5, 500);
FastLED.clear();
FastLED.show();,>

}

void loop() {
 // RED Green Blue
for (int i=0; i{
leds[i] = CRGB(0, 255-2*i, 20*i );
FastLED.setBrightness(6*i);
FastLED.show();
delay (50);

for (int i=NUM_LEDS; i> 0; i-- )
{
leds[i] = CRGB(20*i, 0, 255-20*i );
FastLED.setBrightness(60-2*i);
FastLED.show();
delay (50);;>

}
}

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

全部0条评论

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

×
20
完善资料,
赚取积分