Arduino ile Hafıza Oyunu Nasıl Yapılır? Çocuklar İçin Proje Rehberi
Kırmızı ışık yandı.
Ardından yeşil.
Sonra sarı.
Peki bu sırayı hatırlayıp aynı butonlara doğru sırayla basabilir misiniz?
Arduino, renkli LED'ler ve butonlar kullanarak her turda biraz daha zorlaşan elektronik bir hafıza oyunu geliştirmek mümkündür.
Bu proje çocukların yalnızca elektronik bağlantı kurmasını değil; diziler, rastgele seçim, sıralama, kullanıcı girişleri, puanlama ve oyun mantığı gibi önemli programlama kavramlarını eğlenceli bir şekilde öğrenmesini sağlar.
Oyunun temel mantığı şöyledir:
Arduino Sırayı Göstersin → Oyuncu Hatırlasın → Butonlarla Tekrar Etsin → Doğruysa Sıra Uzatılır.
Peki Arduino ile hafıza oyunu nasıl yapılır? Gelin adım adım inceleyelim.
Arduino Hafıza Oyunu Nedir?
Arduino hafıza oyunu, sistemin belirli bir ışık veya ses sırası oluşturduğu ve oyuncunun bu sırayı doğru şekilde tekrar etmeye çalıştığı elektronik oyun projesidir.
Basit bir oyunda dört farklı renk kullanılabilir:
- Kırmızı
- Sarı
- Yeşil
- Mavi
Her rengin yanında aynı renge karşılık gelen bir buton bulunur.
Arduino önce bir LED yakar.
Oyuncu doğru butona basarsa ikinci turda iki LED'den oluşan bir sıra gösterilir.
Her doğru cevapta dizi biraz daha uzar.
Oyuncu yanlış butona bastığında oyun sona erebilir.
Bu Proje Çocuklara Neler Öğretir?
Hafıza oyunu, elektronik ile gerçek oyun programlama mantığını bir araya getiren oldukça kapsamlı bir projedir.
Proje sırasında şu konular öğrenilebilir:
- Arduino kullanımı
- LED kontrolü
- Buton kullanımı
- Dijital giriş ve çıkışlar
- Rastgele sayı üretme
- Diziler
- for döngüsü
- Koşul ifadeleri
- Kullanıcı girişlerini karşılaştırma
- Oyun turu oluşturma
- Puan sistemi
- Buzzer kullanımı
- Hata kontrolü
Bu nedenle proje temel LED ve buton çalışmalarını tamamlamış öğrenciler için güzel bir sonraki aşamadır.
Hafıza Oyunu İçin Hangi Malzemeler Gerekir?
Dört renkli basit bir oyun için şu elektronik bileşenlerden yararlanılabilir:
- Arduino Uno veya uyumlu kontrol kartı
- 4 adet farklı renk LED
- 4 adet buton
- LED'ler için uygun dirençler
- 1 adet buzzer
- Breadboard
- Jumper kablolar
- USB bağlantı kablosu
Daha gelişmiş sürümde LCD veya OLED ekran da eklenebilir.
Oyunun Çalışma Mantığı Nedir?
Oyunun ilk turunda Arduino yalnızca bir renk seçebilir.
Örneğin:
Kırmızı
LED'i yanar.
Oyuncu kırmızı butona basarsa tur tamamlanır.
İkinci turda sıra:
Kırmızı → Mavi
olabilir.
Oyuncunun artık iki butona doğru sırayla basması gerekir.
Üçüncü turda:
Kırmızı → Mavi → Sarı
gibi daha uzun bir sıra oluşur.
Her turda oyuncunun hatırlaması gereken bilgi miktarı artar.
Neden Her Turda Sıra Uzuyor?
Oyunun giderek zorlaşmasını sağlayan temel özellik budur.
Eğer her turda yalnızca tek renk gösterilseydi oyun kısa sürede kolaylaşırdı.
Ancak önceki sıralar korunup yeni bir renk eklendiğinde oyuncunun hem eski bilgiyi hatırlaması hem de yeni bilgiyi eklemesi gerekir.
Bu aynı zamanda programlama açısından önemli bir kavramı öğretir:
Veriyi saklamak.
Arduino Sırayı Nerede Saklar?
Renk sırasını saklamak için bir dizi kullanılabilir.
Örneğin:
int oyunSirasi[20];
şeklinde 20 elemanlık bir dizi oluşturulabilir.
Her eleman farklı bir rengi temsil edebilir.
Örneğin:
- 0 → Kırmızı
- 1 → Sarı
- 2 → Yeşil
- 3 → Mavi
Dizi Nedir?
Dizi, birden fazla değerin tek bir yapı içerisinde saklanmasını sağlayan programlama yapılarından biridir.
Örneğin:
int oyunSirasi[5] = {0, 2, 1, 3, 0};
şeklinde bir sıra oluşturulabilir.
Bu değerler:
Kırmızı → Yeşil → Sarı → Mavi → Kırmızı
olarak yorumlanabilir.
Çocuk böylece programlamada birden fazla bilginin nasıl düzenli şekilde saklanabildiğini öğrenir.
Arduino Yeni Rengi Nasıl Seçer?
Her yeni turda sıra sonuna rastgele bir renk eklenebilir.
Bunun için random() fonksiyonundan yararlanılabilir.
int yeniRenk = random(0, 4);
Bu kod:
- 0
- 1
- 2
- 3
değerlerinden birini üretebilir.
Her sayı farklı LED'e karşılık gelir.
randomSeed() Neden Kullanılabilir?
Arduino yeniden başlatıldığında her oyunun aynı sırayla başlamasını azaltmak için randomSeed() kullanılabilir.
Örneğin:
randomSeed(analogRead(A0));
şeklinde bir başlangıç değeri oluşturulabilir.
Böylece oyun her açıldığında farklı renk dizilerinin oluşması daha olası hale gelir.
LED'ler Nasıl Bağlanabilir?
Örnek bir bağlantı düzeninde:
- Kırmızı LED → Dijital Pin 8
- Sarı LED → Dijital Pin 9
- Yeşil LED → Dijital Pin 10
- Mavi LED → Dijital Pin 11
kullanılabilir.
LED bağlantılarında uygun dirençlerin kullanılması önemlidir.
Butonlar Nasıl Bağlanabilir?
Her LED'in karşısında bir buton bulunabilir.
Örneğin:
- Kırmızı buton → Pin 2
- Sarı buton → Pin 3
- Yeşil buton → Pin 4
- Mavi buton → Pin 5
Başlangıç projelerinde INPUT_PULLUP özelliğinden yararlanılabilir.
pinMode(kirmiziButon, INPUT_PULLUP);
Bu bağlantı düzeninde butona basıldığında LOW değeri okunabilir.
Arduino Renk Sırasını Nasıl Gösterir?
Arduino dizideki elemanları sırayla okuyarak ilgili LED'leri yakabilir.
Örneğin:
for (int i = 0; i < tur; i++) {
ledYak(oyunSirasi[i]);
delay(400);
tumLedleriKapat();
delay(200);
}
Bu yapı mevcut oyun sırasındaki bütün renklerin tek tek gösterilmesini sağlar.
for Döngüsü Bu Projede Ne İşe Yarar?
Oyunun sırası her turda daha uzun hale gelir.
Arduino'nun:
"Dizinin ilk elemanından mevcut turun sonuna kadar bütün renkleri göster."
demesi gerekir.
for döngüsü bu tekrar işlemini kolaylaştırır.
Bu nedenle hafıza oyunu, çocukların for döngüsünü gerçek bir kullanım alanında anlaması için güzel bir örnektir.
Oyuncunun Bastığı Buton Nasıl Kontrol Edilir?
Arduino dört butonu takip edebilir.
Örneğin kırmızı butona basıldığında sistem:
0
değerini döndürebilir.
Mavi butonda ise:
3
dönebilir.
Daha sonra oyuncunun seçimi oyun dizisindeki beklenen değerle karşılaştırılır.
Doğru Butona Basılıp Basılmadığı Nasıl Anlaşılır?
Program şu karşılaştırmayı yapabilir:
if (oyuncuSecimi == oyunSirasi[i]) {
// Doğru seçim
} else {
// Yanlış seçim
}
Değerler aynıysa oyuncu doğru butona basmıştır.
Farklıysa oyun kaybedilebilir.
Oyunun Temel Algoritması
Oyunun tamamını günlük dilde şu şekilde sıralayabiliriz:
- Oyunu başlat.
- Rastgele yeni renk seç.
- Yeni rengi oyun sırasına ekle.
- Mevcut renk sırasını LED'lerle göster.
- Oyuncunun ilk butona basmasını bekle.
- Seçimi beklenen renk ile karşılaştır.
- Doğruysa bir sonraki seçimi bekle.
- Bütün sıra doğruysa yeni tura geç.
- Yanlış seçim varsa oyunu bitir.
Örnek Arduino Hafıza Oyunu Kod Yapısı
Aşağıdaki kod projenin temel çalışma mantığını göstermek amacıyla sadeleştirilmiştir.
const int ledler[4] = {8, 9, 10, 11};
const int butonlar[4] = {2, 3, 4, 5};
int oyunSirasi[20];
int tur = 1;
void setup() {
Serial.begin(9600);
for (int i = 0; i < 4; i++) {
pinMode(ledler[i], OUTPUT);
pinMode(butonlar[i], INPUT_PULLUP);
}
randomSeed(analogRead(A0));
}
void loop() {
oyunSirasi[tur - 1] = random(0, 4);
sirayiGoster();
bool dogru = oyuncuyuKontrolEt();
if (dogru) {
Serial.println("Dogru!");
tur++;
delay(800);
} else {
Serial.println("Oyun Bitti!");
oyunBitti();
}
}
Bu örnek yalnızca temel yapıyı göstermektedir. sirayiGoster(), oyuncuyuKontrolEt() ve oyunBitti() gibi fonksiyonların ayrıca tanımlanması gerekir.
Fonksiyon Kullanmak Neden Faydalıdır?
Oyun büyüdükçe bütün kodu loop() içerisinde yazmak karışıklığa neden olabilir.
Bu nedenle farklı görevler ayrı fonksiyonlara bölünebilir.
Örneğin:
void sirayiGoster() {
}
bool oyuncuyuKontrolEt() {
}
void oyunBitti() {
}
Böylece kod daha düzenli ve okunabilir hale gelir.
LED Yakma Fonksiyonu Nasıl Oluşturulabilir?
Her renk için ayrı ayrı kod yazmak yerine tek bir fonksiyon kullanılabilir.
void ledYak(int renk) {
digitalWrite(ledler[renk], HIGH);
}
Bu fonksiyona hangi renk numarası gönderilirse ilgili LED aktif hale gelir.
Bu yaklaşım kod tekrarını azaltır.
Her Renge Farklı Ses Eklenebilir mi?
Evet.
Buzzer kullanılarak her LED'e farklı frekans atanabilir.
Örneğin:
- Kırmızı → 262 Hz
- Sarı → 330 Hz
- Yeşil → 392 Hz
- Mavi → 523 Hz
Böylece Arduino yalnızca renk sırası değil, aynı zamanda ses sırası da oluşturur.
Bu özellik mini piyano projesinde öğrenilen tone() bilgisinin hafıza oyununa aktarılmasını sağlar.
Ses Eklemek Oyunu Nasıl Değiştirir?
Oyuncu yalnızca renkleri değil, sesleri de hatırlayabilir.
Bu sayede oyun:
- Görsel hafıza
- İşitsel hafıza
üzerinden birlikte oynanabilir.
Daha ileri aşamada LED'ler kapatılıp yalnızca ses dizisini tekrar etme modu bile geliştirilebilir.
Oyun Her Turda Nasıl Zorlaştırılabilir?
En temel yöntem sıra uzunluğunu artırmaktır.
Ancak başka zorluk mekanizmaları da kullanılabilir.
Örneğin:
- LED yanma süresi azaltılabilir.
- Oyuncuya cevap vermesi için süre sınırı konabilir.
- Renk sayısı artırılabilir.
- Sesli ve görsel modlar karıştırılabilir.
Böylece aynı elektronik sistem farklı seviyelerde oynanabilir.
Hız Nasıl Artırılabilir?
İlk turlarda LED'ler örneğin 600 milisaniye açık kalabilir.
Oyun ilerledikçe bu süre azaltılabilir.
Örneğin:
- Tur 1-3 → 600 ms
- Tur 4-6 → 450 ms
- Tur 7+ → 300 ms
Bu değerler tamamen oyun tasarımına göre değiştirilebilir.
Oyuncuya Süre Sınırı Eklenebilir mi?
Evet.
Arduino bir butona basılması için belirli süre bekleyebilir.
Örneğin oyuncu 3 saniye içerisinde seçim yapmazsa tur kaybedilebilir.
Bu özellik daha önceki kronometre ve refleks oyunu projelerinde kullanılan zaman ölçme mantığının yeni projeye aktarılması anlamına gelir.
Puan Sistemi Nasıl Yapılabilir?
En basit puan sistemi mevcut tur sayısını puan olarak kullanabilir.
Örneğin:
Tur 7'ye ulaştıysanız skorunuz 7.
Daha gelişmiş sistemde:
- Doğru buton → +10 puan
- Tur tamamlama → +50 puan
- Hızlı cevap → bonus puan
gibi farklı oyun kuralları oluşturulabilir.
LCD Ekran Eklenebilir mi?
Evet.
LCD veya OLED ekran kullanılarak:
Tur: 5
Skor: 240
gibi bilgiler gösterilebilir.
Oyun bittiğinde:
OYUN BİTTİ
Skor: 8
mesajı görüntülenebilir.
En Yüksek Skor Saklanabilir mi?
Program çalıştığı sürece en yüksek tur değeri bir değişken içerisinde tutulabilir.
Örneğin:
if (tur > enYuksekSkor) {
enYuksekSkor = tur;
}
Böylece oyuncular kendi rekorlarını geçmeye çalışabilir.
İki Oyunculu Hale Getirilebilir mi?
Evet.
İki oyuncu sırayla aynı oyunu oynayabilir.
Arduino:
- Oyuncu 1 skorunu
- Oyuncu 2 skorunu
saklayabilir.
Tur sonunda yüksek skora sahip oyuncu kazanan ilan edilebilir.
İki Oyuncu Aynı Anda Oynayabilir mi?
Daha gelişmiş bir sistemde iki ayrı buton grubu oluşturulabilir.
Her oyuncunun kendi dört butonu bulunabilir.
Arduino aynı sırayı iki oyuncuya gösterir ve hangi oyuncunun doğru sırayı daha hızlı tamamladığını ölçebilir.
Bu durumda hafıza oyunu ile refleks oyunu birleşmiş olur.
Butona Bir Kez Bastığım Halde Neden İki Basış Algılanabilir?
Fiziksel butonlarda kısa süreli elektriksel titreşimler meydana gelebilir.
Bu duruma button bounce adı verilir.
Oyun içerisinde tek basışın iki seçim olarak algılanması sıranın bozulmasına neden olabilir.
Bu nedenle basit debounce yöntemi uygulanması faydalı olabilir.
Butonun Bırakılmasını Beklemek Neden Önemlidir?
Oyuncu butona basılı tuttuğunda Arduino programı çok hızlı çalıştığı için aynı buton birden fazla kez okunabilir.
Basit bir çözüm:
while (digitalRead(butonlar[secim]) == LOW) {
// Buton bırakılana kadar bekle
}
şeklinde olabilir.
Böylece her fiziksel basışın tek seçim olarak değerlendirilmesi kolaylaşır.
Oyun Bittiğinde Ne Olabilir?
Yanlış seçim yapıldığında bütün LED'ler aynı anda yakılabilir.
Buzzer ile kısa bir kaybetme sesi oluşturulabilir.
Ardından bütün LED'ler söndürülür ve oyun yeniden başlatılabilir.
Örneğin:
Kırmızı LED'ler yanıp sönsün → Buzzer sesi → Skoru göster → Yeni oyun.
Kazanma Durumu Eklenebilir mi?
Evet.
Örneğin oyuncu 15 tur boyunca hata yapmadan ilerlerse oyunu tamamlamış kabul edilebilir.
Bu durumda:
- Bütün LED'ler sırayla yanabilir.
- Kısa bir zafer melodisi çalabilir.
- Ekranda "TEBRİKLER" yazabilir.
Böylece oyunun yalnızca kaybetme değil, tamamlanma hedefi de olur.
Hafıza Oyunu İçin Fiziksel Kasa Yapılabilir mi?
Evet.
Devre breadboard üzerinde çalıştıktan sonra karton veya uygun hafif malzemeler kullanılarak gerçek bir oyun konsolu görünümü oluşturulabilir.
Dört büyük renkli buton:
- Kırmızı
- Sarı
- Yeşil
- Mavi
şeklinde kare veya dairesel düzen içerisinde yerleştirilebilir.
Arduino ve breadboard kasa içerisine gizlenebilir.
Böylece proje küçük bir masaüstü elektronik oyuna dönüşür.
Bu Projede Ürün Tasarımı Neden Önemlidir?
Butonların yalnızca çalışması yeterli değildir.
Oyuncunun hangi butona basacağını kolayca anlayabilmesi gerekir.
Bu nedenle:
- Renkler belirgin olmalı.
- Butonlar rahat basılmalı.
- LED'ler kolay görülmeli.
- Ses seviyesi uygun olmalı.
- Kasa kullanım sırasında hareket etmemeli.
gibi tasarım kararları düşünülebilir.
Bu çalışma çocukların elektronik ile kullanıcı deneyimi arasındaki ilişkiyi görmesine yardımcı olur.
Hafıza Oyunu STEM Projesi midir?
Evet.
Bilim
Işık ve ses gibi fiziksel çıktılar gözlemlenir.
Teknoloji
Arduino ve elektronik bileşenler kullanılır.
Mühendislik
Çalışan bir elektronik oyun sistemi tasarlanır.
Matematik
Sıralama, sayı dizileri, tur değerleri ve zamanlama kullanılır.
Aynı zamanda oyun tasarımı ve hafıza becerileri de projeye dahil olur.
Hafıza Oyunu ile Hangi Önceki Arduino Konuları Birleşir?
Bu proje önceki birçok elektronik konuyu aynı anda kullanabilir.
- LED kullanımı
- Buton kullanımı
- Buzzer ve tone()
- random()
- millis()
- LCD ekran
Bu nedenle Arduino öğrenme sürecinde farklı küçük projelerin tek bir daha kapsamlı oyuna dönüşmesini gösteren güzel bir örnektir.
Projeyi Nasıl Daha Gelişmiş Hale Getirebiliriz?
Temel oyun tamamlandıktan sonra şu özellikler eklenebilir:
- Her renge farklı ses eklemek
- LCD üzerinde skor göstermek
- Süre sınırı eklemek
- Oyun hızını artırmak
- Farklı zorluk seviyeleri oluşturmak
- İki oyunculu mod eklemek
- En yüksek skoru göstermek
- Sesli hafıza modu yapmak
- Zafer melodisi eklemek
Böylece dört LED ve dört butonla başlayan proje gerçek bir elektronik oyun konsoluna dönüşebilir.
Bilişim Garajı ile Kodlamayı Oyuna Dönüştürün
Arduino projeleri yalnızca sensör ölçümü veya otomasyon için kullanılmak zorunda değildir.
LED, buton, buzzer ve yazılım bir araya getirildiğinde öğrencilerin oynayabileceği etkileşimli sistemler geliştirilebilir.
Kırmızı ACT-200 Arduino Seti
Kırmızı ACT-200 Arduino Seti, Arduino ve elektronik dünyasına giriş yapmak isteyen öğrencilerin breadboard ve farklı elektronik bileşenlerle uygulamalı projeler geliştirmesine yardımcı olur.
LED ve buton çalışmalarından hafıza oyunu gibi daha kapsamlı etkileşimli projelere doğru ilerlenebilir.
Kırmızı ACT-200 Arduino Setini İnceleyin
Siyah ACT-300 Arduino Seti
Daha kapsamlı Arduino ve elektronik çalışmalarına ilerlemek isteyen öğrenciler için Siyah ACT-300 Arduino Seti, farklı bileşenlerin aynı sistem içerisinde kullanılabildiği daha gelişmiş proje fikirleri oluşturmaya yardımcı olabilir.
LED'ler, butonlar, ekranlar ve ses bileşenleri bir araya getirilerek oyun ve otomasyon projeleri geliştirilebilir.
Siyah ACT-300 Arduino Setini İnceleyin
Dört Işıktan Gerçek Bir Oyuna
Arduino hafıza oyununun en güzel tarafı, oldukça basit elektronik bileşenlerden gerçek oyun mantığı oluşturmasıdır.
Arduino bir renk seçer.
Sırayı hafızasında tutar.
LED'lerle oyuncuya gösterir.
Oyuncu butonlarla cevap verir.
Program verilen cevabı kontrol eder.
Doğruysa oyun biraz daha zorlaşır.
Yanlışsa tur sona erer.
Böylece çocuk yalnızca devre kurmaz; kuralları, seviyeleri, girdileri ve sonuçları olan gerçek bir oyun sistemi tasarlar.
Sık Sorulan Sorular
Arduino ile hafıza oyunu yapılabilir mi?
Evet. Arduino, renkli LED'ler ve butonlar kullanılarak giderek uzayan bir sırayı oyuncunun tekrar etmesine dayanan elektronik hafıza oyunu geliştirilebilir.
Hafıza oyununda kaç LED gerekir?
Başlangıç için dört farklı renk LED kullanmak uygundur ancak oyun daha az veya daha fazla LED ile de tasarlanabilir.
Arduino renk sırasını nasıl oluşturur?
random() fonksiyonuyla rastgele değerler üretilerek her değer farklı bir LED ile eşleştirilebilir.
Arduino sıraları nasıl saklar?
Programlama içerisindeki diziler kullanılarak oluşturulan renk sırası hafızada tutulabilir.
Oyuna ses eklenebilir mi?
Evet. Buzzer ve tone() kullanılarak her renge farklı bir ses atanabilir.
Oyun giderek zorlaştırılabilir mi?
Evet. Sıra uzatılabilir, LED süreleri kısaltılabilir veya oyuncuya cevap vermesi için süre sınırı konabilir.
LCD ekranda skor gösterilebilir mi?
Evet. Tur, skor ve oyun durumu uygun bir LCD veya OLED ekran üzerinde gösterilebilir.
Bu proje çocuklar için uygun mudur?
Temel Arduino, LED ve buton kullanımını öğrenmiş öğrenciler için oyun mantığı, diziler ve kullanıcı etkileşimini öğreten eğlenceli bir proje örneğidir.
Sonuç
Arduino ile hafıza oyunu projesi, çocukların elektronik ve kodlama bilgisini gerçek bir oyunda bir araya getirmesine yardımcı olur.
Arduino rastgele bir sıra oluşturur, LED'lerle oyuncuya gösterir ve butonlardan gelen cevapları kontrol eder.
Her doğru turda sıra biraz daha uzar ve oyun zorlaşır.
Bu süreç içerisinde diziler, random(), for döngüleri, koşullar, buton girişleri ve LED kontrolü gibi önemli programlama kavramları uygulamalı olarak öğrenilebilir.
Proje daha sonra ses, ekran, skor sistemi ve farklı zorluk seviyeleriyle geliştirilebilir.
Bugün dört renkli ışığın sırasını hatırlayan bir çocuk, yarın kendi oyun kurallarını ve elektronik sistemlerini tasarlamaya başlayabilir.