ElectricianExp.com
后退

如何将 WS2812B 可寻址 LED 灯条连接到 Arduino

发布时间:2021 年 8 月 2 日
0
2578

基于 LED 的照明技术的发展继续迅速。昨天,一个控制器控制RGB色带,可以通过遥控器调节亮度和颜色,这似乎是一个奇迹。今天,市场上有更多的可能性。

基于WS2812B的LED灯条

可寻址LED灯条与标准的区别 RGB 就是它 每个元素的亮度和色彩比例可单独调节.这使您可以获得其他类型的照明设备所不具备的照明效果。 LED 灯条以众所周知的方式进行控制——通过脉冲宽度调制。该系统的特点是每个 LED 都有自己的 PWM 控制器。 WS2812B芯片是一个三色发光二极管和一个控制电路,组合在一个封装中。

如何将 WS2812B 可寻址 LED 灯条连接到 Arduino
LED的外观与驱动器。

这些元件在电源上并联组合成一个磁带,并通过串行总线进行控制——第一个元件的输出连接到第二个元件的控制输入,依此类推。在大多数情况下,串行总线建立在两条线上,其中一条传输选通脉冲(同步脉冲),另一条传输数据。

可寻址条的外观。
地址带的外观。

WS2812B 芯片的控制总线由一根线组成——它传输数据。数据被编码为具有恒定频率但具有不同频率的脉冲。 一个脉冲是一位.每个位的持续时间为 1.25 µs,零位由 0.4 µs 的高电平和 0.85 µs 的低电平组成。该单位看起来像 0.8 µs 的高点和 0.45 µs 的低点。一个 24 位(3 个字节)的数据包被发送到每个 LED,然后以低电平的形式暂停 50µs。这意味着接下来将传输下一个 LED 的数据,以此类推链中的所有元素。数据传输以 100 µs 的暂停结束。这意味着功能区编程周期完成,可以发送下一组数据包。

可寻址色带的控制数据。
用于地址磁带控制的数据。

该协议允许单线进行数据传输,但需要精确的时序。差异不超过 150 ns。此外,该总线的抗噪能力非常低。任何幅度足够大的干扰都可以被控制器感知为数据。这对来自控制电路的导线长度施加了限制。另一方面,它提供了以下能力 验证功能区 无需额外的设备。如果您给灯具通电并用手指触摸控制总线的接触板,一些 LED 可能会出现混乱的开关。

WS2812B 元件的技术特性

要创建基于可寻址色带的照明系统,有必要了解发光元件的重要参数。

LED 尺寸5x5 毫米
PWM调制频率400赫兹
最大亮度下的电流消耗每个元件 60 mA
电源电压5伏
专家建议
灯具消耗的功率相当高。它不仅取决于启动辉光 p-n 结所需的电流,还取决于形成 PWM 的开关损耗。对于 15 个元件的网络,电源和导体设计用于至少 1 安培的电流。

Arduino 和 WS2812B

世界上流行的 Arduino 平台允许您创建草图(程序)来控制可寻址功能区。系统的能力足够广泛,但如果在某种程度上它们已经不够用,那么获得的技能将足以无缝切换到 C++ 甚至汇编程序。虽然,更容易获得有关 Arduino 的基础知识。

将基于 WS2812B 的功能区连接到 Arduino Uno (Nano)

在第一阶段,一个简单的 Arduino Uno 或 Arduino Nano 板就足够了。稍后,更复杂的电路板可用于构建更复杂的系统。在将可寻址 LED 灯条物理连接到 Arduino 板时,您必须确保满足以下几个条件:

  • 由于抗噪能力低,数据线连接导线应尽量短(尽量在10厘米以内);
  • 将数据线连接到 Arduino 板的空闲数字输出 - 稍后将由软件指示;
  • 由于功耗高,因此无需从板上为板条供电 - 为此目的提供了单独的电源。

需要连接灯具和Arduino的公共电源线。

WS2812B 接线图。
WS2812B 带状接线图。

另请阅读

如何将 LED 连接到 Arduino 板

 

WS2812B软件控制基础

前面已经提到,要控制 WS2812B 芯片,您需要形成具有一定长度的脉冲,并且具有很高的精度。在 Arduino 语言中有形成短脉冲的命令 延迟微秒 è .问题是这些命令的分辨率是 4 微秒。也就是说,不可能以给定的精度形成时间延迟。有必要去 C++ 或汇编工具。借助专门为此目的创建的库,可以通过 Arduino 控制可寻址 LED 灯条。您可以从程序 Blink 开始,它使发光元件闪烁。

快灯

这个库是通用的。除了可寻址功能区之外,它还支持许多设备,包括 SPI 控制功能区。它具有广泛的功能。

首先,您必须连接库。这是在设置块之前完成的,字符串如下所示:

#包括

下一步是创建一个数组来存储每个发光二极管的颜色。它将具有 15 个元素的名称条带和维度。

CRGB条[15]

在设置块中,您必须指定脚本将使用的功能区:

无效设置(){

FastLED.addLeds<WS2812B, 7, RGB>(strip, 15);

整数克;

}

RGB 参数设置颜色的顺序,15 表示 LED 的数量,7 是分配给控制的输出数量(最好也为最后一个参数分配一个常数)。

循环块以一个循环开始,该循环顺序写入红色(红色发光)数组的每个部分:

对于 (g=0; g< 15;g++)

{strip[g]=CRGB::Red;}

然后将生成的数组发送到照明器:

FastLED.show();

延迟 1000 毫秒(秒):

延迟(1000);

然后您可以以相同的方式关闭所有元素,在其中写入黑色。

对于 (int g=0; g< 15;g++)

{strip[g]=CRGB::黑色;}

FastLED.show();

延迟(1000);

基于 FastLed 的闪光带草图。
基于 FastLed 的闪光带的草图。

编译和加载草图后,功能区将闪烁 2 秒。如果你想分别控制每个颜色分量,那么而不是字符串 {strip[g]=CRGB::Red;} 使用了几个字符串:

{

剥离[g].r=100;// 设置红色元素的发光级别

剥离[g].g=11;// 绿色也一样

剥离[g].b=250;// 蓝色也一样

}

新像素

该库仅适用于 NeoPixel Ring LED,但资源密集度较低且仅包含必需品。在 Arduino 中,程序如下所示:

#包括

与前一种情况一样,插入库,并声明 lenta 对象:

Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// 其中 15 是元素的数量,6 是分配的输出

lenta 在 setup 块中初始化:

无效设置(){

lenta.begin ()

}

在循环块中,所有元素都点亮为红色,一个变量被传递到磁带并创建了 1 秒的延迟:

for (int y=0; y<15;y++)// 15 - 灯具中的元件数量

{lenta.setPixelColor(y, lenta.Color(255,0,0))};

伦塔.show();

延迟(1000);

lenta 通过写黑色停止发光:

对于 (int y=0; y< 15;y++)

{ lenta.setPixelColor(y, lenta.Color(0,0,0))};

伦塔.show();

延迟(1000);

基于 NeoPixel 的 Blink 程序草图。
基于 NeoPixel 的 Blink 程序的草图。

视频课程:使用可寻址色带的视觉效果示例。

在学习了如何使 LED 闪烁之后,您可以继续本课程并学习如何创建色彩效果,包括具有平滑过渡的流行“彩虹”和“北极光”。 WS2812B 和 Arduino 可寻址 LED 为您提供了几乎无限的可能性。

注释:
暂时没有评论。成为第一!

阅读小贴士

如何自己修理LED灯具