HIZLI VE GÜVENİLİR KARGO
1.750 TL üzeri ücretsiz kargo
HIZLI VE GÜVENİLİR KARGO
1.750 TL üzeri ücretsiz kargo
Tilt Kontrollü Skor Sayacı: Arduino ile Kendi Oyununuzu Yapın!

Tilt Kontrollü Skor Sayacı: Arduino ile Kendi Oyununuzu Yapın!

Elektronik projelerle oyun dünyasına adım atmaya ne dersiniz? Bu projede, bir tilt sensörü kullanarak basit bir hareket algılama mekanizması oluşturacak ve bu hareketleri 4 haneli 7 segment bir ekranda puan olarak göstereceksiniz. Üstelik bir reset butonu ile skoru sıfırlayabileceksiniz. Bu sayede hem sensör okuma ve dijital ekran kontrolünü pekiştirecek hem de interaktif bir proje geliştirmiş olacaksınız!

Gerekli Malzemeler

Bu projeyi hayata geçirmek için ihtiyacın olan tüm malzemeler aşağıda listelenmiştir. Çoğu bileşen elektronik hobi kitlerinde bulunur.

  • Arduino Uno R3: Projemizin beyni, tilt sensörden gelen veriyi işleyecek ve skoru ekrana yansıtacak.
  • Tilt sensörü: Eğilme veya devrilme hareketini algılayarak skorun artmasını sağlayacak sensörümüz.
  • 4 haneli 7 segment display: Skor değerini göstereceğimiz dijital ekran. Genellikle TM1637 gibi modüller daha kolay bağlantı sunar.
  • 8 x 220Ω direnç: Her bir 7 segment display'in segment bacakları için akım sınırlayıcı dirençler. (Modül kullanılıyorsa genellikle buna gerek kalmaz.)
  • (Opsiyonel) 4 x sürücü transistör: Eğer entegre bir 7 segment modülü kullanmıyor ve displayleri manuel olarak multiplex ediyorsanız, her hane için bir transistör (örn. NPN - BC547) gereklidir. Bu blog yazısı, basitlik adına TM1637 gibi bir modül üzerinden anlatım yapacaktır.
  • Reset butonu: Skoru sıfırlamak için kullanacağımız basmalı anahtar.
  • Küçük breadboard: Devre elemanlarını lehim yapmadan bağlamak için.
  • Jumper kablolar: Bileşenleri birbirine ve Arduino'ya bağlamak için.
  • USB kablosu: Arduino'yu bilgisayara bağlamak ve enerji vermek için.

Devre Bağlantı Şeması

Devre bağlantılarını doğru yapmak, projenin başarılı bir şekilde çalışmasını sağlar. Özellikle 7 segment ekranın bağlantı tipine dikkat edin.

1. Tilt Sensörü Bağlantısı:

  • Sensörün bir ucunu Arduino'nun D6 pinine bağla.
  • Sensörün diğer ucunu Arduino'nun GND pinine bağla.
  • Daha kararlı bir sinyal için, D6 pinine bağlı kablonun olduğu bacağa bir 10kΩ direnç bağla ve direncin diğer ucunu Arduino'nun 5V pinine bağlayarak pull-up konfigürasyonu oluştur.

2. 4 Haneli 7 Segment Display Bağlantıları (TM1637 Modülü Varsayımıyla):

  • Modülün VCC pinini Arduino 5V'a.
  • Modülün GND pinini Arduino GND'ye.
  • Modülün DIO (Data Input/Output) pinini Arduino D2'ye.
  • Modülün CLK (Clock) pinini Arduino D3'e.

3. Reset Butonu Bağlantısı:

  • Butonun bir ucunu Arduino'nun D4 pinine bağlayın.
  • Butonun aynı ucuna bir 10kΩ direnç bağlayın ve direncin diğer ucunu Arduino'nun GND pinine bağlayın (pull-down konfigürasyonu).
  • Butonun diğer ucunu Arduino'nun 5V pinine bağlayın.

4. Genel Güç Bağlantısı:

  • Arduino'yu bilgisayarınıza USB kablosu ile bağlayın.

Arduino Kodları

Devre bağlantılarını tamamladıktan sonra sıra projenin beynini oluşturan koda geldi. Arduino IDE'yi açın ve aşağıdaki kodları kopyalayıp yapıştırın. Bu kod, tilt sensörden gelen hareketleri sayacak ve skoru 7 segment ekranda gösterecektir. Reset butonu ile skor sıfırlanabilir.

Not: Bu kod, TM1637 gibi entegre 4 haneli 7 segment display modülleri için yazılmıştır ve "TM1637Display" kütüphanesini gerektirir. Kütüphaneyi kurmak için Arduino IDE'de Taslak > Kütüphaneleri Dahil Et > Kütüphaneleri Yönet yolunu izleyip "TM1637Display" aratarak kurabilirsiniz.

C++

#include <TM1637Display.h> // TM1637 7-Segment Display kütüphanesini dahil ediyoruz

// Pin Tanımları
const int tiltSensorPin = 6;  // Tilt sensör pini
const int resetButtonPin = 4; // Reset butonu pini

// TM1637 Display pinleri
const int CLK = 3; // CLK pini Arduino D3'e bağlı
const int DIO = 2; // DIO pini Arduino D2'ye bağlı

// TM1637Display nesnesini oluşturuyoruz
TM1637Display display(CLK, DIO);

// Skor ve buton durumu değişkenleri
int score = 0;
int lastTiltState = LOW;  // Tilt sensörün son durumu
int currentTiltState;     // Tilt sensörün mevcut durumu
int lastButtonState = LOW; // Reset butonunun son durumu
int currentButtonState;    // Reset butonunun mevcut durumu

void setup() {
  // Pinleri giriş ve çıkış olarak ayarlıyoruz
  pinMode(tiltSensorPin, INPUT);
  pinMode(resetButtonPin, INPUT);
  
  Serial.begin(9600); // Seri monitörü başlatıyoruz
  Serial.println("Tilt Kontrollü Skor Sayacı Hazır!");
  
  // Display'i başlatıyoruz ve parlaklığını ayarlıyoruz
  display.setBrightness(0x0a); // Parlaklık ayarı (0x00 en düşük, 0x0f en yüksek)
  
  // Başlangıçta skoru ekranda göster
  display.showNumberDec(score, false, 4, 0); 
}

void loop() {
  // Tilt sensörün mevcut durumunu oku
  currentTiltState = digitalRead(tiltSensorPin);

  // Eğer tilt sensör durumu değiştiyse (LOW'dan HIGH'a geçtiyse, yani hareket algılandıysa)
  if (currentTiltState != lastTiltState) {
    if (currentTiltState == HIGH) {
      score++; // Skoru artır
      Serial.print("Skor: ");
      Serial.println(score);
      // Ekranda skoru güncelle, 4 haneli ve öndeki sıfırlar gizli değil
      display.showNumberDec(score, false, 4, 0); 
    }
    delay(50); // Sensör sıçramasını önlemek için kısa bir gecikme
  }
  lastTiltState = currentTiltState; // Son durumu güncelle

  // Reset butonunun mevcut durumunu oku
  currentButtonState = digitalRead(resetButtonPin);

  // Eğer reset butonuna basıldıysa (LOW'dan HIGH'a geçtiyse)
  if (currentButtonState != lastButtonState) {
    if (currentButtonState == HIGH) {
      score = 0; // Skoru sıfırla
      Serial.println("Skor Sıfırlandı!");
      display.showNumberDec(score, false, 4, 0); // Ekranda skoru güncelle
    }
    delay(50); // Buton sıçramasını önlemek için kısa bir gecikme
  }
  lastButtonState = currentButtonState; // Son durumu güncelle
}

Not: Tilt sensörünüzün HIGH veya LOW hangi durumda "eğilmeyi" temsil ettiğini deneme yanılma ile kontrol etmeniz gerekebilir. Koddaki if (currentTiltState == HIGH) koşulunu if (currentTiltState == LOW) olarak değiştirmeniz gerekebilir.

Projenin Çalışma Mantığı ve Geliştirme Fikirleri

Bu projede, bir tilt sensörü ile hareket algılayarak skoru artırdık ve bu skoru 4 haneli 7 segment ekranda gösterdik. Kod, digitalRead() komutu ile hem tilt sensörün hem de reset butonunun durumunu sürekli kontrol eder. Tilt sensörden gelen her hareket algılandığında skor artırılırken, reset butonuna basıldığında skor sıfırlanır. "TM1637Display" kütüphanesi sayesinde skor kolayca ekrana yazdırılır.

Bu projeyi daha da geliştirmek istersen:

  • Zaman Sınırı: Oyuna bir zaman sınırı ekleyebilir ve süre bittiğinde oyunu bitirebilirsiniz.
  • Oyun Modları: Farklı zorluk seviyeleri veya oyun modları ekleyebilir, örneğin belirli bir sayıda hareketi belirli bir sürede yapma gibi.
  • Ses Efektleri: Her skor artışında veya resetlendiğinde buzzer ile ses efektleri ekleyebilirsiniz.
  • İki Oyuncu Modu: İki ayrı tilt sensörü ve iki ayrı skor sayacı ile iki kişilik bir oyun haline getirebilirsiniz.
  • Kutu İçi Oyun: Tüm sistemi küçük bir kutunun içine yerleştirerek, kutuyu eğerek veya sallayarak oynanabilen bir oyun konsolu oluşturabilirsiniz.

Bu proje, sensörlerden veri almayı, buton kontrolünü ve dijital ekranlarla veri görüntülemeyi birleştiren interaktif bir uygulamadır. Kendi oyun fikirlerini ekleyerek projeyi daha da eğlenceli hale getirmekten çekinme!