Arduino ile Geri Sayım Sayacı ile Bomba Oyunu (Butonla Durdur)

Arduino ile Geri Sayım Sayacı ile Bomba Oyunu (Butonla Durdur)

Arduino ile Geri Sayım Sayacı ile Bomba Oyunu (Butonla Durdur)

Merhaba Arduino severler!

Bu yazımızda, Arduino ile eğlenceli bir proje geliştireceğiz: Geri Sayım Sayacı ile Bomba Oyunu! Bu projede, bir geri sayım sayacı kullanacak, butona basarak geri sayımı durdurmaya çalışacak ve eğer zamanında durduramazsak, buzzer ile bir "patlama" sesi duyacağız. Projemiz, millis() fonksiyonu ile zaman takibi, if/else koşulları, tone() fonksiyonu ve bir buzzer kullanarak Arduino'nun temel özelliklerini bir araya getiriyor.

Projenin Amacı

Bu projenin amacı, Arduino'nun temel özelliklerini kullanarak interaktif ve eğlenceli bir uygulama geliştirmektir. Öğrenciler ve hobi amaçlı elektronik meraklıları için, bu proje hem Arduino programlamayı öğrenmek hem de elektronik devreleri anlamak için harika bir başlangıç noktasıdır.

Gerekli Malzemeler

  • Arduino Uno (veya benzeri bir Arduino kartı)
  • Bir adet buton
  • Bir adet buzzer
  • 220 ohm direnç (Buton için)
  • Jumper kablolar
  • Breadboard (isteğe bağlı)

Devre Şeması

Devremizi kurarken aşağıdaki bağlantıları yapalım:

  • Buzzer:
    • Buzzer'ın pozitif (+) bacağı Arduino'nun 8 numaralı pinine
    • Buzzer'ın negatif (-) bacağı Arduino'nun GND pinine
  • Buton:
    • Butonun bir bacağı Arduino'nun 2 numaralı pinine (dijital giriş pini)
    • Butonun diğer bacağı 220 ohm direnç üzerinden GND'ye
    • Aynı bacaktan (Arduino'nun 2 numaralı pinine bağlanan) Arduino'nun 5V pinine bir kablo çekerek "pull-up" direncini taklit edebiliriz (veya dahili pull-up direncini kullanabiliriz, kodda anlatacağım).

Arduino Kodu

Şimdi de projemizin Arduino koduna geçelim:


 // Pin tanımlamaları
 const int buttonPin = 2;   // Butonun bağlı olduğu pin
 const int buzzerPin = 8;   // Buzzer'ın bağlı olduğu pin

 // Zaman ayarları
 const unsigned long countdownTime = 10000; // Geri sayım süresi (10 saniye - milisaniye cinsinden)
 unsigned long startTime;  // Geri sayımın başladığı zaman

 // Durum değişkenleri
 bool bombActive = false; // Bomba aktif mi?
 bool bombDefused = false; // Bomba etkisiz hale getirildi mi?

 void setup() {
  Serial.begin(9600); // Seri haberleşmeyi başlat
  pinMode(buttonPin, INPUT_PULLUP); // Buton pinini giriş olarak ayarla ve dahili pull-up direncini etkinleştir
  pinMode(buzzerPin, OUTPUT); // Buzzer pinini çıkış olarak ayarla
 }

 void loop() {
  // Eğer bomba aktif değilse ve buton basılıyorsa, geri sayımı başlat
  if (!bombActive && digitalRead(buttonPin) == LOW) {
   startBomb();
  }

  // Eğer bomba aktifse ve henüz etkisiz hale getirilmediyse, geri sayımı kontrol et
  if (bombActive && !bombDefused) {
   checkCountdown();
  }

  // Bomba etkisiz hale getirildiyse veya patladıysa, hiçbir şey yapma
  delay(10); // Döngü hızını yavaşlatmak için kısa bir gecikme
 }

 // Bomba geri sayımını başlatır
 void startBomb() {
  Serial.println("Bomba Aktif!");
  bombActive = true;
  bombDefused = false;
  startTime = millis(); // Geri sayımın başlangıç zamanını kaydet
  Serial.print("Kalan Sure: ");
  Serial.print(countdownTime / 1000);
  Serial.println(" Saniye");

 }

 // Geri sayımı kontrol eder
 void checkCountdown() {
  unsigned long currentTime = millis(); // Şu anki zamanı al
  unsigned long elapsedTime = currentTime - startTime; // Geçen süreyi hesapla

  // Eğer geri sayım süresi dolduysa, bombayı patlat
  if (elapsedTime >= countdownTime) {
   explodeBomb();
  }

  // Eğer buton basıldıysa, bombayı etkisiz hale getir
  if (digitalRead(buttonPin) == LOW) {
   defuseBomb();
  }
 }

 // Bombayı patlatır (buzzer ile ses çıkarır)
 void explodeBomb() {
  Serial.println("BOOM!");
  bombActive = false;
  bombDefused = true;
  tone(buzzerPin, 1000); // Buzzer ile 1kHz frekansında ses çıkar
  delay(2000); // 2 saniye boyunca sesi çal
  noTone(buzzerPin); // Buzzer'ı kapat
 }

 // Bombayı etkisiz hale getirir
 void defuseBomb() {
  Serial.println("Bomba Etkisiz Hale Getirildi!");
  bombActive = false;
  bombDefused = true;
  // Buzzer'dan kısa bir "başarı" sesi çıkarılabilir
  tone(buzzerPin, 440, 200); // 440Hz (A notası) frekansında 200ms süreyle ses çal
  delay(300);
  noTone(buzzerPin);
 }
 

Kodun Açıklaması

  • Pin Tanımlamaları: Projede kullanılan pinlerin tanımlandığı kısım.
  • Zaman Ayarları: Geri sayım süresinin belirlendiği kısım.
  • Durum Değişkenleri: Bomba aktif mi, etkisiz hale getirildi mi gibi durumları takip etmek için kullanılan değişkenler.
  • setup() Fonksiyonu: Pin modlarını ayarlayan ve seri haberleşmeyi başlatan fonksiyon. INPUT_PULLUP modu butonu bağlarken harici direnç kullanma zorunluluğunu ortadan kaldırır.
  • loop() Fonksiyonu: Sürekli olarak çalışan ve bomba durumunu kontrol eden fonksiyon.
  • startBomb() Fonksiyonu: Bombayı aktif hale getiren ve geri sayımı başlatan fonksiyon.
  • checkCountdown() Fonksiyonu: Geri sayım süresini kontrol eden ve butona basılıp basılmadığını kontrol eden fonksiyon.
  • explodeBomb() Fonksiyonu: Bomba patladığında çalışacak olan fonksiyon (buzzer ile ses çıkarır).
  • defuseBomb() Fonksiyonu: Bomba etkisiz hale getirildiğinde çalışacak olan fonksiyon (buzzer ile kısa bir ses çıkarabilir).

Çalışma Prensibi

Arduino, sürekli olarak butonun durumunu kontrol eder. Butona basıldığında (digitalRead(buttonPin) == LOW), startBomb() fonksiyonu çağrılır ve geri sayım başlar. checkCountdown() fonksiyonu, geçen süreyi sürekli olarak kontrol eder. Eğer geri sayım süresi dolmadan butona tekrar basılırsa, defuseBomb() fonksiyonu çağrılır ve bomba etkisiz hale getirilir. Eğer geri sayım süresi dolarsa, explodeBomb() fonksiyonu çağrılır ve buzzer ile bir patlama sesi çıkarılır.

Geliştirme İpuçları

  • Geri sayım süresini değiştirerek oyunun zorluğunu ayarlayabilirsiniz.
  • Buzzer'dan farklı sesler çıkararak oyunu daha eğlenceli hale getirebilirsiniz (örneğin, farklı frekanslarda sesler).
  • LCD ekran kullanarak geri sayım süresini görsel olarak gösterebilirsiniz.
  • Oyuna farklı zorluk seviyeleri ekleyebilirsiniz (örneğin, daha kısa geri sayım süreleri veya birden fazla buton).

Umarım bu proje size Arduino ile eğlenceli bir deneyim yaşatır. İyi eğlenceler!

Etiketler: Arduino, Geri Sayım Sayacı, Bomba Oyunu, Buton, Buzzer, millis(), tone(), elektronik proje, arduino proje

```

0 yorum: