(1)基本组成:
WS2812B是一款智能控制LED光源,控制电路和RGB芯片集成在一个5050个组件的封装中。内部包括智能数字端口数据锁存器和信号整形放大驱动电路。还包括一个精密的内部振荡器和一个12V电压可编程恒流控制部分,有效地保证像素点光的颜色高度一致。
(2)通信方式:
数据传输协议采用单一NZR通信方式(单总线)。像素上电复位后,DIN端口接收控制器的数据,第一个像素采集初始的24位数据,然后发送给内部数据锁存器,另一个由内部信号整形放大电路整形的数据通过DO端口发送给下一个级联像素。每个像素传输后,信号减少24位。像素采用自动整形传输技术,使得像素级联数不受信号传输的限制,只依赖于信号传输的速度。
(3)优点:
WS2812B具有驱动电压低、环保节能、亮度高、散射角大、一致性好、功耗低、寿命长等优点。集成在LED上的控制芯片电路更加简单,体积小,安装方便。
(4)机械尺寸:
(5)管脚说明:
(1)本实验采用Arduino UNO R3开发板及自主搭建电路的方式,实现预设功能。
(2)三基色流水灯的电路图,如下图所示:
(3)实验准备:安装下载安装 “Adafruit_NeoPixel” 库文件。
(4)实现功能:三基色流水灯,第一圈红色,第二圈绿色,第三圈蓝色,第四圈红色,循环显示。
代码实现:
//WS2812,RGB灯环
//炫彩流水灯,第一圈红色,第二圈绿色,第三圈蓝色,第四圈红色,循环显示
#include
#define PIN 7 // 控制灯带的引脚
#define NUM_LEDS 32 // 灯带上灯的数量
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
strip.begin(); // 初始化灯带
strip.show(); // 所有LED灯关闭
}
void loop() {
for (int i = 0; i < NUM_LEDS; i++)
{
strip.setPixelColor(i, 20, 0, 0); // 设置颜色为红色
strip.show(); // 展示颜色
delay(50); // 50毫秒的延迟
}
for (int i = 0; i < NUM_LEDS; i++)
{
strip.setPixelColor(i, 0, 20, 0); // 设置颜色为绿色
strip.show(); // 展示颜色
delay(50); // 50毫秒的延迟
}
for (int i = 0; i < NUM_LEDS; i++)
{
strip.setPixelColor(i, 0, 0, 20); // 设置颜色为蓝色
strip.show(); // 展示颜色
delay(50); // 50毫秒的延迟
}
}
(1)本实验采用Arduino UNO R3开发板及自主搭建电路的方式,实现预设功能。
(2)彩色流水灯(顺时针、逆时针)的电路图,如下图所示:
(3)实验准备:下载安装 “FastLED” 库文件。
(4)实现功能:炫彩流水灯,先是6圈顺时针彩色流水灯,再是6圈逆时针的彩色流水灯,最后重复操作,6圈顺时针、6圈逆时针彩色流水灯效果。
代码实现:
//WS2812,RGB灯环
//炫彩流水灯,顺时针、逆时针的彩色流水灯
#include
#define LED_PIN 7
#define NUM_LEDS 32
CRGB leds[NUM_LEDS];
void setup()
{
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
FastLED.setMaxPowerInVoltsAndMilliamps(5, 500);
FastLED.clear();
FastLED.show();
}
void loop()
{
//深色,红色→绿色,顺时针
for (int i = 0; i < NUM_LEDS; i++ )
{
leds[i] = CRGB(255 - 7 * i, 7 * i, 0 );
FastLED.setBrightness(20);
FastLED.show();
delay (50);
}
//深色,绿色→蓝色,顺时针
for (int i = 0; i < NUM_LEDS; i++ )
{
leds[i] = CRGB(0, 255 - 7 * i, 7 * i );
FastLED.setBrightness(20);
FastLED.show();
delay (50);
}
//深色,蓝色→红色,顺时针
for (int i = 0; i < NUM_LEDS; i++ )
{
leds[i] = CRGB(7 * i, 0, 255 - 7 * i );
FastLED.setBrightness(20);
FastLED.show();
delay (50);
}
//浅色,红色→绿色,顺时针
for (int i = 0; i < NUM_LEDS; i++ )
{
leds[i] = CRGB(255 - 7 * i, 7 * i, 255);
FastLED.setBrightness(20);
FastLED.show();
delay (50);
}
//浅色,绿色→蓝色,顺时针
for (int i = 0; i < NUM_LEDS; i++ )
{
leds[i] = CRGB(255, 255 - 7 * i, 7 * i);
FastLED.setBrightness(20);
FastLED.show();
delay (50);
}
//浅色,蓝色→红色,顺时针
for (int i = 0; i < NUM_LEDS; i++ )
{
leds[i] = CRGB(7 * i, 255, 255 - 7 * i);
FastLED.setBrightness(20);
FastLED.show();
delay (50);
}
//深色,红色→蓝色,逆时针
for (int i = NUM_LEDS; i > 0; i-- )
{
leds[i] = CRGB(255 - 7 * i, 0, 7 * i );
FastLED.setBrightness(20);
FastLED.show();
delay (50);
}
//深色,蓝色→绿色,逆时针
for (int i = NUM_LEDS; i > 0; i-- )
{
leds[i] = CRGB(0, 7 * i, 255 - 7 * i );
FastLED.setBrightness(20);
FastLED.show();
delay (50);
}
//深色,绿色→红色,逆时针
for (int i = NUM_LEDS; i > 0; i-- )
{
leds[i] = CRGB(7 * i , 255 - 7 * i, 0);
FastLED.setBrightness(20);
FastLED.show();
delay (50);
}
//浅色,红色→蓝色,逆时针
for (int i = NUM_LEDS; i > 0; i-- )
{
leds[i] = CRGB(255 - 7 * i, 255, 7 * i );
FastLED.setBrightness(20);
FastLED.show();
delay (50);
}
//浅色,蓝色→绿色,逆时针
for (int i = NUM_LEDS; i > 0; i-- )
{
leds[i] = CRGB(255, 7 * i, 255 - 7 * i );
FastLED.setBrightness(20);
FastLED.show();
delay (50);
}
//浅色,绿色→红色,逆时针
for (int i = NUM_LEDS; i > 0; i-- )
{
leds[i] = CRGB(7 * i , 255 - 7 * i, 255);
FastLED.setBrightness(20);
FastLED.show();
delay (50);
}
}
(1)本实验采用Arduino UNO R3开发板及自主搭建电路的方式,实现预设功能。
(2)彩虹灯环的电路图,如下图所示:
(3)实验准备:下载安装 “FastLED” 库文件。
(4)实现功能:炫彩流水灯,灯环呈现彩虹色,依次显示赤橙黄绿青蓝紫。
//WS2812,RGB灯环
//炫彩流水灯,灯环呈现彩虹色:赤橙黄绿青蓝紫
#include
#define LED_PIN 7
#define NUM_LEDS 32
CRGB leds[NUM_LEDS];
void setup()
{
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
FastLED.setMaxPowerInVoltsAndMilliamps(5, 500);
FastLED.clear();
FastLED.show();
}
void loop()
{
//红色→橙色→黄色
for (int i = 0; i < NUM_LEDS; i++ )
{
leds[i] = CRGB(255, 7 * i + 31, 0 );
FastLED.setBrightness(20);
FastLED.show();
delay (50);
}
//黄色→绿色
for (int i = 0; i < NUM_LEDS; i++ )
{
leds[i] = CRGB(224 - 7 * i, 255, 0 );
FastLED.setBrightness(20);
FastLED.show();
delay (50);
}
//绿色→青色→蓝色
for (int i = 0; i < NUM_LEDS; i++ )
{
leds[i] = CRGB(0, 224 - 7 * i, 7 * i + 31);
FastLED.setBrightness(20);
FastLED.show();
delay (50);
}
//蓝色→紫色
for (int i = 0; i < NUM_LEDS; i++ )
{
leds[i] = CRGB(7 * i, 0, 255);
FastLED.setBrightness(20);
FastLED.show();
delay (50);
}
//紫色→红色
for (int i = 0; i < NUM_LEDS; i++ )
{
leds[i] = CRGB(255, 0, 224 - 7 * i);
FastLED.setBrightness(20);
FastLED.show();
delay (50);
}
}
参考资料1: WS2812B引脚图及功能,应用电路和原理说明
参考资料2: 用Arduino制作溢彩流光的LED梦幻灯带
参考资料3: 【雕爷学编程】Arduino动手做(124)—24位WS2812环形灯板
参考资料4: 秒上手!使用Arduino控制基于WS2812B的LED灯条