Herkese merhabalar! Bu yazıda günlük hayatta da sıkça karşılaştığımız dot matrixleri yakından tanıyacağız. Dot matrix çalışma mantığını öğreneceğiz ve bu eğlenceli araçları Arduino ile nasıl kullanabileceğimizi göreceğiz.

Önceki yazımızda NTC sensörü ile sıcaklık ölçmüştük >> Arduino ve NTC Sensörü İle Sıcaklık Ölçümü | LED’le Uyarı

Dot Matrix Nedir?

Led (dot) matrixler çok sayıda ledin matris düzeninde yan yana ve alt alta dizilerek konumlandığı ekranlardır. Dükkanlar, iş yerleri, metro durakları gibi günlük hayatta sıkça bulunduğumuz mekanlardaki tabelalarda kullanılan dot matrixlerden elektronik projelerinde de çokça faydalanıyoruz. Bu araçları kullanarak kimi zaman bir yazıyı kimi zaman bir sembolü görüntüleyebiliyoruz. Gelin bu displaylerin iç yapısına ve çalışma mantıklarına bir göz atalım.

Metro istasyonlarında led matrixlere sıkça rastlarız.

Bir led matrixin iç yapısı satırlar ve sütunlar boyunca dizili ledlerden meydana gelir. Ledlerin dizilişini koordinat sistemine de benzetebiliriz. Led matrixler x ve y koordinatları boyunca kaçar led bulunduğuna bağlı olarak isimlendirilir. En popüler led matrix olan 8×8 dot matrix toplam 64 ledden oluşur. Hobi elektroniğinde 8×8 matrixlerin yanı sıra 5×7, 4×4 gibi farklı led sayılarına sahip matrixlerle de karşılaşmak mümkün; aynı zamanda RGB ledlerden oluşan dot matrixler de piyasada bulunmaktadır. Led matrixleri ledlerin bağlanış şekline göre ortak anot ve ortak katot olarak ikiye ayırıyoruz. Aşağıda sütunlardaki bağlanış şekline göre adlandırılmış iki displayin iç yapısını görebilirsiniz.

Dot Matrix Nasıl Çalışır? Çoklama(multiplexing) nedir?

Dot matrix çalışma şekli çoğu yönden 7-segment displayler ile ortak özelliklere sahiptir. 7 segment displaylerde göstermek istediğimiz rakamı oluşturmak için display üzerindeki belli ledleri yakmamız gerekir. Dot matrix için de buna benzer bir durum var. Matrix üzerindeki ledleri belli bir düzende yakarak istediğimiz karakteri oluşturmuş oluyoruz.

Bir örnek üzerinden ilerlemeye çalışalım. Aşağıdaki resimde verilmiş olan temsili dot matrixin sütunları ortak anot olan bir matrix olduğunu varsayalım. Kırmızı boyalı ledi yani (D,6) ledini yakmak için 6. sütuna pozitif voltaj vermeli, toprağı da 4. satıra yani D satırına bağlamalıyız. Bu bağlantıları yaptıktan sonra akım yalnızca (D,6) ledinden geçerek devreyi tamamlayacaktır. Bu manuel olarak da basitçe gerçekleştirebileceğimiz bir işlem, +’yı farklı bir sütuna -‘yi farklı bir satıra bağlayarak 64 ledden istediğimizi yakabiliriz. Oldukça basit değil mi?

Bir sonraki aşamada led matrix üzerindeki 2 ledi aktif hale getirmeyi hedefleyelim. (D,6)‘nın yanında (F,3) ledini de yakmaya çalışalım. Elde edeceğimiz görüntü aşağıdaki gibi olmalı.

(F,3) konumundaki ledi yakabilmek için 3. sütundan pozitif voltaj vermeli, F satırına da güç kaynağımızın – tarafını bağlamalıyız. Bu sayede ilk aşamada yaptığımız gibi 2. ledi de yakmış oluruz.

Bu işlemleri tamamladıktan sonra led matrix üzerindeki (F,3) ve (D,6) ledlerinin yandığını görürüz, bu güzel haber. Kötü haber ise görseldeki gibi bir görüntüyü elde edememiş olmamız. Bağlantılardan sonra (D,3) ve (F,6) ledlerinin de yandığını görürüz, çünkü akım bu ledler üzerinden de geçecektir. Sonuçta görüntü aşağıdaki şema gibi olacaktır.

Peki hal böyleyken istediğimiz görüntüyü, karakteri veya sembolü bu displayler üzerinde nasıl gösterebiliriz? Örneğin bir kalp şeklini nasıl görüntüleyebiliriz? Dot matrixler üzerinden istediğimiz şekli aktarmamızı sağlayan şey aslında insan gözünün zafiyetinden başka bir şey değildir.

Hedefimiz (F,3) ve (D,6)‘yı aynı anda yakmaktı. Matris düzenindeki ledler için bunu yapmak teknik olarak mümkün değil; fakat böyle görmeyi sağlamak için çoklama (multiplexing) adında bir yöntem kullanılıyor. Bunun için (F,3) ve (D,6) ledlerinin sırasıyla yanmasını sağlayacağız ama bu işlemi o kadar hızlı gerçekleştireceğiz ki gözümüz bu iki led aynı anda yanıyormuş gibi algılayacak. İki led hiçbir zaman aynı anda yanmayacak fakat insan gözü belli bir frekansın üstünü algılayamadığından biz bunu fark edemeyeceğiz.

Aşağıdaki 4×4 led matrix için de aynı durum söz konusu, 2. şekli elde edebilmek için 1. satırdan itibaren ledler sırasıyla yanıyor. Bu işlemin çok hızlı bir biçimde gerçekleştiğini hayal edin. Sonuç olarak bizim göreceğimiz şekil sağdaki gibi olacaktır. Bu metot farklı komponentler için de kullanılabiliyor.

Çoklama (multiplexing) işlemi

Dot Matrix Arduino ile Kullanımı

Dot matrixler çok bacaklı elemanlardır, 8×8 bir dot matrix üzerinde 16 bacak bulunur. Hal böyle olunca yardımcı bir entegre olmadan bir işlemci ile beraber kullanılması fazla sayıda çıkışın işgal olmasına sebep olacaktır. Hatta bu dot matrixlerin ard arda bağlanabildiğini de düşünecek olursak kullanım çok daha karışık bir hal alacaktır. Bu yüzden dot matrixleri kullanırken yardımcı entegreler imdadımıza yetişiyor. Entegre seçimi yaparken çokça alternatifle karşılaşabilirsiniz. Biz bu iş için en çok tercih edilen entegre olan MAX7219 entegresini kullanmayı tercih edeceğiz ve kodumuzu da buna göre yazacağız. Dot matrixler bu entegre ile beraber board olarak alınabileceği gibi ayrı ayrı alınarak da kullanılabilir. Tercih edilen bir diğer entegre de 74HC595 shift register entegresi.

74HC595 hakkında daha fazla bilgi için yazımıza göz atabilirsiniz >> Arduino Dersleri 3: 74HC595 Shift Register Kullanımı

MAX7219 entegresinden farklı bir entegre kullanmanız durumunda kodda ve bağlantılarda düzenleme yapmanız gerekiyor. Bu çalışmada Arduino Uno ve Dot Matrix Board kullanacağız.
8×8 dot matrix satın almak isterseniz, hemen tıklayın!

Bağlantı Şeması

Proje Kodu

Proje kodumuzda MAX7219 ve MAX7221 entegreli led matrixlerde kullanılan LedControl kütüphanesinden faydalanacağız. Kütüphaneyi buraya tıklayarak indirebilirsiniz.

Kendi şekillerinizi uygulamak için buraya tıklayarak ulaşabileceğiniz editörden yararlanabilirsiniz. İstediğiniz şekli çizdikten sonra sağ üstteki as byte array tikini seçerek şeklinizin binary karşılığını alabilirsiniz. Ardından kodda ifadeleri tanımladığımız kısma ekleyebilir, dilediğiniz şeklin çıktısını alabilirsiniz.

//maker.robotistan.com 
#include <LedControl.h> //Kütüphanemizi dahil edelim

//Pin numaralarını tanımlıyoruz
#define CLK 5
#define CS 6
#define DIN 7
#define MaxSayisi 1 //Bağlı olan dot matrix sayısı

const long delay_suresi = 750; //Kodda kullanacağımız delay süresi

LedControl led = LedControl(DIN, CLK, CS, MaxSayisi);

//Kullanacağımız ifadeler için byte tipinde bir dizi tanımlıyoruz
byte images[][8] =
{{
0, //kalp
B01100110,
B11111111,
B11111111,
B01111110,
B00111100,
B00011000
},
{
B00111100, //uzgun ifade
B01000010,
B10100101,
B10000001,
B10011001,
B10100101,
B01000010,
B00111100
},
{
B00111100, //normal ifade
B01000010,
B10100101,
B10000001,
B10111101,
B10000001,
B01000010,
B00111100
},
{
B00111100, //gulen ifade
B01000010,
B10100101,
B10000001,
B10100101,
B10011001,
B01000010,
B00111100
}
};
void MatrixeYazdir(byte* ch)
{
for (int i = 0; i < 8; i++)
{
led.setRow(0, i, ch[i]);
}
}
void setup()
{
led.setIntensity(0, 10); //Parlaklık ayarı
led.shutdown(0, false); //Led matrixi aktif hale getirme
led.clearDisplay(0);
}
void loop()
{
for (int j = 0; j < 4; j++) //Tüm şekilleri yazdırma
{
MatrixeYazdir(images[j]);
delay(delay_suresi);
}
for (int i = 0; i < 15; i++) //Azdan çoğa parlaklık
{
led.setIntensity(0, i);
delay(100);
}
}
Proje çıktısı

Arduino kullanımıyla beraber bir yazının daha sonuna geldik. Yorumlarınızı ve sorularınızı paylaşmaktan çekinmeyin. Bir sonraki projede görüşmek dileğiyle, hoşça kalın! 🙂

2 Yorumlar

CEVAP VER

Please enter your comment!
Please enter your name here