如何将 WS2812B 可寻址 LED 灯条连接到 Arduino
基于 LED 的照明技术的发展继续迅速。昨天,一个控制器控制RGB色带,可以通过遥控器调节亮度和颜色,这似乎是一个奇迹。今天,市场上有更多的可能性。
基于WS2812B的LED灯条
可寻址LED灯条与标准的区别 RGB 就是它 每个元素的亮度和色彩比例可单独调节.这使您可以获得其他类型的照明设备所不具备的照明效果。 LED 灯条以众所周知的方式进行控制——通过脉冲宽度调制。该系统的特点是每个 LED 都有自己的 PWM 控制器。 WS2812B芯片是一个三色发光二极管和一个控制电路,组合在一个封装中。
这些元件在电源上并联组合成一个磁带,并通过串行总线进行控制——第一个元件的输出连接到第二个元件的控制输入,依此类推。在大多数情况下,串行总线建立在两条线上,其中一条传输选通脉冲(同步脉冲),另一条传输数据。
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伏 |
Arduino 和 WS2812B
世界上流行的 Arduino 平台允许您创建草图(程序)来控制可寻址功能区。系统的能力足够广泛,但如果在某种程度上它们已经不够用,那么获得的技能将足以无缝切换到 C++ 甚至汇编程序。虽然,更容易获得有关 Arduino 的基础知识。
将基于 WS2812B 的功能区连接到 Arduino Uno (Nano)
在第一阶段,一个简单的 Arduino Uno 或 Arduino Nano 板就足够了。稍后,更复杂的电路板可用于构建更复杂的系统。在将可寻址 LED 灯条物理连接到 Arduino 板时,您必须确保满足以下几个条件:
- 由于抗噪能力低,数据线连接导线应尽量短(尽量在10厘米以内);
- 将数据线连接到 Arduino 板的空闲数字输出 - 稍后将由软件指示;
- 由于功耗高,因此无需从板上为板条供电 - 为此目的提供了单独的电源。
需要连接灯具和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);
编译和加载草图后,功能区将闪烁 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);
视频课程:使用可寻址色带的视觉效果示例。
在学习了如何使 LED 闪烁之后,您可以继续本课程并学习如何创建色彩效果,包括具有平滑过渡的流行“彩虹”和“北极光”。 WS2812B 和 Arduino 可寻址 LED 为您提供了几乎无限的可能性。