Rehber Arduino ile kolayca ARGB LED kontrolü!

100. makalemi basit ama çoğu kişinin işine yarayabilecek bir konuda açmak istedim. :)

Bildiğiniz gibi RGB LED'ler hayatımızın bir parçası artık. Her yerden RGB fışkıran odaları ya da bilgisayarları bir kenara bırakırsak, masanıza ya da odanızın bir kısmına aydınlatma amaçlı eklemek, gerçekten güzel olabiliyor. Ancak piyasadaki setler gerçekten pahalı. Phillips Hue ile bir set yapmak isteseniz, 1000 - 1200 TL'yi gözden çıkartmanız gerekiyor. Xiaomi'nin 400 TL bandında muadil bir ürünü var ama o da pahalı, ayrıca çok bulunmuyor piyasada. Kendinden kontrolcülü setler de var, ancak dandikler.

Tabii hal böyle olunca, DIY damarımız kabarmış oluyor. Ben de uzun süredir masama ARGB LED döşemeyi düşünüyordum ama gerek fiyat, gerekse uygun alternatfilerin pahalılığı nedeniyle erteliyordum.

Geçenlerde Robotistan'da Seeedunio XIAO diye minik bir Arduino tabanlı kart gördüm. Sonrasında aklıma bu proje geldi ve başlamak istedim. :)


Seeeduino-XIAO-preview-1.jpg


Bu arkadaşın içinde ARM Cortex M0 işlemci var ve bir Arduino'ya göre kat kat güçlü.

parçalar.jpg


Gelelim LED tarafına.

RGB şerti LED denince, akla genelde 4 pinli ve 12V ile çalışanlar geliyor. Ancak bunların daha iyileri var artık: ARGB 5V LED'ler. Bu LED şeritler 5V ile çalışıyor ve üç adet pini var:
  • +5V
  • Data
  • GND
Klasik RGB LED'lerin aksine daha düşük voltajla ve daha az pin sayısıyla çalışıyorlar. Ayrıca renk ve efekt kontrolü de daha iyi. En büyük avantajı ise, her LED'in tek başına programlanabilmesi, kontrol edilebilmesi.

stripheader.jpg


Ben LED olarak, quadcopterim için aldığım WS2812B ARGB LED kartını kullandım. Ancak bunların LED şerit versiyonu da var:


Benim gibi birkaç LED'den oluşan bir demo yapacaksanız, 5V ve GND bağlantılarını yaptıktan sonra, LED'in data kısmını herhangi bir dijital porta takabilirsin. Eğer uzun bir şerit kullanacaksanız, LED'in güç bağlantılarını adaptöre yapın, ancak adaptörün GND hattını Arduino'nunki ile bağlamayı unutmayın.

Örnek bir bağlantı:

WS2812B-with-Arduino_bb.png


LED'leri kontrol etmek için, Arduino tarafında FastLED kütüphanesini kullanacağız. Kütüphaneyi buraya tıklayarak indirebilirsiniz.

Kütüphaneyi indirdiğimize ve bağlantılarımızı da yaptığımıza göre, kod kısmına geçebiliriz:

[CODE lang="cpp" title="Arduino ile ARGB Şerit LED Kontrolü" highlight="3-7"]#include <FastLED.h>

#define LED_PIN 5
#define NUM_LEDS 14
#define BRIGHTNESS 64
#define LED_TYPE WS2811
#define COLOR_ORDER GRB

CRGB leds[NUM_LEDS];

#define UPDATES_PER_SECOND 100

CRGBPalette16 currentPalette;
TBlendType currentBlending;

extern CRGBPalette16 myRedWhiteBluePalette;
extern const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM;


void setup() {
delay( 3000 ); // power-up safety delay
FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
FastLED.setBrightness( BRIGHTNESS );

currentPalette = RainbowColors_p;
currentBlending = LINEARBLEND;
}


void loop()
{
ChangePalettePeriodically();

static uint8_t startIndex = 0;
startIndex = startIndex + 1;

FillLEDsFromPaletteColors( startIndex);

FastLED.show();
FastLED.delay(1000 / UPDATES_PER_SECOND);
}

void FillLEDsFromPaletteColors( uint8_t colorIndex)
{
uint8_t brightness = 255;

for( int i = 0; i < NUM_LEDS; i++) {
leds = ColorFromPalette( currentPalette, colorIndex, brightness, currentBlending);
colorIndex += 3;
}
}

void ChangePalettePeriodically()
{
uint8_t secondHand = (millis() / 1000) % 60;
static uint8_t lastSecond = 99;

if( lastSecond != secondHand) {
lastSecond = secondHand;
if( secondHand == 0) { currentPalette = RainbowColors_p; currentBlending = LINEARBLEND; }
if( secondHand == 10) { currentPalette = RainbowStripeColors_p; currentBlending = NOBLEND; }
if( secondHand == 15) { currentPalette = RainbowStripeColors_p; currentBlending = LINEARBLEND; }
if( secondHand == 20) { SetupPurpleAndGreenPalette(); currentBlending = LINEARBLEND; }
if( secondHand == 25) { SetupTotallyRandomPalette(); currentBlending = LINEARBLEND; }
if( secondHand == 30) { SetupBlackAndWhiteStripedPalette(); currentBlending = NOBLEND; }
if( secondHand == 35) { SetupBlackAndWhiteStripedPalette(); currentBlending = LINEARBLEND; }
if( secondHand == 40) { currentPalette = CloudColors_p; currentBlending = LINEARBLEND; }
if( secondHand == 45) { currentPalette = PartyColors_p; currentBlending = LINEARBLEND; }
if( secondHand == 50) { currentPalette = myRedWhiteBluePalette_p; currentBlending = NOBLEND; }
if( secondHand == 55) { currentPalette = myRedWhiteBluePalette_p; currentBlending = LINEARBLEND; }
}
}

void SetupTotallyRandomPalette()
{
for( int i = 0; i < 16; i++) {
currentPalette = CHSV( random8(), 255, random8());
}
}

void SetupBlackAndWhiteStripedPalette()
{
fill_solid( currentPalette, 16, CRGB::Black);

currentPalette[0] = CRGB::White;
currentPalette[4] = CRGB::White;
currentPalette[8] = CRGB::White;
currentPalette[12] = CRGB::White;

}

void SetupPurpleAndGreenPalette()
{
CRGB purple = CHSV( HUE_PURPLE, 255, 255);
CRGB green = CHSV( HUE_GREEN, 255, 255);
CRGB black = CRGB::Black;

currentPalette = CRGBPalette16(
green, green, black, black,
purple, purple, black, black,
green, green, black, black,
purple, purple, black, black );
}

const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM =
{
CRGB::Red,
CRGB::Gray,
CRGB::Blue,
CRGB::Black,

CRGB::Red,
CRGB::Gray,
CRGB::Blue,
CRGB::Black,

CRGB::Red,
CRGB::Red,
CRGB::Gray,
CRGB::Gray,
CRGB::Blue,
CRGB::Blue,
CRGB::Black,
CRGB::Black
};[/CODE]

Bu kod, FastLED için demo kodu. İçinde çeşitli efektler bulunuyor ve program bunları döngü olarak çalıştırıyor. Kodda değiştirmemiz gereken kısımlar var:
  • #define LED_PIN 5 --> Data pinini Arduino'da taktığınız port
  • #define NUM_LEDS 14 --> Kullandığınız şerit LED'de ya da LED kartında, kaç adet LED çipi bulunuyorsa sayı olarak girin.
  • #define BRIGHTNESS 64 --> LED'lerin maksimum parlaklığını ayarlayabilirsiniz.
  • #define LED_TYPE WS2811 --> Taktığınız LED tipini değiştirebilirsiniz.
  • #define COLOR_ORDER GRB --> Taktığınız LED tipine göre, renk sıralamasını değiştirmeniz gerekir.
ARGB LED'ler ve FastLED ile, kolayca efekt ve renk ayarlamaları yapabilirsiniz. ARGB şeritler, normal RGB şeritlere göre gerçekten daha kullanışlı. Benim deneme için kurduğum sistem:

devrebağlantı.jpg


devrebağlantı.jpg


devrebağlantıled.jpg


Demo videosu:

Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.

Umarım güzel bir rehber olmuştur. Sipariş ettiğim şerit LED geldikten sonra, aynı rehberi ESP8266 ile ve daha detaylı yapacağım.

Okuduğunuz için teşekkürler. :)
 
Hocam bence o karta o para verilmesi pek mantıklı değil gibi. Onun yerine Nano tercih edilebilir.

Nano'dan bayağı güçlü bir kart, bunun yanında iç bileşenleri ve regülatörü de daha kalite. BEn sırf bu proje için alamdım ama klon Nano yerine bunu almak mantıklı bence. :)

Tabii gönül ister ki daha ucuz olsun ama, Dolar işte. :)
 
Elinize sağlık hocam. Ben Deneyap kart ile yaparsınız diye tahmin ediyordum. : D

Geçen gün açtığım konuya sizi etiketledim ama görmediniz sanırım. @Steve Rogers yardımcı oldu sağ olsun ama sizden de devre hakkında birkaç bir şey duymak isterim, müsaitseniz tabii.
 
Elinize sağlık hocam. Ben Deneyap kart ile yaparsınız diye tahmin ediyordum. : D

Geçen gün açtığım konuya sizi etiketledim ama görmediniz sanırım. @Steve Rogers yardımcı oldu sağ olsun ama sizden de devre hakkında birkaç bir şey duymak isterim, müsaitseniz tabii.

Deneyap Kart ile, yazının sonunda bahsettiğim kısmı yaparım belki. Ama Deneyap Kart için inceleme konusu açacağım önce. :)
 
S.A. @SideWinder kardeşim sen bu elektronik işinden anlıyorsun gördüğüm kadarı ile, sana sormak istediğim 2 soru var;
1- bende metresinde 60 led bulunan 3m WS2812B şerit led var ben buna Arduino Nano ile TV Ambians aydınlatması yaptım.

Video 1
Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.

Video 2
Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.

Yalnız sorun şu ekranı tam beyaz yapıyorum ancak resimlerde göründüğü gibi belli bir mesafeden sonra sararıyor ve renk şiddeti düşüyor,
1.jpg Şerit Led dizilimi
2.jpg Kasa içi bağlantı
3.jpg Kasa arkası bağlantı
IMG_20210426_213451.jpg Sonuç

internette araştırınca güç yetmediğinden bu şekilde olduğu belli bir mesafeden sonra şerit lede ekstra güç bağlanması gerektiği yazıyor ancak bunu nasıl ve ne şekilde yapacağımı bilmiyorum mümkünse ayrıntılı ve resimli olarak açıklarsanız sevinirim.


2-
Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.

Video da adamın biri Arduino Leonardo yu Corsairin Lighting Node Pro ya çeviriyor ve PC ye iCUE programını yükleyerek kontrol ediyor bunu Arduino Nano ile yapabilirmiyiz, amacım kasam da bulunun 7 adet A-RGB fan ve 2 adet A-RGB şerit ledi anlık olarak PC programından kontrol etmek.
Normalde RGB Fusion 2.0 ile oluyor ancak efektler sabit hep aynıları ama YouTube den iCUE efektlerini izlediğimde çok daha güzel geliyor ve ledleri tek tek bile istediğimiz gibi ayarlayabiliyoruz.

İlgilenirseniz sevinirim saygılarımla, kolay gelsin
 
@azrailkenan merhaba, ilgin için teşekkürler öncelikle.

Renk sorunu yazılım mı donanım mı kaynaklı anlamak için, LED'leri ambiyans aydınlatmasından farklı olarak, statik bir biçimde tam beyaz renkte çalıştır. Elle beyaza al yani. Biraz bekle, sorun devam ederse PSU yerine adaptöre geçebilirsin, belki çözülür.

iCUE tarafına gelince, açıkçası benim de böyle bir fikrim vardı ama ilk kez senin attığın video ile gördüm. Yüksek ihtimal LED'ler gelince ben de denerim. Arduino Nano ile olabileceğini sanmam, Leonardo Nano'ya göre çok güçlü.

Eğer olursa, Nano yerine Pi Pico da kullanılabilir belki. Pi Pico hem daha da güçlü, hem görece uygun.

LED'ler elime geçince denemeye çalışırım. Bende hem Nano, Hem Leonardo hem de Pi Pico mevcut. :)
 
@azrailkenan merhaba, ilgin için teşekkürler öncelikle.

Renk sorunu yazılım mı donanım mı kaynaklı anlamak için, LED'leri ambiyans aydınlatmasından farklı olarak, statik bir biçimde tam beyaz renkte çalıştır. Elle beyaza al yani. Biraz bekle, sorun devam ederse PSU yerine adaptöre geçebilirsin, belki çözülür.

iCUE tarafına gelince, açıkçası benim de böyle bir fikrim vardı ama ilk kez senin attığın video ile gördüm. Yüksek ihtimal LED'ler gelince ben de denerim. Arduino Nano ile olabileceğini sanmam, Leonardo Nano'ya göre çok güçlü.

Eğer olursa, Nano yerine Pi Pico da kullanılabilir belki. Pi Pico hem daha da güçlü, hem görece uygun.

LED'ler elime geçince denemeye çalışırım. Bende hem Nano, Hem Leonardo hem de Pi Pico mevcut. :)
1- Yazılım dan bağımsız olarak zaten beyaza aldım o şekilde resim attım videolarda da alt taraf renkler daha canlı gerisi biraz bulanık gibi adaptör kaç amper olması lazım ben o kadar ince işleri bilmiyorum da ve şerit led e nasıl bağlamam gerekiyor.

2- ben sırf bu icue işini yapmak için Arduino Nano aldım bi daha başka bi Leonardo - Pico falan alamam :D mümkünse Nano :)
 
WS2812B'de her çip 60 mA akım çekiyor. Metrede 30 adet var. Yani metre başı kabaca 2A çekiyor. 5 Volt 10 Amper ve üstü bir adaptör almak gerekebilir.

Ancak şu da var, LED'lerde de sıkıntı olabilir belki. Zira gördüğüm kadarıyla monitörün alt tarafında bulunan grup tam beyaz yanıyor.
 

Geri
Yukarı