Parçalar · 5 dk okuma

WS2812B NeoPixel LED Kullanımı: Adreslenebilir RGB LED Rehberi

WS2812B NeoPixel nedir, nasıl bağlanır? Adreslenebilir RGB LED şerit, halka ve matris, güç hesabı, Adafruit NeoPixel ve FastLED kodları, gökkuşağı efekti, ESP32 ve Pico örnekleri.

WS2812B, içinde kendi sürücü çipi bulunan bir RGB LED'dir. Sıradan bir RGB LED her renk için ayrı bir pin isterken, WS2812B ile yüzlerce LED'i tek bir veri kablosuyla kontrol eder, her birine ayrı renk ve parlaklık verirsin. NeoPixel, Adafruit'in bu adreslenebilir LED ailesine verdiği isimdir. Şerit, halka, çubuk ve matris şeklinde satılan bu LED'ler ortam aydınlatmasından LED saatlere, oyunlardan bildirim lambalarına kadar sayısız projede kullanılır.

WS2812B adreslenebilir RGB LED şerit parçası
Tek bir WS2812B şerit parçası: veri soldaki DI girişinden girer, sağdaki DO çıkışından sonraki LED'e geçer. Ok işareti veri yönünü gösterir.

WS2812B nasıl çalışır?

Her WS2812B'nin 5x5 mm'lik gövdesinde kırmızı, yeşil ve mavi üç küçük LED ile bunları süren minik bir çip vardır. Arduino veri hattından art arda 24 bitlik renk paketleri gönderir: 8 bit yeşil, 8 bit kırmızı, 8 bit mavi (GRB sırası). İlk LED gelen ilk 24 biti kendine alır, kalanını DO pininden sonraki LED'e aktarır; her LED aynı şeyi yapar. Veri hattı en az 50 mikrosaniye (yeni sürümlerde 280) LOW kalınca bütün LED'ler aldıkları rengi aynı anda gösterir. Her renk 256 kademe olduğu için bir LED 16,7 milyon farklı renk gösterebilir.

ÖzellikDeğer
Besleme gerilimi5 V (3,5–5,3 V)
LED başına akımEn fazla ~60 mA (tam beyaz), sönükken ~1 mA
Veri hızı800 kHz, tek kablo
Renk sırasıGRB (yeşil, kırmızı, mavi)
Renk derinliği24 bit, 16,7 milyon renk
Kılıf5050 SMD (5x5 mm)

Şerit, halka ve matris çeşitleri

TürLED sayısıTipik kullanım
ŞeritMetrede 30, 60 veya 144Ortam aydınlatması, TV arkası, raf ışığı
Halka8, 12, 16, 24LED saat, gösterge, masa lambası
Matris8x8 = 64, 16x16 = 256Kayan yazı, animasyon, piksel oyunlar
Çubuk (stick)8Seviye göstergesi, durum ışığı
24 LED'li WS2812B NeoPixel halka
24 LED'li NeoPixel halka: LED saatler ve dairesel göstergeler için idealdir; 12 saatlik bir kadranda her LED yarım saati gösterir.

WS2812B bağlantısı

WS2812B'nin üç bağlantısı vardır: 5V, GND ve DIN (veri girişi). Şeridin üzerindeki oklar verinin aktığı yönü gösterir; Arduino'yu her zaman okun başladığı uca, yani DIN tarafına bağla. Veri hattına seri olarak 330–470 Ω bir direnç, şeridin besleme girişine de 5V ile GND arasına 1000 µF bir kondansatör eklemek ilk LED'i ani gerilim sıçramalarından korur.

WS2812B piniBağlantı
5VBirkaç LED için Arduino 5V, fazlası için harici 5 V adaptör
GNDGND (harici adaptörle Arduino'nun GND'si ortak olmalı)
DIND6 (330 Ω direnç üzerinden)
DOUTSonraki LED'in ya da şeridin DIN pini
Çok sayıda LED'i Arduino'nun 5V pininden besleme: USB en fazla 500 mA verir, tam beyazda tek bir LED bile 60 mA çekebilir. Şeridi harici bir 5 V adaptörle besle, adaptörün GND'sini mutlaka Arduino'nun GND'sine bağla ve devreye enerji varken veri kablosunu GND'den önce takma; ilk LED bozulabilir.

Güç hesabı: kaç amper gerekir?

En kötü durum için formül basittir: LED sayısı × 60 mA. Animasyonlarda bütün LED'ler nadiren aynı anda tam beyaz yanar; pratikte ortalama LED başına 20 mA civarında akım görülür. Yine de adaptörü en kötü duruma göre seçmek ya da parlaklığı yazılımla sınırlamak gerekir. Watt cinsinden gücü bulmak için Ohm kanunu aracını, pille çalışan projelerde süreyi tahmin etmek için pil ömrü aracını kullanabilirsin.

LED sayısıEn kötü durum (tam beyaz)Önerilen besleme
80,48 AUSB yeterli (parlaklık sınırlı)
301,8 A5 V 3 A adaptör
603,6 A5 V 4 A adaptör
1448,6 A5 V 10 A adaptör
Uzun şeritlerde ince bakır yollar gerilimi düşürür ve şeridin sonu sarımsı ya da kırmızımsı görünür. Bunu önlemek için her 1–2 metrede bir 5V ve GND'yi adaptörden tekrar şeride bağla (güç enjeksiyonu). Ayrıca parlaklığı %20–30'a düşürmek akımı ciddi biçimde azaltır ve gözle görülür bir fark yaratmaz.

Adafruit NeoPixel kütüphanesiyle ilk kod

Kütüphane Yöneticisi'nde Adafruit NeoPixel kütüphanesini ara ve kur. Aşağıdaki kod LED'leri sırayla kırmızı, yeşil ve mavi yakarak şeridi bir renkle "siler":

Arduino (C++)
1#include <Adafruit_NeoPixel.h>
2
3#define PIN 6          // DIN pini / data pin
4#define NUM_LEDS 8     // LED sayısı / number of LEDs
5
6Adafruit_NeoPixel strip(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
7
8void setup() {
9  strip.begin();
10  strip.setBrightness(50);   // 0–255, yalnız bir kez / only once
11  strip.show();              // hepsini söndür / all off
12}
13
14void colorWipe(uint32_t color, int wait) {
15  for (int i = 0; i < NUM_LEDS; i++) {
16    strip.setPixelColor(i, color);
17    strip.show();            // değişikliği gönder / send the change
18    delay(wait);
19  }
20}
21
22void loop() {
23  colorWipe(strip.Color(255, 0, 0), 80);   // kırmızı / red
24  colorWipe(strip.Color(0, 255, 0), 80);   // yeşil / green
25  colorWipe(strip.Color(0, 0, 255), 80);   // mavi / blue
26}

setPixelColor() yalnızca bellekteki rengi değiştirir; LED'lerin gerçekten yanması için show() çağırman gerekir. Böylece bütün LED'lerin rengini ayarlayıp tek seferde gösterebilirsin. setBrightness() renk bilgisini kalıcı olarak ölçeklediği için onu loop() içinde sürekli değiştirmek yerine setup() içinde bir kez çağırmak en doğrusudur. Her LED Arduino'nun RAM'inde 3 bayt yer tutar; Uno'nun 2 KB'lık belleği yüzlerce LED'de hızla dolar.

Gökkuşağı efekti: HSV renkler

Renkleri kırmızı, yeşil ve mavi değerleriyle ayarlamak yerine HSV (ton, doygunluk, parlaklık) kullanmak efektleri çok kolaylaştırır: yalnızca tonu değiştirerek bütün renk çemberinde dolaşırsın. Adafruit kütüphanesinde ton 0–65535 arasıdır. gamma32() renkleri gözün algısına göre düzelterek geçişleri daha doğal gösterir:

Arduino (C++)
1#include <Adafruit_NeoPixel.h>
2
3#define PIN 6
4#define NUM_LEDS 24
5
6Adafruit_NeoPixel strip(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
7
8void setup() {
9  strip.begin();
10  strip.setBrightness(40);
11}
12
13void loop() {
14  for (long first = 0; first < 65536; first += 256) {
15    for (int i = 0; i < NUM_LEDS; i++) {
16      uint16_t hue = first + i * 65536L / NUM_LEDS;   // her LED'e farklı ton / a different hue per LED
17      strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(hue)));
18    }
19    strip.show();
20    delay(10);
21  }
22}

FastLED kütüphanesi

Daha gelişmiş efektler için FastLED kütüphanesi de çok popülerdir. LED'leri CRGB dizisinde tutar, leds[3] = CRGB::Red; gibi okunaklı komutlar sunar ve ton aralığı 0–255'tir. fill_rainbow(), fadeToBlackBy() gibi hazır fonksiyonları ateş, yıldız kayması ya da nefes alma efektlerini birkaç satırla yazmanı sağlar. En kullanışlı özelliklerinden biri FastLED.setMaxPowerInVoltsAndMilliamps(5, 2000); komutudur: kütüphane parlaklığı otomatik düşürerek akımı 2 A'nın altında tutar.

8x8 NeoPixel matris kullanmak

Matrisler de aslında uzun bir şerittir; 64 LED tek bir veri hattına arka arkaya bağlanmıştır. Çoğu matriste satırlar zikzak (serpentine) dizilir: çift satırlar soldan sağa, tek satırlar sağdan sola gider. Bu yüzden x, y koordinatını LED numarasına çevirmek için çift satırlarda y × 8 + x, tek satırlarda y × 8 + (7 − x) formülünü kullanırsın. 64 LED tam beyazda 3,8 A çekebileceği için matrislerde parlaklığı düşük tutmak özellikle önemlidir.

8x8 WS2812B NeoPixel LED matris
8x8 NeoPixel matris: 64 adreslenebilir LED tek bir veri hattıyla kontrol edilir; kayan yazı ve piksel oyunlar için idealdir.

ESP32 ve Raspberry Pi Pico ile WS2812B

Adafruit NeoPixel ve FastLED kütüphaneleri ESP32'de de çalışır; Wi-Fi sayesinde LED'leri telefondan kontrol etmek ya da hava durumuna göre renk değiştiren bir lamba yapmak çok kolaydır. Dikkat edilmesi gereken nokta gerilim seviyesidir: WS2812B 5 V ile beslendiğinde veri girişinde en az 3,5 V bekler, ESP32 ve Pico ise 3,3 V verir. Çoğu şerit yine de çalışır, ama ilk LED titriyor ya da rastgele renkler çıkıyorsa veri hattına 74AHCT125 gibi bir seviye dönüştürücü ekle. Raspberry Pi Pico'da MicroPython'un hazır neopixel modülü vardır:

MicroPython
1from machine import Pin
2import neopixel
3import time
4
5NUM = 8
6np = neopixel.NeoPixel(Pin(0), NUM)      # GP0 → DIN
7
8def wheel(pos):                          # 0–255 → renk çemberi / colour wheel
9    if pos < 85:
10        return (255 - pos * 3, pos * 3, 0)
11    if pos < 170:
12        pos -= 85
13        return (0, 255 - pos * 3, pos * 3)
14    pos -= 170
15    return (pos * 3, 0, 255 - pos * 3)
16
17j = 0
18while True:
19    for i in range(NUM):
20        r, g, b = wheel((i * 256 // NUM + j) & 255)
21        np[i] = (r // 5, g // 5, b // 5)  # parlaklığı düşür / dim it
22    np.write()
23    j = (j + 2) & 255
24    time.sleep_ms(20)

WS2812B ile proje fikirleri

  • TV arkası ortam ışığı: Televizyonun arkasına yapıştırılan şeritle odaya yumuşak bir renk ver.
  • NeoPixel saat: 60 LED'li halkada saat, dakika ve saniyeyi farklı renklerle göster.
  • Ses seviyesi göstergesi: Bir mikrofon modülüyle müziğin şiddetine göre yükselen bir LED çubuğu yap.
  • Bildirim lambası: ESP32 ile internetten gelen hava durumuna ya da e-postaya göre renk değiştir.
  • Polis çakarı ve Karaşimşek: Kırmızı-mavi yanıp sönme ya da ileri geri kayan ışık efektleri yaz.
  • Piksel yılan oyunu: 8x8 matris ve bir joystick ile klasik yılan oyununu yeniden yap.

Sık yapılan hatalar ve çözümleri

  • Hiçbir LED yanmıyor: Arduino şeridin yanlış ucuna, DOUT tarafına bağlanmıştır; oklara bak ve DIN ucunu kullan.
  • Renkler karışık (kırmızı yerine yeşil yanıyor): Renk sırası yanlış; kodda NEO_GRB kullan, bazı şeritler için NEO_RGB gerekebilir.
  • İlk LED titriyor ya da rastgele renkler çıkıyor: Seri direnç yok, GND ortak değil ya da 3,3 V veri sinyali yetmiyor.
  • Şeridin sonu sarımsı görünüyor: Gerilim düşümü var; şeride birkaç noktadan güç ver ya da parlaklığı düşür.
  • LED'ler yanınca Arduino resetleniyor: USB'den çok fazla akım çekiliyor; harici adaptör ve 1000 µF kondansatör kullan.
  • Yalnızca ilk birkaç LED yanıyor: Koddaki NUM_LEDS değeri gerçek LED sayısından küçük ya da şeridin bir noktasında kopuk bağlantı var.

WS2812B, renklerin nasıl karıştığını anlamak için harika bir başlangıç noktasıdır; renk mantığını RGB LED Kullanımı yazısında, parlaklık kontrolünü PWM Nedir? yazısında bulabilirsin. BlueGrays uygulamasında WS2812B kullanımı, polis çakarı, yürüyen LED, Karaşimşek, animasyon efektleri ve ESP32 ile NeoPixel şerit kontrolü projelerini devre şemaları ve kodlarıyla bulabilirsin.

Sıkça sorulan sorular

WS2812B ile NeoPixel arasındaki fark nedir?

NeoPixel, Adafruit'in WS2812, WS2812B ve SK6812 gibi adreslenebilir LED'ler için kullandığı marka adıdır. Hepsi aynı veri protokolünü kullanır, bu yüzden aynı kütüphanelerle aynı şekilde kontrol edilir.

Bir Arduino'ya kaç tane WS2812B bağlanabilir?

Veri tarafında kesin bir sınır yoktur ama üç şey sınırlar: RAM (her LED 3 bayt, Uno'da pratikte birkaç yüz LED), yenileme süresi (her LED 30 mikrosaniye; 1000 LED yaklaşık 30 ms, yani saniyede ~33 kare) ve güç kaynağı.

WS2812B'yi Arduino'nun 5V pininden besleyebilir miyim?

Yalnızca birkaç LED'i düşük parlaklıkta besleyebilirsin; örneğin 8 LED'lik bir çubuk parlaklık 50 civarındayken USB ile çalışır. Daha fazla LED için harici bir 5 V adaptör kullan ve GND'leri birleştir.

Direnç ve kondansatör şart mı?

Şart değildir ama kesinlikle önerilir. Veri hattındaki 330–470 Ω direnç sinyaldeki sıçramaları yumuşatarak ilk LED'i korur; besleme girişindeki 1000 µF kondansatör de enerji verildiği anda oluşan ani akım darbesini sönümler.

WS2812B, ESP32 ve 3,3 V kartlarla çalışır mı?

Çoğu zaman çalışır ama garanti değildir: 5 V ile beslenen WS2812B veri girişinde en az 3,5 V bekler. Titreme ya da yanlış renk görürsen 74AHCT125 gibi bir seviye dönüştürücüyle veri sinyalini 5 V'a yükselt.

WS2812B, WS2811, WS2813 ve SK6812 arasındaki farklar nelerdir?

WS2811 ayrı bir sürücü çipidir ve genellikle 12 V şeritlerde üç LED'i birlikte sürer. WS2813'te yedek veri hattı vardır, bir LED bozulsa bile zincir devam eder. SK6812 uyumlu bir alternatiftir ve beyaz LED'li RGBW sürümü de vardır; bunun için kodda NEO_GRBW kullanılır.

Tüm projeleri gör
WS2812B Kullanımı
#69Orta
Premium

WS2812B Kullanımı

WS2812B adreslenebilir LED şeridinde her bir LED'in rengini bağımsız olarak ayarlayarak temel kullanımını gösteren proje. FastLED kütüphanesi ile piksel bazlı renk kontrolünü öğretir.

4.8(54)
70
WS2812B İle Polis Çakar Yapımı
#70Orta
Premium

WS2812B İle Polis Çakar Yapımı

WS2812B LED şeridi ile kırmızı ve mavi renkleri hızlıca yanıp söndürerek polis çakar efekti oluşturan proje. Grup bazlı LED kontrolü ve animasyon zamanlama mantığını öğretir.

4.8(67)
86
WS2812B Yürüyen Led
#71Orta
Premium

WS2812B Yürüyen Led

WS2812B LED şeridinde tek bir LED'i sırayla ileri doğru hareket ettirerek yürüyen ışık efekti oluşturan proje. Piksel bazlı sıralı animasyon mantığını öğretir.

4.8(58)
75
WS2812B Yürüyen Led(Birikerek)
#72Orta
Premium

WS2812B Yürüyen Led(Birikerek)

WS2812B LED şeridinde LED'leri sırayla yakarak biriktiren, ardından sırayla söndüren dolum-boşaltma animasyonu projesi. Birikimli LED animasyon mantığını öğretir.

4.7(50)
65
WS2812B Karaşimşek
#73Orta
Premium

WS2812B Karaşimşek

WS2812B LED şeridinde tek bir LED'i ileri-geri hareket ettirerek Knight Rider tarzı karaşimşek efekti oluşturan proje. Çift yönlü piksel animasyonunu öğretir.

4.9(73)
94
WS2812B Karaşimşek 3'lü
#74Orta
Premium

WS2812B Karaşimşek 3'lü

WS2812B LED şeridinde HSV renk uzayını kullanarak sürekli değişen gökkuşağı renk geçişi animasyonu oluşturan proje. CHSV renk modeli ve EVERY_N_MILLISECONDS makrosu kullanımını öğretir.

4.8(61)
79
WS2812B Animasyon 1
#75Orta
Premium

WS2812B Animasyon 1

WS2812B LED şeridinde HSV renk uzayı ile sürekli kayan gökkuşağı animasyonu oluşturan proje. Hue değerini zamana bağlı değiştirerek akıcı renk geçişi mantığını öğretir.

4.9(69)
89
WS2812B Animasyon 2
#76Orta
Premium

WS2812B Animasyon 2

WS2812B LED şeridinde FastLED palet sistemi ile gökkuşağı, bulut, parti gibi farklı renk paletlerini zamana bağlı otomatik değiştiren gelişmiş animasyon projesi.

4.8(65)
84
ESP32 WS2812B NeoPixel Şerit Kontrolü
#126Orta
Premium

ESP32 WS2812B NeoPixel Şerit Kontrolü

WS2812B (NeoPixel) adreslenebilir LED'ler, tek bir veri pini üzerinden zincirleme kontrol edilebilen akıllı RGB LED'lerdir. Bu projede 8 LED'lik bir WS2812B şeridi Adafruit_NeoPixel kütüphanesi ile kontrol edip akıcı bir gökkuşağı animasyonu üreteceğiz. ESP32'nin 3.3V mantık seviyesi çoğu WS2812B partisinde sorunsuz çalışsa da, kararsızlık durumunda 470Ω seri direnç ve 1000µF kondansatör çözümünü göstereceğiz. Animasyon, HSV renk uzayında ton (hue) değerini kaydırarak elde edilir.

4.9(19)
30

Yüzlerce RGB LED'i tek bir veri kablosuyla nasıl kontrol edeceğini, WS2812B şeridi doğru bağlamayı, güç ihtiyacını hesaplamayı ve gökkuşağı efektleri yazmayı adım adım öğren.