Arduino Karaşimşek Uygulaması | Ders 4: Yürüyen Işık
Arduino derslerimizin dördüncü bölümünde sizlerle güzel bir led uygulaması gerçekleştireceğiz. Arduino karaşimşek adını da verdiğimiz yürüyen ışık olarak da adlandırılan 8 adet ledin sırasıyla yanıp, sırasıyla söndüğü uygulamamızda gerekli malzemeleri hemen sıralayalım.
Öncelikle şunu belirtelim. Normalde 8 ledi yakmak için gerekli olan arduino pin sayısı 8 ‘dir. Ancak bu uygulamamızda biz sadece 3 dijital çıkış kullanarak bu işi başaracağız. Ayrıca kodlama anlamında da oldukça tasarruf sağlayacağız. Bu nedenle bize böyle bir imkanı sağlayan 74HC595 entegresini gelin birlikte tanıyalım.
Arduino Karaşimşek ve 74HC595 Shift Register Entegresi
74HC595 shift register entegresini size şöyle somutlaştıralım. Arduino Uno kartımızdan 3 şeritli bir yolu 8 şeritli bir yola çevirip, bu yolların her birinde işlem yapmak mı istiyorsunuz. İşte bu entegre bu devremizde tam da bunu gerçekleştiriyor. Yani seri girişi paralel çıkışa çeviriyor. (SIPO – Serial IN Parallel Out)
Bu sayede aslında biz arduinu uno kartımızın çıkış seri portlarının 8 ini kullanmaktansa, sadece 3 adetini kullanarak, projemizdeki diğer sensör vb. materyaller için yer ayırmış oluyoruz. Peki bu entegreyi arduino unomuza nasıl bağlayacağız? Aşağıdaki resim 1′ de entegremizin ayak bağlantıları verilmiştir. Buradan arduino uno’ ya 3 bağlantı yapacağız.
Bu bacaklardan biri 11. Ayak olan SHcp, diğeri latch olarak adlandırdığımız 12.ayak olan STcp, üçüncüsü de DS olarak gösterilen seri veri girişlerini sağlayan ayaklardır. Bunlar sırasıyla arduinoda ilgili dijital çıkış pinlerine bağlanır ve kodlamada bu pinlerin bağlantısı mutlaka belirtilir. 15-1-2-3-4-5-6-7 numaralı ayaklarda Q0 – Q7 ye kadar olan 8 çıkışda aslında paralel çıkışlardır. Yani seri girişten gönderilen datalar, 8bitlik bir şekilde paralel bu çıkışlardan gönderilirler.
Şimdi devremizi kuralım. Şemada dikkat etmeniz gereken arduino uno kartımıza giden 4-5-6 pine giriş yapan uçlar. Burada belirlediğimiz pin numaralarını unutmuyoruz çünkü kod içerisinde bu belirlenen pin numaralarını girmemiz gerekecek.
Arduino Karaşimşek Kod Yapısı
Şimdi sıra geldi kodlarımıza. Arduino IDE ortamını açıyoruz ve aşağıdaki kodları yeni bir proje için kaydediyoruz. Dikkat ediyorsanız dataPin 4 olarak, clockPin 6 ve latchPin ise 5 olarak tanımlanmış. Devrede bu uçlar 74hc595 entegresinin ilgili ayakların bağlantısı yapılmış olmalıdır.
/* Adafruit Arduino derslerinden alıntı yapılmıştır. */ int latchPin = 5; int clockPin = 6; int dataPin = 4; byte leds = 0; void setup() { pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); } void loop() { leds = 0; updateShiftRegister(); delay(500); for (int i = 0; i < 8; i++) { bitSet(leds, i); updateShiftRegister(); delay(500); } } void updateShiftRegister() { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, leds); digitalWrite(latchPin, HIGH); }
Dikkat ederseniz sonrasında byte türünde bir leds isimli değişken tanımlamışız. Bu aslında 8 bit hafızası olan bir değişken. Biz 8 ledi bu değişkene yükleyeceğimiz bilgiler sayesinde yakıp söndüreceğiz. updateShiftRegister aklı fonksiyona dikkat ederseniz aslında entegremizin çalışması için gerekli adımları içeriyor. loop içerisinde birisi for döngüsünün içerisinde olmak üzere tam 2 kez updateShiftRegister fonksiyonunu çağırıyoruz. Aslında program for döngüsü ile 00000000 olan bilgiyi 00000001-00000011…11111111 şeklinde düzenleyip ledlerimizin sırasıyla yanmasını sağlıyor. İsterseniz sizler bu kodlar içerisinde değişiklikler yapıp farklı farklı şekilde ledlerin yanmasını sağlayabilirsiniz.
Aşağıdaki kodu ben sadece örnek olması adına düzenledim. Bir for döngüsü olmadan, ledleri sırasıyla hızlıdan yavaşa ledlerin yanmasını sağladım. Buna benzer daha birçok uygulamayı yapmanız mümkündür.
int latchPin = 5; int clockPin = 6; int dataPin = 4; byte leds = 0; void setup() { pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); } void loop() { leds=B00000001; updateShiftRegister(); delay(50); leds=B00000011; updateShiftRegister(); delay(100); leds=B00000111; updateShiftRegister(); delay(200); leds=B00001111; updateShiftRegister(); delay(400); leds=B00011111; updateShiftRegister(); delay(800); leds=B00111111; updateShiftRegister(); delay(1600); leds=B01111111; updateShiftRegister(); delay(3200); leds=B11111111; updateShiftRegister(); delay(6400); } void updateShiftRegister() { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, leds); digitalWrite(latchPin, HIGH); }
Yukarıdaki örneklerle birlikte sizlere 74HC595 shift register uygulaması ve arduino uno kartımızı kullanarak 8 adet ledi en ekonomik pin sayısı kullanarak nasıl yakmamız gerektiğini anlatmaya çalıştık. Sonraki yazılarımızda tekrar görüşmek üzere.
Not: Arduino Karaşimşek Uygulaması | Ders 4: Yürüyen Işık isimli makale içerisindeki anlatımlar özgün içeriktir. Alıntı yapmadan kullanı[email protected]