Markette, kasapta, berberde ve daha birçok dükkanlarda genellikle kullanılan LED displayler P10 olarak adlandırılıyor. Bunlar değişik renklerde imal edilmiş yatayda 32, düşeyde 16 olan üzere toplam 512 adet LED ile oluşturulmuş matrisler. Kullanılmaları kolay, yan yana ve aşağı yukarı çoğaltılabilen, suya dayanıklı, ve göreceli ucuz fiyatlarıyla sıkça kullanılıyor. Kendilerine ait kontrol devreleri ile

Kendilerine ait kontrol devreleri ile kontrol ediliyorlar. Gelişmiş kontrol devrelerinde (fiyatları da o derece gelişmiş) kablosuz bağlantı ile yazılar/şekiller kontrol edilebiliyor. Bu arkadaşlar yan yana ve altlı üstlü olarak da bağlanıp daha büyük bir reklam panosunun bir parçası olarak da kullanılabiliyor.
Her zaman ilgimi çeken bu displeylere çöpte karşılaşınca çok şaşırdım. Büyük bir reklam panosundan sökülen belki 15 tane kırık dökük paneli çöpe atmışlardı. Taşıyabileceğim kadarını aldım, en azından inceler, üzerindeki LED’leri kullanabilirim diye. Ne de olsa her birinin üzerinde 512 adet LED var. Sonra bunları eve getirip olabildiğince temizlerdim, sökmeye çalıştım. Sökerken bazılarını kırdım, temizleme esnasında da evi berbat ettim. Çünkü su almasın diye kartların üzeri zift gibi bir malzeme ile kaplıydı. Daha sonra kartları, çalışıp çalışmadıklarını ve nasıl kontrol edildiklerini araştırdım. Bu yazıda olabildiğince kıs keserek anlatmaya çalışacağım.

Kartın arka tarafında bulunan ok işaretleriyle kartın bağlantı yönü belirtilmiş. Girişte 16 pin bir bağlantı kablosu (A) ile kontrol devresine bağlantı yapılıyor. Çıkışta bulunan aynı bağlantı noktası ise(F) bir sonraki panelin girişine bağlanıyor. Bu girişin nasıl bağlanacağına daha sonra bakacağız. Giriş HUB’ının hemen yanında 74HC245 entegresi (B) bulunuyor. Bu, verilerin karta dağıtımda görevli veri hattı dağıtım arayüzü olarak düşünülebilir. Daha sonra kart üzerinde bir 74HC04 inverter (C) entegresi bulunmakta. Onun yanındaki de(D) 74HC138 veri çoklayıcı. Üç girişi sekiz çıkışa dönüştürüyor. Bunu daha önce incelediğimizi hatırlıyorum. Kartın üzerinde besleme girişi olarak +5V bağlantısının hemen altında ve üstünde bulunan 4 adet (E) APM4953 MOSFET‘leri bulunuyor. 512 tane LED’in beslemesinin kontrol kartı üzerinden olması zor olacağından fazladan bir kaynak ve bunları kontrol eden, her biri iki P-kanal MOSFET içeren APM4592’ler kullanılmış. Orada bulunan kapasitör ise besleme gerilimi filtreleme görevine sahip. Yukarıdaki resimde işaretlenmemiş olan 16 entegre ise 74HC595. Kendisini de daha önce incelediğimiz shift register.
Kartın üzerinde gördüğünüz kablolar da benim tamiratlarım. Kartın kırık yerlerinde kısa devre kabloları. Bunu yapabilmek için şu bilgiler önemliydi. Aynı satır üzerinde bulunan 32 LED’in anotları birbirine bağlı. Katotlar ise düşeyde dörderli gruplar halinde 74HC595’in çıkış bacaklarına bağlı. Yani bu kart üzerindeki yazı/karakter her ne varsa kontrolü bu shift register tarafından kontrol ediliyor. Yani yukarıdaki resimde gördüğünüz, atlatma kabloları-kısa devreler bu devreleri tamamlıyor.
Şimdi bu kartın Arduino ile nasıl kullanılacağına bakalım. Bunun için sağolsunlar DMD ve DMD-2 diye iki tane açık kaynak kütüphane var. Bunları google üzerine “DMD Library” olarak yazdığımızda Github ya da Arduino sayfasında bulup zip halini indirip Arduino IDE üzerine eklemek gerekiyor. Ben DMD-Master isimli kütüphaneyi indirdim. Bu kütüphanenin düzgün çalışması için Bu kart üzerindeki bağlantıların Arduino üzerine illaki bu arkadaşların istediği gibi yapmak lazım.

Bu bağlantıları yaptıktan sonra bir önceki çalışmamıza göre DS1307 saat modülümüzü de Arduinoya bağlayarak programımızı yazabiliriz.

Evet bağlantılar yukarıdaki şemadaki kadar kolay. RTC 1307 Modülünü da zaten bu şekilde bağlamıştık. Yeni bağlantılar sadece solda açıklamasını gördüğünüz dijital bacaklar. Devreyi Arduino Nano ile yaptığımda (Zaten Arduino’nun sayfasında “bu kütüphane Nano ve üst modellerde çalışır” diyor) tek kart için ayrıca +5 volt ile beslemesem dahi LED’ler sönük de olsa yanıyor. Ama risk etmemek gerekli, çünkü LED’ler yandığında +5 volt ile 1 amper civarı akım çekiliyor. Ufak da olsa bir adaptör kullanmanızı öneririm.
Devremizin bağlantılarını yapıp ilgili kütüphaneleri de yükledikten sonra gelelim kodlamaya. Bunun için önce bağlantıları net bir şekilde anlatan http://basicarduinotutorial.blogspot.com/2017/08/project-i-19-digital-clock-using-led.html. sayfasını incelemenizi öneririm. Ama asıl benim yaptığım saat projesinin adresi :https://www.youtube.com/watch?v=-WQuz01Ml80&ab_channel=UtehStr. Bu arkadaşın sitesi yabancı olmasına rağmen konuşma yok, her şey açıkça anlatılmış. Kod için arkadaş bir wordpad sayfasına kodları eklemiş. Hatta değişik görünümlü 4 örnek var. Ben 3 numaralı örneği seçtim, ve yükledim. Siz de yukarıdaki linkten indirebilirsiniz. 3.örnek dediğim Normal zamanlarda büyük punto (Font_6x14) saat gösterimi varken, her dakikanın 11.saniyesinde, ilk satır daha küçük punto (SystemFont5x7) saati gösterirken, alt satırdan; gün, ay, yıl bilgileri yine aynı fontta kayarak geçiyor. Kodun başında pasif olarak bulunan ama ihtiyaç halinde aktifleştirerek zamanı bilgisayardan RTC modüle yükleme kodları da var. Ayrıca herhangi bir bağlantı sorununa karşı hata ayıklamak için seri ekranda “RTC bulunamadı”, “RTC çalışmıyor”, ” RTC çalışıyor” gibi uyarılar da bulunuyor.
Burada en büyük sıkıntı koddaki “Font_6x14.h” fontunun kütüphanede yer almaması. Programı çalıştırdığımız zaman hata veriyor. Onun çözümü DMD-2 kütüphanesini de indirmek ve zip klasörü açmak. Orada bulunan “Arial14.h” kütüphanesini kopyalayıp DMD-Master klasörünün içine atmak. Peki bunları nerede yapacağız derseniz, Bende kütüphaneler: ‘Belgeler>Arduino>Libraries’ adresinde. Bu klasördeki DMD-2 klasöründen “Arial14.h” dosyasını kopyalayıp DMD-Master klasörüne atıyoruz. Daha sonra programda :
include "Font_6x14.h
” //-> This font only contains numbers from 0-9 satırı silinip, yerine;
include “Arial14.h” eklenmeli.
Benim yaptığım değişiklikler; Öncelikle gün ve ay isimlerini Türkçeye çevirdim (Türkçe karakter kullanmadan).
char nameoftheday[7][12] = {"Pazar", "Pazartesi", "Sali", "Carsamba", "Persembe", "Cuma", "Cumartesi"};
char month_name[12][12] = {"Ocak","Subat", "Mart", "Nisan", "Mayis", "Haziran", "Temmuz", "Agustos", "Eylul", "Ekim", "Kasim", "Aralik"};
Sonra elektriğe %120 oranında zam geldiği için saati belli zaman dilimlerinde gösterecek şekilde ayarladım, örneğin her 30 saniyede bir. (zaten yaklaşık 14 saniye ekranda saat kalıyor)
if (_second==02 ||_second==32 || _second==42 ) { //-> Saati; 02. ve 32. saniyede gösterir.
scrolling_time();}
Sonra kayan yazı şeklindeki ekranın her 5 dakikada bir çalıştırdım.
if (_minute==05 ||_minute==10||_minute==15 ||_minute==20 ||_minute==25 ||_minute==30||_minute==35 ||_minute==40 ||_minute==45 ||_minute==50||_minute==55 ||_minute==00) { //-> Tarih her 5 dakikada 1 saniye şeklinde gösterilir
scrolling_date();}
En sona da her 20 saniye aralığında sistemin çalıştığını görmek için kart üzerinde bir noktayı 1 saniye aralıklarla yanıp söndürmeye çalıştım.
//===================================Boşta yanıp sönen sağ alt köşe "."
dmd.selectFont(SystemFont5x7);
if (_second %2 == 0) {
dmd.drawString(30, 10, ".", 1, GRAPHICS_OR);
}
else {
dmd.drawString(30, 10, ".", 1, GRAPHICS_NOR);
}
Dediğim gibi Türkçeye dönüştürmek dışında yaptığım tüm değişiklikler enerji tasarrufu sağlamak içindir.
Ayrıca saatin ekranda görüntülenme süresini ayarlamak için uğraşmadım, kayan yazı için gerekli süreyi hesaplayan kodu (millisler) aynen kopyalayıp yapıştırdım.
Bir de saatin 12-24 seçimi için de yazılmış kodlar ve, ben 24 saat kullanmama rağmen onlara dokunmadım. İsteyen kullanabilir.
Displey üzerine yazdırmak için kullanılan komuttan bahsetmek istiyorum:
dmd.drawString(2, 0, hr_24, 2, GRAPHICS_NORMAL);
dmd zaten bizim oluşturduğumuz nesnenin ismi ve LCD ekrandaki gibi yazdırma komutunun başına ekleniyor. Parantez içindeki GRAPHICS_NORMAL
in önündeki parametreler sırasıyla ;yatay konum, düşey konum, yazdırılacak değişken/karakter, kaç basamaklık veri şeklinde. Bu arada yukarıdaki örneklerden; GRAPHICS_NORMAL
in normal gösterim, GRAPHICS_OR
ve GRAPHICS_NOR
‘un da yanıp sönme için kullanıldığını fark etmişsinizdir. Bu parametreler ile ekranda yazdıklarınızın nasıl değiştiğini de test edebilirsiniz.
Yaptığım değişiklikleri anlatmamın nedeni isteyen bunları kurcalayarak kendi devresini kurabilsin. Örneğin kutulama sırasında bir LM35 ile ortam sıcaklığı da display üzerinde gösterilebilir. Koda ve diğer bilgilere aşağıdaki linklerden ulaşabilirsiniz. Bir sonraki projede görüşmek üzere hoşça kalın, sağlıkla kalın.
Linkler:
Kod ve Devre (Fritzing) şeması
Orijinal Bağlantıların ve display kullanımının olduğu blog
Bu proje için kullandığım, orijinal kodların olduğu site: Uteh Str