Arduino – Hafıza Oyunu

Bu yazıda Arduino ile yapmış olduğumuz küçük bir projeyi anlatacağız. Yapılması oldukça kolay ve anlaşılır olan bu proje aslında bir hafıza oyunu. Projemizi kısaca tanıyalım.

Hafıza Oyunu:  Sistem başlatıldığında Arduino tarafından rastgele 3 adet sayı üretiliyor. Devamında kullanıcı tuş takımına aynı sayıları giriyor. Eğer doğru ise yeşil LED yanıyor ve üretilen sayı adeti bir arttırılıyor. Bu işlem oyuncu yanlış girene kadar devam ediyor. Yanlış girildiğinde ise kırmızı LED yanıyor. Bunun yanında her tuşa basıldığında buzzer farklı bir tonda öterken yanlış ve doğru girildiğinde de öterek oyuncuyu bilgilendiriyor. Görüldüğü gibi oldukça basit. Şimdi malzeme listesine bakalım.

Malzeme Listesi

1. Arduino UNO(Mega da olabilir fakat yazılım UNO’ya göre yapıldığı için pinlere dikkat edilmesi gerekir.)
2. 74HC595 Shift Register(Shift register yazımıza buradan ulaşabilirsiniz.)
3. Buzzer
4. Tuş Takımı (Projede ankesörlü telefon tuş takımı kullanıldı.)
5. 7 Segment LED Display (Ortak anot kullanıldı.)
6. Yeşil LED
7. Kırmızı LED
8. NPN ve PNP transistör.
9. 8 x 330Ω(7 segment LED için.)
10.4 x 10kΩ(Tuş takımı için.)
11.2 x 220Ω(LED’ler için.)

 Devrenin Kurulumu:

hafiza_oyunu_bb

  • Devreyle ilgili bazı noktalar değinmem gerekiyor. Devrede x1,x2,x3,x4 olarak belirtilenler tuş takımının satırlarını; y1,y2,y3 olarak belirtilenler ise sütunlarını belirtmektedir. Arduino çıkış pinim yetersiz geldiği için yeşil LED’i kontrol eden PNP transistörün beyzine kırmızı LED’i bağladım. Bu durumda yeşil LED sürekli yanarken yanlış bir giriş olduğunda sönüp kırmızı LED yanıyor. Daha fazla çıkışlı bir Arduino ile yapıyorsanız iki LED’i ayırarak bunu çözebilirsiniz. Ayrıca shift register’ın bağlantılarını yaparken datasheetine bakmanızda fayda var. İşin yazılım tarafına bakıldıktan sonra devre daha net anlaşılacaktır.

Arduino Kodları:

Kod içerisinde setup ve loop kısımları anlatıldı. Devamında yazılan fonksiyonları tek tek açıklayacağım. Daha iyi görüntülemek için genişletebilir veya ayrı pencerede açabilirsiniz. Kopyalayıp Arduino IDE’sinde incelemeniz de mümkün.

Genel olarak kodun çalışma sisteminden bahsettik fakat daha iyi anlaşılması için fonksiyonların incelenmesi lazım.
Sırasıyla:

  1. LedYaz
  2. RastgeleYaz
  3. y1-y2-y3_kontrol
  4. tarama

fonksiyonlarını inceleyeceğiz.

LedYaz:

            Burada “shiftOut” kodu Arduino’da shift register için kullanılan bir koddur. dataPin ve clockPin kodun başında zaten belirtilmişti. ledno fonksiyonun değişkenidir ve byte olmalıdır. Çünkü shift registerın 8 bit paralel çıkışı vardır. LSBFIRST ise byte değerini en küçük bitten okuması içindir. MSBFIRST yazılarak en büyük bitten başlayabilirsiniz. Bu durumda kodun başında belirlenen byte değerleri tersten yazılmalıdır. lastchPin öncelikle 0 yapılır ve data yazmaya başlanır. shiftOut ile data verilir ve latchPin tekrar 1 yapılır. Fonksiyonda parantez içine yazılan byte değeri 7 segment LED’e aktarılmış olunur.

RastgeleYaz:

            Fonksiyon başında bir for döngüsüne girerek rastgele sayıyı oluşturmaya başlıyor. “random” kodu ile 0-10 arasında(0 dahil 10 hariç) rastgele sayı oluşturuyor. Her oluşturduğu sayıyı y dizisine atıyor ve o sayıyı 7 segment LED’de yazıyor. s değişkeni doğru cevap verildiğinde 1 arttırılarak her defasında dizi uzunluğu artıyor.

y1-y2-y3_kontrol:
Burada sadece y1_kontrol fonksiyonunu inceleyeceğiz. Hepsi aynı görevi yapmakta.

            Bu fonksiyon aslında tarama fonksiyonuyla birlikte çalışan bir fonksiyon ama yine de kısaca bahsedelim. Burada y1 pini aktifken herhangi bir x değerinin girilip girilmediği kontrol ediliyor. Eğer y1 sütununda bir sayıya basılırsa o sayı diziye atanıyor LedYaz ile yazılıyor ve buzzer belirlenen tonda ötüyor. Örneğin 4 tuşuna basıldığında dizinin k. elemanı 4 yapılıyor, LedYaz ile 4 yazılıyor ve buzzer tone(5,200) koduyla 200 Hz’lik bir frekansta ses çıkarıyor. Her sayı için tek tek bu kodlar yazılmalıdır.

Tarama:          

            Son olarak Tarama fonksiyonuna bakalım. Bu fonksiyon tuş takımının çalışması için yazılmış en geniş fonksiyon. Sırasıyla 1. 2. ve 3. sütunlar aktif ediliyor ve her aktif edilmeden sonra satırda okuma olup olmadığına bakılıyor. Daha doğrusu bu değerler xa_oku değişkenine atanarak ya_kontrol fonksiyonu ile yukarıda gördüğümüz işlemler yapılıyor. Rastgele sayılar oluşturulduktan sonra çalışmaya başlayan bu fonksiyon girilen sayı dizisi uzunluğu rastgele oluşturulan sayı dizisinin uzunluğuna eşit olana kadar sürekli çalışıyor.

         Projemiz Hazır

Karışık gibi görünse de aslında basit ve eğlenceli bir proje. Tabi ki her proje gibi geliştirilmeye açık. Devrenin kurulumu veya yazılım ile ilgili bir sorunuz olursa yorumda belirtebilirsiniz. İyi eğlenceler!!           

IMG_20160106_011356[1]

 

 

“Arduino – Hafıza Oyunu” Hakkında 1 Yorum

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.