原创 Arduino WS2812B LED梦幻灯带制作

2022-4-24 08:16 3930 11 11 分类: 消费电子

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引脚。



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

键入FastLED,点击安装。

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



然后,设置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 = CRGB(0, 255-2*i, 20*i );

FastLED.setBrightness(6*i);

FastLED.show();

delay (50);

}

for (int i=NUM_LEDS; i> 0; i-- )

{

leds = CRGB(20*i, 0, 255-20*i );

FastLED.setBrightness(60-2*i);

FastLED.show();

delay (50);

}

}

校准后,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; i

leds = CRGB(255, 0, 0 );

FastLED.show();

}

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

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

leds = CRGB(0, 255, 0 )

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




在保持紫色的同时,如果想让灯带闪烁,需要使用 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 = CRGB(255, 0, 255 );

FastLED.setBrightness(2*i);

FastLED.show();

delay (20);

}

for (int i=NUM_LEDS; i> 0; i-- )

{

leds = CRGB(255, 0, 255 );

FastLED.setBrightness(2*i);

FastLED.show();

delay (20);

}

}

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

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

for (int i=0; i

{

leds = CRGB(0, 255-2*i, 20*i );

FastLED.setBrightness(6*i);

FastLED.show();

delay (50);

}

再从红色开始循环……



这样,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 = CRGB(0, 255-2*i, 20*i );

FastLED.setBrightness(6*i);

FastLED.show();

delay (50);

}

for (int i=NUM_LEDS; i> 0; i-- )

{

leds = CRGB(20*i, 0, 255-20*i );

FastLED.setBrightness(60-2*i);

FastLED.show();

delay (50);

}

}

作者: 硬之城Allchips, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3975615.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
11
关闭 站长推荐上一条 /3 下一条