如何將 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 為您提供了幾乎無限的可能性。