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: