ElectroBest
後退

如何將 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燈具