Arduino LCD Ekran ile Oyun Yapımı

Arduino LCD Ekran ile Oyun Yapımı

Bu içeriğimizde, Arduino kullanarak LCD ekran ile oyun yapıyoruz. Mikrodenetleyici programlamada teorik bilgileri pekiştirmenin ve algoritma yeteneklerini geliştirmenin en eğlenceli yollarından biri, kısıtlı donanım kaynaklarına sahip sistemlerde oyun motoru tasarlamaktır.

Bu projemizde, gömülü sistemlerde sıklıkla kullanılan Arduino ile 16×2 LCD Ekran kullanımı konusunu temel alarak, bir dönemin en popüler mobil oyunlarından biri olan Flappy Bird oyununun tarihçesine ve gelişim sürecine atıfta bulunan eğlenceli bir klon tasarlıyoruz.

Flappy Bird, Dong Nguyen tarafından geliştirilen ve iki boyutlu (2D) retro grafik yapısına sahip olmasına rağmen hem Android mobil işletim sistemleri hem de iOS platformlarında küresel bir çılgınlığa dönüşen, yana kaydırmalı (side-scroller) bir oyundur. Oyundaki temel amacımız, “Faby” isimli kuşu sürekli olarak dikeyde yönlendirerek, sağdan sola doğru gelen engellerin (boruların) arasına çarpmadan en yüksek skoru elde etmektir.

Geliştiricinin oyunu resmi uygulama mağazalarından kaldırmasının ardından, dünya genelinde yüzlerce farklı klon versiyonu geliştirilmiştir. Bu projemizde de biz, popüler oyun mekaniklerini kısıtlı kaynaklara sahip 8-bitlik bir gömülü platforma taşıyoruz.

Projemizi standart karakter tabanlı bir LCD ekran üzerinde başarıyla tamamladıktan sonra, bir sonraki aşamada grafiksel performansı artırmak adına I2C OLED ekran modülü entegrasyonuyla projenizi bir üst seviyeye taşıyabilirsiniz.

Bu proje, kısıtlı donanım kaynaklarına sahip bir ATmega328P (Arduino Uno) mikrodenetleyicisi üzerinde, nesne tabanlı fizik kurallarının ve grafiksel arayüz yönetiminin uygulanmasını amaçlamaktadır. Proje kapsamında, dikey hız vektörleri, basit fizik motoru mantığı ve çarpışma algılama (collision detection) algoritmaları kullanılarak oyun döngüsü kurgulanmıştır. Kullanıcı etkileşimi, dış kesmeler (external interrupts) yardımıyla minimum gecikme süresiyle sağlanmaktadır.

Arduino Flappy Bird Oyununun LCD Ekranda Oynanışı Temsili

Karakter tabanlı LCD ekranların piksel kontrol yeteneği sınırlı olduğundan, oyun karakterimizi “O” harfi, engelleri ise kareler halinde “#” karakterleri ile temsil edeceğiz. Sütunların dinamik kaydırılması ve rastgele yüksekliklerde engellerin oluşturulması oyun döngüsü içinde işlenir. Dış kesme butonuna basıldığında karakterimiz yerçekimine meydan okuyarak yukarı doğru sıçrar; aksi halde yerçekimi ivmesiyle aşağı doğru serbest düşüş gerçekleştirir.

Projeye başlamadan önce, buton algılama kararlılığını sağlamak için donanımsal kesmelerin (interrupts) çalışma mantığına hakim olmanız son derece önemlidir. Bu konuda detaylı bilgi edinmek için Arduino Donanımsal Kesmeler (Interrupts) ve Zamanlayıcılar (Timers) kılavuzumuzu inceleyebilirsiniz.

Arduino LCD Ekran ile Oyun Yapımı: Gerekli Malzemeler

  • Arduino UNO: Projenin kontrol merkezi.
  • 16×2 Karakter LCD Ekran: Oyun arayüzünü göstereceğimiz ekran.
  • Buton: Karakteri zıplatmak için kullanacağımız dış kesme anahtarı.
  • 10 kΩ Potansiyometre: LCD ekranın kontrast (keskinlik) ayarı için.
  • Breadboard ve Jumper Kablolar: Güvenli devre prototiplemesi için bağlantı elemanları.
  • 5V Güç Kaynağı: Arduino’yu veya devreyi harici olarak beslemek için (USB kablosu da yeterlidir).

Devre Şeması ve Bağlantı Rehberi

Arduino ve 16x2 LCD Ekranlı Flappy Bird Devre Şeması

Devre bağlantılarınızı kurarken aşağıdaki pini pinine eşleme tablosundan yararlanarak 16×2 LCD ekranı Arduino ile kolayca arayüz geliştirme ve temel çevre birimi bağlantıları standartlarına uygun olarak bağlayabilirsiniz:

  • LCD RS Pini: Arduino Dijital Pin 8
  • LCD Enable (E) Pini: Arduino Dijital Pin 7
  • LCD D4-D7 Veri Pinleri: Sırasıyla Arduino Dijital Pin 6, 5, 4 ve 3
  • LCD VSS ve LED Kutupları: GND hattına
  • LCD VDD ve LED+ Kutupları: 5V hattına
  • LCD VO (Kontrast): 10 kΩ potansiyometrenin orta bacağına (Potansiyometrenin diğer kenar bacakları 5V ve GND hatlarına bağlanır)
  • Zıplama Butonu: Bir ucu Arduino Dijital Pin 2’ye (Harici Kesme – INT0), diğer ucu GND hattına bağlanır (Kod içerisinde dahili pull-up direnci etkinleştirilecektir).

LCD Ekranlı Flappy Bird Arduino Kaynak Kodları

Aşağıdaki kaynak kod, standart paralel LCD bağlantısı kullanan devre şemasıyla uyumludur. Oyun döngüsü, buton kesmesi ve çarpışma algılama mantığı kod içinde yapılandırılmıştır:

Bonus: I2C LCD Ekran Kullananlar İçin Arduino Kodu

Eğer 16×2 LCD ekranınızı çok daha az kablo bağlantısı gerektiren yerleşik bir PCF8574 I2C dönüştürücü modülü ile kullanıyorsanız, I2C kütüphanesiyle uyumlu olarak hazırlanmış aşağıdaki kaynak kodu tercih edebilirsiniz:

Sistem Performansı ve Mühendislik Detayları

  • Fizik Hesaplama Algoritması: Karakterin düşme ivmesi, her kare döngüsünde dikey pozisyon değişkenine yerçekimi katsayısının eklenmesi (y = y + yercekimi) esasına dayanır. Butona basıldığında dikey hız vektörü anlık olarak tersine çevrilerek yükselme sağlanır.
  • I2C Haberleşme Bandı: I2C ekran sürümünde veri aktarım hızı ve ekran tazeleme süresi, standart 100 kHz I2C hızından 400 kHz Fast-Mode hızına çıkarılarak oyunun akıcılığı artırılmıştır.
  • SRAM Optimizasyonu: ATmega328P’nin 2 KB’lık kısıtlı statik RAM (SRAM) belleğini korumak amacıyla sabit metinler ve özel karakter tasarımları, F() makrosu ve PROGMEM direktifleri kullanılarak doğrudan Flash bellekte saklanmıştır.

Kesme Zamanlaması ve Donanımsal Debouncing Notu

Buton tetiklemelerinin kesme pini (INT0) üzerinden algılanması, ana döngüdeki ekran gecikmelerinden bağımsız olarak basışların anında kaydedilmesini sağlar. Ancak butonların mekanik yapısı gereği basılma anında mikrosaniyeler seviyesinde titreşimler (contact bounce) meydana gelir. Bu titreşimlerin birden fazla zıplama olarak algılanmasını önlemek için kesme fonksiyonu (ISR) içerisinde yazılımsal debouncing uygulanmalıdır. Butona basıldığında son geçerli basıştan bu yana en az 150 ms geçip geçmediği kontrol edilerek kararlı bir yönelim kontrolü elde edilir.

Sensör ve DönüştürücülerHall Etkisi SensörüSıcaklık Sensörü
Flex Sensör Nedir?Sensör Nedir?Konum Sensörü
Işık SensörüArduino Sensör RehberiSensör ve Dönüştürücüler Özeti
Gaz SensörleriSes Dönüştürücü

Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.