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 bu fiyatı gerçekten hak ediyor mu acaba?

Eki Görüntüle 991226

Bendeki bu:


Ben mavi olanını iki sene önce 1000 TL'ye aldım. Hak ediyor mu, kesinlikle. Sağlam bir masa, üstü oldukça geniş, ayakları sayesinde de yer kaplamıyor. Tahtası da sıkıştırma değil bu arada, gerçek sunta.

Böyle bir masayı günümüzde marangoza yaptırmak istesen, ne daha ucuza yapar, ne de aynısını yapar. Ben iki masa kullanıyorum bu arada:

20210406_232230.jpg
 
Bendeki bu:


Ben mavi olanını iki sene önce 1000 TL'ye aldım. Hak ediyor mu, kesinlikle. Sağlam bir masa, üstü oldukça geniş, ayakları sayesinde de yer kaplamıyor. Tahtası da sıkıştırma değil bu arada, gerçek sunta.

Böyle bir masayı günümüzde marangoza yaptırmak istesen, ne daha ucuza yapar, ne de aynısını yapar. Ben iki masa kullanıyorum bu arada:

Eki Görüntüle 991237

Hocam benim yeni masa almam gerekiyor artık o yüzden size sormuştum. Masanızı gerçekten beğendim. Çok şık duruyor ve malzeme kalitesi bayağı iyi. Sizin fikrinizi almak istemiştim. Bu masayı beğendim. Düşüneceğim biraz daha. Ancak büyük ihtimal alacağım. Tekrar teşekkür ederim zaman ayırıp yorumladığınız için :)
 

Yeni konular

Geri
Yukarı