使用Arduino控制WS2812B可寻址RGB led

在这个项目中,我们将研究一个有趣的产品,名为WS2812B可寻址led。它们是单独可寻址的RGB led,也有不同的名称,例如Adafruit公司的NeoPixel。在本教程中,我们将了解WS2812B led,它的内ob直播app部结构和结构欧宝官网app苹果下载,以及如何使用Arduino控制单独可寻址的led。

介绍

如果您已经做了一些与LED相关的项目,那么您可能已经使用了离散LED(无论是通过孔或SMD)。这些led可以是单色led或RGB led。

离散型led的主要缺点是,如果在数组中使用它们,就失去了单独控制它们的特权。例如,如果你使用一个晶体管将3或4个led连接到Arduino的单个引脚上,那么阵列中的所有led将具有相同的行为,即亮度控制或颜色变化。

另一个场景是您可能也使用过的领导带灯用于圣诞装饰或普通家庭照明。您可能已经注意到,即使在昂贵的LED条形灯中,也没有控制单个LED的功能。

如果你的目标是控制单个led在一条,那么WS2812B可寻址RGB led是你的答案。

WS2812B可寻址的发光二极管

WS2812B可寻址LED带是一种智能光源,在同一个封装中包含一个控制IC和一个RGB LED,通常采用SMD 5050形式。下面的图片显示了WS2812B发光二极管。

WS2812B可寻址led特色图像

乍一看,它看起来像一个普通的LED条。但如果仔细观察,你会发现WS2812B LED Control IC集成在SMD 5050 RGB LED封装中。下面放大的图像显示了同样的内容。

WS2812B可寻址led电路图

单个WS2812B LED Block有四个引脚,分别是VDD、VSS (GND)、DIN和DOUT。这些引脚的功能非常简单,下表给出了简单的引脚功能描述。

函数

VDD

LED电源

VSS

地面

喧嚣

控制数据信号输入

DOUT

控制数据信号输出

WS2812B IC的电源也通过VDD引脚提供。

WS2812B LED应用电路

要理解如何单独控制WS2812B led,下面的应用电路将是有用的。所有的WS2812B LED以级联方式连接,其中第一个LED的DO连接到第二个LED的DIN,以此类推。

但第一个LED必须通过它的DIN引脚从微控制器如Arduino接收数据。下图为典型应用电路框图。

WS2812B可寻址led应用

WS2812B led采用的数据传输协议为NRZ模式。WS2812B LED阵列的第一个DIN端口接收来自微控制器的数据。单个像素的数据是24位的,由每个8位的红、绿、蓝LED控制数据组成。数据的顺序必须是GRB, 24位数据的组成如下图所示。注意,HIGH位数据是先发送的。

WS2812B可寻址led 24位数据

一旦第一个WS2812B块接收到第一个24位数据,数据被发送到其内部锁存器进行进一步解码。剩余的数据通过其信号整形和放大电路进行整形,并通过DO引脚传递到级联中的下一个像素。

如何用Arduino控制WS2812B LED ?

现在,让我们继续使用Arduino来控制WS2812B LED Array。在进一步设计方案之前,有一件重要的事情我们需要解决,即项目的电源供应。

每个WS2812B LED Pixel有三个LED和一个控制IC,所以一个像素的电流要求在60ma左右。如果你有一个包含20个WS2812B单独寻址led的长条,那么总电流要求是20 * 60 mA = 1.2 a。

这是Arduino无法提供的,无论是通过USB端口(最多可以提供300 mA)还是通过5V桶插孔(最多可以提供900 mA)。

因此,为Arduino和WS2812B LED Strip供电的最好方法是借助外部5v电源,以提供足够的电流。

既然项目的供电部分已经清楚了,我们现在可以开始进行项目的示意图了。

线路图

下图为Arduino UNO与WS2812B的连接RGB LED条.Arduino UNO的5V和led与GND (VSS)一起连接到外部电源。

LED Strip的DIN引脚通过330Ω Resistor连接到Arduino的Digital IO引脚7。

WS2812B可寻址led电路图

组件的要求

  • Arduino UNO
  • WS2812B发光二极管
  • 5V电源(最小2A)
  • 330Ω电阻

编程Arduino

编程Arduino的第一步是下载一个名为“FastLED”的支持库。你可从以下连结下载图书馆:FastLED图书馆”。

解压zip文件的内容,并将文件夹重命名为“FastLED”。将此文件夹移动到Arduino的libraries文件夹。

代码

#include  #define LEDPIN 7 #define nummofleds 10 CRGB led [nummofleds];void setup() {FastLED。addLeds(led, nummofleds);} void loop() {for (int I = 0;我< = 9;i++) {led [i] = CRGB (0,0,255);FastLED.show ();延迟(40);} for (int I = 9;我> = 0; i--) { leds[i] = CRGB ( 255, 0, 0); FastLED.show(); delay(40); } }

结论

本教程通过一个项目对WS2812B单独寻址led进行了简单介绍,以展示我们如何使用Arduino控制WS2812B led。如果您了解这些基础知识,那么您就可以实现广泛的项目。

2反应

  1. 我如何使用一个按钮让第一个led闪烁一段时间。然后停止
    我有6个按钮,我希望每个按钮都做一个动作,然后停止,等待另一个按钮被按下。但每个按钮都有一个设置程序。
    我不知道这是否可能。
    谢谢你!

留下一个回复

您的电子邮件地址将不会被公布。必填字段已标记