Bu çalışmamızda arduino ile LCD (Liquid Qrystal Display) kullanımını göreceğiz. Daha önce arduino ile LED yaktık, seri iletişimle birşeyler yazdırdık ve 7-segment display kullanımını görmüştük.
Kullanacağımız LCD en çok kullanılan model olan 1602. Bu display’ de 16 sütün ve 2 satır var. Adını da oradan alıyor. Yani her satıra 16 karakter olma üzere iki satıra toplam 32 karakter girilebiliyor. Bir de 2004 modeli var. Kaç sütun, kaç satır siz tahmin edin!
Her bir karakter 5×7 dots yani yatayda 5, düşeyde 7 noktadan oluşuyor. bu noktalarla harfler ve rakamlar ile birlikte özel karakterler (/ * + – ? ..gibi) de oluşturulabiliyor.
Üzerinde 16 bağlantı pini bulunmakta.
- VSS: GND bağlantısı
- VDD: +5 volt bağlantısı
- V0: Display kontrast pini. Bu pin genellikle bir potansiyometreye bağlanarak kontrast ayarı yapılır. Potansiyometrenin orta bacağı V0, diğer iki ucundan biri GND diğeri +5 volt hattına bağlanır.
- RS: (Register Select) Bu pin ile LCD’ye bir komut ya da veri yollandığı belirlenir. Bu pin 0(GND) ise komut yollanır; örneğin “kürsörü ikinci satıra getir”ya da “displayi temizle” gibi. Bu pin 1(+5 V) ise biz LCD’ye yazı gönderiyoruz anlamına gelir.
- R/W: (Read/Write) LCD’ye yazma okuma pini. Yazmak zaten bizim yolladığımız komut ya da veriyi işlemesi demek. Okuması ise program esnasında ekranın kendi üzerindeki veriyi okuyup ona göre işlem yapması anlamına geliyor. (Okuma kısmı şimdilik bizi ilgilendirmiyor)
- E: (Enable) Sonraki sekiz girişe (D0-D7) yazma işlemine izin verir.
- D0-D7: Giriş pinleri.
- A: Anot. Displayin arka plan aydınlatması, çalışması için +5 volta bağlanır.
- K: Katot. GND hattı.
Bu display 4-bit ya da 8-bit giriş ile kullanılabilir. 4-bit kullanımda diğer 4 giriş boş kalır (biz de 4-bit kullandık, D0-D3 boş uçlar olarak kaldı). Ayrıca bu tür çok bağlantılı kabloların kullanıldığı sistemlerde kablo kullanımını azaltmak için I2C (I kare C okunur) protokolü oluşturulmuştur. Birbirleriyle haberleşecek olan sistemler arasında kolay iletişimi sağlar. Bu protokolde toplam 4 kablo hattı vardır: Vcc, GND, Clock, Data. Anlayacağınız bir “saat” hattının kontrolünde sadece tek hat “data” üzerinden veri gönderimi yapılabilir. Bu display’in kullanımında da bir dönüştürücü ile I2C veri alış-verişi yapılabilir.(Şimdi değil!)
Nasıl çalışacağı ile ilgili kaygıya gerek yok. Burada öğreneceğimiz şeylerden biri de ilgili kütüphaneyi (Library) koda eklemek. Arduino’nun açık kod olduğundan bahsetmiştik. Kütüphaneler birilerinin yazdığı komut satırlarının toplamı demek. Biz tek bir satır ile bu kodları Arduino’ya yükleyebiliyoruz. LCD’nin kütüphanesi de Arduino Ide’de hazır var. Bunu yüklemek için Arduino Ide üzerinde; Taslak>Lİbrary ekle>LiquidCrystal tıklanıyor.
Arduino kod satırına:
#include <LiquidCrystal.h>
geliyor. İsterseniz bu komutu klavye ile de yazabilirsiniz. Bazı kütüphaneler Arduino Ide üzerinde yüklü olmayabilir. Daha sonra bu listeye yeni kütüphane nasıl eklenir bunu da göreceğiz.
Daha sonra bir liquid Cristal nesnesi oluşturuyoruz. Yani displayimizi isimlendiriyoruz. Örneğin ben “abc” isimli bir nesne oluşturuyorum.
LiquidCrystal abc ();
parantez içine yazılacak parametreler:
LiquidCrystal abc (RS pini,E pini, Data pinleri,);
Burada kastedilen bu pinlerin Arduino’nun hangi pinlerine bağlı olduğu. Yani devreyi kurarken kullanılan Arduino bağlantıları.
Daha sonra “setup” kısmında daha önce seri haberleşmeyi başlattığımız (Serial.begin();) gibi LCD iletişimini de başlatıyoruz.
abc.begin(16,2);
16 ve 2 ne anlama geliyor?…
Sonra “void loop” a gelip bir şeyler yazdırabiliriz.
abc.print (“Naaber?”);
gibi. Bunu yazdığımızda 1.satırın, 1.sütunundan itibaren “Naaber? yazısını görürüz. Burada nereden itibaren yazılmasını istiyorsak imleci oraya götürmek için de bir komutumuz var;
abc.setCursor(5,0);
parantez içindeki ilk değer sütun, ikincisi satır değerleri. Yalnız bunların sıfırdan başladığını unutmayın. Yani (5,0) birinci satırda 6.karakterden itibaren yazı yazılır. Deneme yanılma ile bunu geliştirebilirsiniz. Bu arada tırnak içerisinde yine Türkçe karakter kullanmıyoruz dikkat!
Yine LCD ile ilgili basit komutlardan;
abc.cursor(); imleç olduğu satırda görünür(alt tire olarak).
abc.noCursor(); imleç görünmez olur.
abc.blink(); imleç olduğu yerde yanıp söner(tüm noktalar yanar/alt tire olur).
abc.noBlink(); imleç yanıp sönme hareketi varsa durdurur.
abc.clear(); ekranda yazılanlar silinir.
Bunları örneğimizde inceleyelim. Önce devre şeması:
Bu arada LCD ekrana header’ları lehimlerken dikkat etmek gerekir. soğuk lehim ekranın çalışmasını engelleyebilir. Bunun için board kullanmanızı tavsiye ederim. Header’ları board’a takıp üzerine ekranı koyarak lehimlemek iyi bir yoldur.
Potansiyometre 1kΩ ve üzeri bir değerde olabilir. Ayrıca arka plan aydınlatması çok parlak oluyorsa, LCD ekranın 15 numaralı bacağını 5 volta 220Ω civarı bir direnç ile bağlayabilirsiniz.
Koda gelince:
#include <LiquidCrystal.h> //LCD kütüphanesini yüklüyoruz
LiquidCrystal abc(9, 8, 3, 4, 5, 6); // abc isimli LCD nesnesi oluşturuyoruz.
void setup()
{
abc.begin(16,2); //LCD kütüphanesini başlatıyoruz
}
void loop()
{
abc.clear(); // Ekran temizliği
delay (1000);
abc.setCursor(0,1); // İmleç 2.satır ilk sütuna gitti
abc.print(“Naaber!…”); // ve oradan itibaren yazıldı
delay (2000);
abc.clear();
abc.setCursor(10,0); // İmleç ilk satır 10.sütuna gitti
abc.cursor(); // ve orada alt çizgi olarak görünüyor
delay (2000);
abc.noCursor(); //İmleç artık görünmüyor
abc.setCursor(15,1); // İmleç ilk satır 10.sütunda…
abc.blink(); // ..yanıp sönüyor.
delay (2000);
abc.noBlink(); // yanıp sönme bitti
}