Arduino İle RGB P10 Led Panel Kullanımı
Bu yazımızda internette bir çok kaynak bulduğunuz ama bir türlü çalıştıramadığınız RGB P10 Led Panel’in kullanımını öğreneceğiz. Bu yazımızda arduino uno ile kullanımını göstereceğim ama siz mega ile de kullanabilirsiniz. Megada değişen bir kaç pin var onları kodda değiştirince mega ile de kullanabilirsiniz. Öncelikle P10 Led Panel nedir bunu öğrenelim.
P10 Led Panel Nedir ve Çeşitleri Nelerdir?
Ticari veya ev kullanımına yönelik LED ekranların yapımında kullanılan standart parça P10 LED ekrandır. RGB P10 LED Panel, plastik bir destek üzerinde dikdörtgen bir düzende düzenlenmiş 512 adet led dizisidir. Her ekranın satır başına 32 LED ve sütun başına 16 LED’inden oluşan bir matrisi vardır. Bu yüzlerce LED’in her biri, çeşitli, çok renkli ve hareketli ekranlar ve desenler oluşturmak için bağımsız olarak çalıştırılabilir. Her LED’in parlaklığı da farklılık gösterebilir, bu da size P10 modülünün çıkış ekranı üzerinde tam kontrol sağlar.
P10 LED ekran mükemmel teknik özelliklere sahiptir. 20 watt maksimum güç yükü ve 5 volt doğru akım voltaj girişi ile P10 LED ekran, 3500 ila 4500 nit parlaklık çıkışı sağlayabilir. P10, yüksek bir açıdan görülebildiğinden, farklı renkteki LED’ler arasında çarpıcı bir kontrasta sahip olduğundan ve IP65 düzenlemelerine göre su geçirmez olarak derecelendirildiğinden, özellikle yer veya duvar karosu olarak uygulama için kullanışlıdır. Standart P10 LED ekran, kırmızı, yeşil ve mavi ışıkları kullanarak renkler üretirken, P10 RGB LED ekran, daha eksiksiz bir deneyim için daha fazla temel renk aracılığıyla daha da geniş bir renk yelpazesine sunar.
Led panellerin bir çok çeşidi vardır. P10 aslında bir led panel çeşididir. “P10” Ledler arasındaki mesafeyi söylemektedir. Yani iki led arası 10mm’dir. Eğer elinizde P3 led panel varsa ledler arasındaki mesafe 3mm’ dir. Led panellerde bir diğer husus ise “Scan Time” yani panel tarama zamanıdır. Bu ledlerin kaç satırda bir yanacağını göstermektedir. Led panellerin bir çok tarama zamanlı olanı mevcuttur. 1/4, 1/8, 1/16 ve 1/32 tarama zamanlı olanları mevcuttur.
Bu ekranların normalde FPGA’ler veya diğer yüksek hızlı işlemciler tarafından çalıştırılmak üzere tasarlandığını unutmayın; herhangi bir türde PWM kontrolüne sahip değiller. Bunun yerine, PWM’yi her şeyi ‘manuel’ hale getirmek için ekranı tekrar tekrar yeniden çizmeniz gerekiyor. 16 MHz’lik bir Arduino’da, 12 bit rengi (4096 renk) sıkıştırmayı başarıldı ancak bu ekran, bir FPGA, CPLD, Pervane, XMOS veya diğer yüksek hızlı çok işlemcili denetleyici tarafından çalıştırıldığında daha parlak göstermektedir.
Çoğu Arduino uyumlu kartta, 12 bit renkli görüntüyü tutmak için 12 dijital pin ve yaklaşık 800 bayt RAM’e ihtiyacınız olmaktadır. (32×32 matris için bunun iki katı, düzgün çift tamponlu animasyon içinde bunun iki katına ihtiyaç var).
Tam verimde çalışan (tüm pikseller beyaza ayarlı) tek bir 32×16 veya 32×32 RGB matrisi, yaklaşık 4 Amper akım gerektirir! 64×32’lik bir matris için bu rakamı iki katına çıkar.
Not: Ancak ortalama olarak, tipik grafik ve animasyon sergileyen bu paneller daha az enerji tüketecektir… Tek bir 32×16 veya 32×32 panel için 2A’lık bir besleme veya 64×32’lik bir panel için 4A’lık bir besleme genellikle yeterlidir. Daha fazla Amper için derecelendirilmiş daha büyük bir güç kaynağı kullanmanın hiçbir zararı yoktur (örn. 10A besleme), ancak asla daha yüksek Voltajlı bir güç kaynağı kullanmayın!
Arduino’daki sınırlı RAM nedeniyle zincirleme nadiren yapılır. Yine de paneldeki giriş ve çıkış bağlantılarını ayırt etmek gerekiyor…yanlış sokete bağlarsak yanıt vermeyecektir.
Bazı panellerde, eğer şanslıysanız, soketler INPUT ve OUTPUT olarak etiketlenmiştir (bazen IN ve OUT veya benzeri), dolayısıyla hangisinin giriş soketi olduğu açıktır.
GİRİŞ etiketlenmemişse, yatay yönü gösteren bir veya daha fazla ok arayın (yukarı veya aşağı dikey okları dikkate almayın). Yatay oklar, verilerin GİRİŞ’ten ÇIKIŞ’a hareket yönünü gösterir; böylece hangi konektörün hangisi olduğunu bilirsiniz.
Böyle bir etiket yoksa son seçenek, konektör pimlerinin etrafındaki plastik örtüyü incelemektir. INPUT konnektöründeki anahtar (çentik) panelin dış kenarına (ortaya değil) bakacaktır.
32×16’lık bir panel bu pin düzenlemesini kullanır. Etiketler biraz farklı olabilir veya pinler hiç etiketlenmemiş olabilir. Ancak her iki durumda da referans olarak bu görseli kullanın. Dört toprak bağlantısı olduğuna dikkat edin. Güvenilir performans sağlamak için dördünün de Arduino’daki GND’ye bağlanması gerekir!
Bu 32×32 ve 64×32 panellerin pin düzenidir. Ama bu bununda varyantları bulunmaktadır. Düzen 32×16 panele çok benzer, “D” pini bir toprak bağlantısının yerini alır.
Not : Bu, en sık kullanılan düzendir. Hiç pin etiketi olmayan 32×32 paneliniz varsa bu düzeni kullanın.
Arduino İle RGB P10 Led Panel Bağlantısı
Bu paneller normalde 16 MHz Arduino tarafından değil, çok hızlı işlemciler veya FPGA’ler tarafından çalıştırılır. Bu sınırlı ortamda makul bir performans elde etmek için kütüphanemiz, belirli sinyallerin belirli Arduino pinlerine bağlanmasıyla optimize edilmiştir. Birkaç kontrol hattı yeniden yapılandırılabilir, ancak diğerleri çok spesifiktir. Her şeyi ister istemez bağlayamazsınız.
Bağlantılarımızı yukarıdaki tabloya göre yapalım.
RGB P10 Led Panel Kodu
RGB P10 led panelleri sürebilmemiz için 3 kütüphaneye ihtiyacımız var. Aşağıdaki linklere tıklayarak indirebilirsiniz. Ama aşağıda bulunan RGB Matrix Panel kütüphanesi adafruitin orjinal kütüphanesidir. Bu kütüphane belirli panelleri çalıştırmaktadır. Çin malı olan panelleri çalıştırmamaktadır. Bu yüzden eğer daha önce çok deneyipte p10 paneli çalıştıramadıysanız bu yüzdendir. Bu kütüphanenin modifiye edilerek çin malı tabelalarda çalışması için yazılan kütüphaneyi de sizle paylaşacağım.
- Adafruit RGB Matrix Panel(Orjinal)
- RGB Matrix Panel(Düzenlenmiş)
- Adafruit GFX Library
- Adafruit BusIO
ilk olarak örnek kodlardan şunu seçelim.
- Dosya→Örnekler→RGBmatrixPanel→testcolors_16x32 (16×32 panel için)
Örnek kodumuzu açtıktan sonra 1 noktaya dikkat etmeliyiz. Düzenleme yapılmış kütüphaneyi kullandığımız için kodda bir kısmı değiştirmeliyiz. Kodumuzda aşağıdaki kod satırını bulalım.
RGBmatrixPanel matrix(A, B, C, CLK, LAT, OE, false);
Bulduğumuz kod satırını aşağıdaki gibi değiştirelim.
RGBmatrixPanel matrix(A, B, C, CLK, LAT, OE, false,1);
Sonuna eklemiş olduğumuz 1,tabelada kaç adet panel olduğunu belirtir.
Eğer kodumuzu düzenleyip yüklemesini yaptıysanız aşağıdaki görüntüyü almanız gerekiyor.
Şimdi de kayar yazı örnek kodumuzu deneyelim. Ama ben arduino mega ile bağlantılarımı yaptım ve 2 adet panel kullandım.
- Dosya→Örnekler→RGBmatrixPanel→scrolltext_16x32
Örnek kodumuzu açalım ve değişikliklerimizi yapalım.
#define CLK 50
#define OE 51
#define LAT A3
#define A A0
#define B A1
#define C A2
Ben mega kullanıdığım için ilk olarak pinleri bu şekilde ayarlıyorum.
RGBmatrixPanel matrix(A, B, C, CLK, LAT, OE, true);
Kısmını aşağıdaki gibi ayarlıyorum.
RGBmatrixPanel matrix(A, B, C, CLK, LAT, OE, false,2);
Son olarak aşağıdaki kodu kendimce düzenliyorum.
const char str[] PROGMEM = "Adafruit 16x32 RGB LED Matrix";
const char str[] PROGMEM = "Arduino Destek ;)";
Kodumuzu yüklediğim zaman çıkan görüntü aşağıdaki video oldu.
Şimdi de panellerimize renkli bir yazı yazdıralım.
#include <RGBmatrixPanel.h>
#define CLK 50
#define OE 51
#define LAT A3
#define A A0
#define B A1
#define C A2
RGBmatrixPanel matrix(A, B, C, CLK, LAT, OE, false, 2); // pinleri kütüphaneye giriliyor. false arduino uno ve mega da false olmalı. 2 ise kullanılan panel sayısı.
void setup() {
matrix.begin(); // panel başlatılıyor
matrix.setTextWrap(false); //true
}
void loop() {
matrix.setCursor(0,0); // yazı başlangıç imlesi koyuluyor (x,y) yani (genişlik,yüseklik) tek panelde (32,16) çift panelde (64,16)
matrix.setTextSize(1); // yazı boyutu belirleniyor
matrix.setTextColor(matrix.Color333(0,7,0)); // yazı rengi belirleniyor.yeşil
matrix.print("Ar"); //yazı yazılıyor
matrix.setCursor(11,0); // yazı başlangıç imlesi koyuluyor (x,y) yani (genişlik,yüseklik) tek panelde (32,16) çift panelde (64,16)
matrix.setTextSize(1); // yazı boyutu belirleniyor
matrix.setTextColor(matrix.Color333(7,0,0)); //kırmızı
matrix.print("du"); //yazı yazılıyor
matrix.setCursor(21,0); // yazı başlangıç imlesi koyuluyor (x,y) yani (genişlik,yüseklik) tek panelde (32,16) çift panelde (64,16)
matrix.setTextSize(1); // yazı boyutu belirleniyor
matrix.setTextColor(matrix.Color333(7,4,0)); // sarı
matrix.print("ino"); //yazı yazılıyor
matrix.setCursor(10,9); // yazı başlangıç imlesi koyuluyor (x,y) yani (genişlik,yüseklik) tek panelde (32,16) çift panelde (64,16)
matrix.setTextSize(1); // yazı boyutu belirleniyor
matrix.setTextColor(matrix.Color333(1,1,1)); //beyaz
matrix.print("Des"); //yazı yazılıyor
matrix.setCursor(26,9); // yazı başlangıç imlesi koyuluyor (x,y) yani (genişlik,yüseklik) tek panelde (32,16) çift panelde (64,16)
matrix.setTextSize(1); // yazı boyutu belirleniyor
matrix.setTextColor(matrix.Color888(237, 144, 5,true)); // rgb turuncu
matrix.print("tek"); //yazı yazılıyor
matrix.setCursor(41,9); // yazı başlangıç imlesi koyuluyor (x,y) yani (genişlik,yüseklik) tek panelde (32,16) çift panelde (64,16)
matrix.setTextSize(1); // yazı boyutu belirleniyor
matrix.setTextColor(matrix.Color888(102, 0, 153,true)); // rgb mor
matrix.print(" :)"); //yazı yazılıyor
delay(4000);
matrix.fillScreen(0); // ekranı silme fonksiyonu
}
Kodumuzu yüklediğimiz zaman çıkan görüntü şu şekildedir.