Adreslenebilir (NeoPixel) LED Nedir? Arduino İle Adreslenebilir LED Kullanımı
Your ads will be inserted here by
Easy Plugin for AdSense.
Please go to the plugin admin page to
Paste your ad code OR
Suppress this ad slot.
Bu yazımızda yeni yeni yaygınlaşmaya başlayan bir üründen bahsedeceğiz. Adreslenebilir LED olarak bilinen bu ürün ileride bir hayli ilgi çekeceğe benziyor. Adreslenebilir ledi diğer ledlerden veya şerit ledlerden ayıran özelliği; ledleri tek tek adresleyerek çalıştırabilirsiniz. Mesela 8 ledden oluşan bir adreslenebilir lediniz var. Bu ledlerin 3. sünü yakabilir, 5. sini yakabilir ve 8. sini yakabilirsiniz. Aynı zamanda bu ledlerin de renkleri ile oynayabilirsiniz. 3. led kırmızı yanarken 5. ledi yeşil, 8. ledi mavi olarak çalıştırabilirsiniz.
Adreslenebilir ledler, özel bir haberleşme protokolü ile nokta bilgi gönderimi ile ilgili lede, parlaklık ve renk bilgisini gönderebilmektedir. Özel bir haberleşme protokolü dedik ancak seri haberleşme ile ilgilenenlerin bileceği bir tekniktir. I2C olarak bilinen seri haberleşme protokolüdür. Ancak kullanımı oldukça basittir.
Adreslenebilir ledlerin farklı çeşitleri bulunmaktadır.
Tekli Adreslenebilir LED
Çubuk Şeklinde Adreslenebilir LED
Halka Şeklinde Adreslenebilir LED
Matris Şeklinde Adreslenebilir LED
Şerit Şeklinde Adreslenebilir LED
Adreslenebilir ledler NeoPixel olarak da anılmaktadır bunun sebebi Adafruit firmasının üretmiş olduğu adreslenebilir ledlere verdiği isimdir. Kastedilen şey ise aynıdır.
Adreslenebilir ledler üzerinde seri haberleşmeyi gerçekleştiren entegreler bulunmaktadır. Bu entegreler ile de isimleri anılmaktadır. Bunlar ; WS2812, SK6812 ve APA102 entegreleridir.
Bizim ise programlanmasını göstereceğimiz WS2812 entegresinin kullanıldığı Adreslenebilir leddir.
Adreslenebilir LED Kullanımı ve Bağlantısı
Adreslenebilir RGB ledlerde her led üzerinde tümleik olarak 3 adet led bulunmaktadır. Bu ledler kırmızı, yeşil ve mavi renkte olan ledlerdir. Ancak sadece tek hat ile kontrol edilebilmektedir. Her led için 3 adet pin bağlantısı gerekmemektedir.
Şerit halde ledleri kullanırken dikkat edilecek diğer bir husus ise güç tüketimidir.
Her led içerisinde 3 adet led bulunmaktadır demiştik. Bir led (RGB Led içerisinde ki tek bir Led) ortalama 20mA çektiği düşünülürse bir adet RGB led 20mA x 3 = 60mA akım çekecektir. 8 li çubuk led kullanıyorsanız 60mA x 8 = 480mA olacaktır. Yani 8’li çubuk led kullandığınız da Arduino üzerinden beslemek olumsuz sonuçlar doğurabilir. Ledlerin beslenmesi için harici bir kaynak kullanılmalıdır. Daha fazla sayıda lede sahip şerit kullanacaksanız ona uygun bir güç kaynağı seçmelisiniz.
Temel olarak adreslenebilir ledlerin üzerinde 4 tane pin bulunmaktadır. Bunlardan 2 tanesi Gnd. 1 tanesi Vdc, 1 tanesi de Din (bir tarafı Din diğer tarafı Dout) Din pini ile kontrol sağlanmaktadır.
Eğer 8li çubuk lede başka çubuk ledler eklemek isterseniz onları da Dout kısmına, yeni ekleyeceğiniz şerit ledin Din pini gelecek şekilde bağlamanız gerekir.
Arduino İle Adreslenebilir LED Bağlantı Şeması
Arduino İle Adreslenebilir LED Programı
Your ads will be inserted here by
Easy Plugin for AdSense.
Please go to the plugin admin page to
Paste your ad code OR
Suppress this ad slot.
Öncelikle program fonksiyonlarını içeren kütüphaneyi eklememiz gerekiyor.
Arduino IDE menüsünden Taslak >> Library ekle >> Libraryleri düzenle seçeneği tıklanır. Daha sonra açılan pencereden arama çubuğuna kütüphanemizin adını yazarak aratıyoruz. “FastLED”. Gelen kütüphaneyi son versiyonu ile “Kur” butonuna tıklayarak indiriyoruz. Eğer program yazma ekranına eklenmediyse Taslak >> Library ekle seçeneği ile gelen menüden “FastLED” seçeneğini bulup ekleyebiliriz.
Kısaca FastLED komutlarından bahsedelim:
#define LED_PIN 7 // Ledi bağladığımız pini buraya yazıyoruz. Yani Led üzerinde Din’e bağladığımız pin
#define NUM_LEDS 8 // Burada Kaçlı Led kullanacağımızı belirtiyoruz.
CRGB leds[NUM_LEDS]; // Bir dizin oluşturuyoruz. bir üstte led sayısını belirttiğimiz için buraya bir şey yazmıyoruz.
void setup() {
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
}
Setup kısmına yukarıdaki şekilde konfigürasyon ayarı yapıyoruz. tabi tanımlamaları ve değişken isimlerini yukarıda yazdığımızdan değişken isimleri direk yerleşecektir. Bu kısma bir şey yazmıyoruz.
CRGB(kırmızı, yeşil, mavi); // Belirtilen ledin renkleri burada ayarlanmaktadır. Kırmızı, yeşil ve mavi yazan yerlere 0-255 arasında değerler yazabilirsiniz. Bu değer o rengin ne kadar yanacağını kontrol eder. Mesela (255,0 ,0) şeklinde bir kullanımda sadece kırmızı yanacaktır. Benzer şekilde renk kombinasyonları da yapabilirsiniz.
leds[i] = CRGB(255, 0, 0); //Led için yaptığınız renk ayarını “i” ile belirtilen lede aktarabilirsiniz. i = 0 ise 0. led gibi..
FastLED.show(); // Bu fonksiyonu yaptığınız ayarlardan sonra kullanmanız gerekmektedir. Çünkü bu komut led için yaptığınız ayarlamaların çalıştırılmasını (gösterilmesini) sağlıyor.
FastLED.clear(); // Ledlerin tamamının sönmesini sağlar ancak bu fonksiyondan sonra da FastLED.show() fonksiyonunu kullanmanız gerekmektedir.
Şimdi ledleri sırası ile değişik renklerde yakacak program kodlarına bakalım:
#include <FastLED.h>
#define LED_PIN 7
#define NUM_LEDS 8
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
}
void loop() {
leds[0] = CRGB(255, 0, 0);
FastLED.show();
delay(500);
leds[1] = CRGB(0, 255, 0);
FastLED.show();
delay(500);
leds[2] = CRGB(0, 0, 255);
FastLED.show();
delay(500);
leds[3] = CRGB(150, 0, 255);
FastLED.show();
delay(500);
leds[4] = CRGB(255, 200, 20);
FastLED.show();
delay(500);
leds[5] = CRGB(85, 60, 180);
FastLED.show();
delay(500);
leds[6] = CRGB(50, 255, 20);
FastLED.show();
delay(500);
leds[7] = CRGB(50, 255, 20);
FastLED.show();
delay(500);
}
Aşağıdaki FOR komutu ile Ledlerin tek tek nasıl programlandığı görülmektedir:
#include <FastLED.h>
#define LED_PIN 7
#define NUM_LEDS 8
CRGB leds[NUM_LEDS];
int time=100; //time değişkeni ile ms olarak ledlerin arasındaki geçiş süresini ayarlayabilirsiniz.
void setup() {
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
}
void loop() {
for(int i = 0 ; i < 8 ; i++ ){
leds[i] = CRGB(255, 0, 0);
FastLED.show();
delay(time);
}
FastLED.clear();
FastLED.show();
delay(500);
///////////////////////////////
for(int i = 8 ; i > 0 ; i– ){
leds[i] = CRGB(255, 0, 0);
FastLED.show();
delay(time);
}
FastLED.clear();
FastLED.show();
delay(500);
}
Dudigan
kolay gelsin verdiğniz bilgiler için öncelikle teşekkür ederim,
öğrenmek istediğim bir konu var ;
seri port ekranından gönderdiğim sayıdaki led’i nasıl yakabilirim??
yani 15,48,63 gibi,
yazdıklarınızı denedim fakat benim demek istediğim tam olarak şu idi;
leds[0] = CRGB(255, 0, 0);
FastLED.show();
delay(500);
leds[0] içerideki sıfır sayısını seri porttan gönderdiğim değerin otomatik olarak yazılmasını nasıl sağlayabilirim,
yani eğer içerideki sayıya seri porttan gelen sayıyı otomatik olarak atabilir isem ,
100 veya 1000 adet için tek tek ;
leds[0] = CRGB(255, 0, 0);
FastLED.show();
delay(500);
bu satırları yazmam gerekmez öyle değil mi ?
bu mümkün ise bana bir örnek ile bu konuda yardımcı olabilir misiniz?
Şimdiden değerli bilgileriniz için çok çok teşekkür ederim..
Saygılarımla
cevabım için özür dilerim. farklı bir konu ile ilgili zannederek yazdım. Pixelled olayı farklı tabi.
öncelikle bir değişken oluşturun.. sonra gelen veriyi o değişkene kaydedin.
kaydettiğiniz değişkeni de led[] dizisinin argümanı olarak kullanın.
mesela int x; şeklinde değişken oluşturdu iseniz, led[x] = CRGB(255, 0, 0); olarak kullanmanız yeterli olacaktır..
leds[x] = CRGB(255, 0, 0);
FastLED.show();
delay(500);
leds[x] şeklinde tek tek yaktığımız ledin tümünü istediğimiz renkte nasıl yakabiliriz komutu nedir.?
Bluetooth bağlantısı nasıl yaparim