lamp.housecope.com
後退

如何將可尋址 LED 燈條 WS2812B 連接到 Arduino

發佈時間:2021 年 8 月 2 日
0
2578

基於 LED 的照明技術的發展繼續迅速。就在昨天,可以使用遙控器調節亮度和顏色的控制器控制的 RGB 色帶似乎是一個奇蹟。今天,市場上出現了更多功能的燈具。

基於WS2812B的LED燈條

可尋址LED燈條與標準燈條的區別 RGB 事情是 每個元素的亮度和顏色比例分別調整.這使您可以獲得其他類型的照明設備根本無法訪問的照明效果。可尋址 LED 燈條的發光以已知方式控制 - 使用脈衝寬度調製。該系統的一個特點是為每個 LED 配備自己的 PWM 控制器。 WS2812B芯片是將三色發光二極管和控制電路組合在一個封裝中。

如何將可尋址 LED 燈條 WS2812B 連接到 Arduino
LED的外觀與驅動器。

這些元件並聯組合成一個電源帶,並通過串行總線控制 - 第一個元件的輸出連接到第二個元件的控制輸入,依此類推。在大多數情況下,串行總線建立在兩條線上,其中一條傳輸選通脈衝(時鐘脈衝),另一條傳輸數據。

地址條的外觀。
地址條的外觀。

WS2812B 芯片的控制總線由一根線組成——數據通過它傳輸。數據被編碼為恆定頻率的脈衝,但具有不同的佔空比。 一個脈衝 - 一位.每個位的持續時間為 1.25 µs,零位由持續時間為 0.4 µs 的高電平和 0.85 µs 的低電平組成。該單位看起來像 0.8 µs 的高電平和 0.45 µs 的低電平。向每個 LED 發送一個 24 位(3 字節)突發,然後是 50 µs 的低電平暫停。這意味著將為下一個 LED 傳輸數據,以此類推鏈中的所有元素。數據傳輸以 100 µs 的暫停結束。這表明磁帶編程週期已完成,可以發送下一組數據包。

管理地址磁帶的數據。
管理地址磁帶的數據。

這樣的協議可以通過一條線路進行數據傳輸,但需要保持時間間隔的準確性。允許的差異不超過 150 ns。此外,這種總線的抗噪能力非常低。任何幅度足夠大的干擾都可以被控制器感知為數據。這對控制電路的導體長度施加了限制。另一方面,這使得它成為可能 功能區健康檢查 無需額外的設備。如果您給燈通電並用手指觸摸控制總線的接觸墊,某些 LED 可能會隨機亮起並熄滅。

WS2812B 元件規格

要基於地址帶創建照明系統,您需要了解發光元件的重要參數。

LED 尺寸5x5mm
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磁帶連接圖。

另請閱讀

如何將 LED 連接到 Arduino 板

 

WS2812B 程序控制基礎

已經提到,為了控制 WS2812B 微電路,需要產生一定長度的脈衝,以保持高精度。 Arduino語言中有用於形成短脈衝的命令 延遲微秒.問題是這些命令的分辨率是 4 微秒。也就是說,以給定的精度形成時間延遲是行不通的。有必要切換到 C++ 或 Assembler 工具。您可以使用專門為此創建的庫通過 Arduino 組織對可尋址 LED 燈條的控制。您可以開始熟悉 Blink 程序,該程序使發光元件閃爍。

快速領導

這個庫是通用的。除地址磁帶外,它還支持多種設備,包括由 SPI 接口控制的磁帶。它有廣泛的可能性。

首先,必須包含庫。這是在設置塊之前完成的,該行如下所示:

#include <FastLED.h>

下一步是創建一個數組來存儲每個發光二極管的顏色。它將具有名稱條帶和尺寸 15 - 按元素數量(最好為該參數分配一個常數)。

CRGB條[15]

在設置塊中,您需要指定草圖將使用的磁帶:

無效設置(){

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

整數;

}

RGB 參數設置顏色序列順序,15 表示 LED 的數量,7 是分配用於控制的輸出的數量(最好為最後一個參數分配一個常數)。

循環塊以一個循環開始,該循環順序寫入數組 Red(紅色發光)的每個部分:

對於 (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 語言中,程序如下所示:

#include <Adafruit_NeoPixel.h>

與前一種情況一樣,庫已連接,並且聲明了 lenta 對象:

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

在 setup 塊中,磁帶被初始化:

無效設置(){

lenta.begin()

}

在循環塊中,所有元素都以紅色突出顯示,變量被傳遞給 feed,並創建了 1 秒的延遲:

for (int y=0; y<15; y++)// 15 - 燈中的元素數量

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

磁帶.show();

延遲(1000);

輝光以黑色記錄停止:

對於 (int y=0; y< 15; y++)

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

磁帶.show();

延遲(1000);

基於 NeoPixel 的 Blink 程序草圖。
基於 NeoPixel 的 Blink 程序草圖。

視頻教程:使用地址磁帶的視覺效果示例。

一旦您學會瞭如何使 LED 閃爍,您就可以繼續學習如何創建色彩效果,包括具有平滑過渡的流行彩虹和北極光。可尋址 LED WS2812B 和 Arduino 為此提供了幾乎無限的可能性。

註釋:
目前沒有評論。成為第一!

我們建議您閱讀

如何自己修理LED燈