Proje ne yapıyor?
Ne kadar hızlı tepki verdiğinizi ölçen bir oyun yapıyoruz. LED rastgele bir anda yanar; yanar yanmaz butona basmanız gerekir. Arduino tepki sürenizi milisaniye cinsinden ölçer ve en iyi skorunuzu saklar. LED yanmadan basarsanız buzzer “erken bastın” uyarısı verir. Sınıfta arkadaşlarla yarışmak için idealdir.
- Yaş grubu: 10 yaş ve üzeri
- Seviye: Başlangıç
- Süre: Yaklaşık 40 dakika
- Bu projede öğrenecekleriniz:
millis()ile süre ölçmek,random()ile rastgele sayı üretmek,whiledöngüsü, değişkende skor saklamak
Malzeme listesi
| Malzeme | Adet |
|---|---|
| Arduino Uno (veya muadili) | 1 |
| LED (kırmızı veya yeşil) | 1 |
| 220 Ω direnç | 1 |
| Push buton | 1 |
| Pasif buzzer | 1 |
| Breadboard | 1 |
| Erkek-erkek jumper kablo | ~8 |
| USB kablo | 1 |
Devre bağlantıları

| Bileşen | Bağlantı | Arduino pini |
|---|---|---|
| LED | Uzun bacak (220 Ω üzerinden) | D8 |
| LED | Kısa bacak | GND |
| Buton | Bir bacağı | D2 |
| Buton | Çapraz karşı bacağı | GND |
| Buzzer | + (uzun bacak) | D9 |
| Buzzer | – | GND |
Kodlar
// Arduino Reaksiyon Süresi Oyunu - ozandamci.comconst int ledPin = 8;const int butonPin = 2;const int buzzerPin = 9;unsigned long enIyiSkor = 0; // 0 = henüz skor yokvoid setup() { pinMode(ledPin, OUTPUT); pinMode(butonPin, INPUT_PULLUP); pinMode(buzzerPin, OUTPUT); Serial.begin(9600); randomSeed(analogRead(A0)); // boştaki pinden rastgelelik al Serial.println("Reaksiyon oyununa hos geldin!");}void loop() { Serial.println("Hazir ol... LED yaninca butona bas!"); // Rastgele 2-5 saniye bekle, bu sırada erken basmayı yakala unsigned long bekleme = random(2000, 5000); unsigned long baslangic = millis(); while (millis() - baslangic < bekleme) { if (digitalRead(butonPin) == LOW) { Serial.println("Erken bastin! Tekrar dene."); tone(buzzerPin, 200, 600); delay(2000); return; // loop'u baştan başlat } } // LED'i yak ve süreyi başlat digitalWrite(ledPin, HIGH); unsigned long yanmaZamani = millis(); while (digitalRead(butonPin) == HIGH) { // butona basılmasını bekle } unsigned long tepki = millis() - yanmaZamani; digitalWrite(ledPin, LOW); tone(buzzerPin, 1500, 100); Serial.print("Tepki suren: "); Serial.print(tepki); Serial.println(" ms"); if (enIyiSkor == 0 || tepki < enIyiSkor) { enIyiSkor = tepki; Serial.println("Yeni rekor!"); } Serial.print("En iyi skor: "); Serial.print(enIyiSkor); Serial.println(" ms"); Serial.println("-----------------------"); while (digitalRead(butonPin) == LOW) { // butonun bırakılmasını bekle } delay(2000);}
Adım adım yapılışı
- LED’i takın. LED’in uzun bacağına 220 Ω direnç bağlayıp D8’e, kısa bacağını GND’ye bağlayın.
- Butonu takın. Butonu breadboard’un ortasındaki boşluğun üzerine yerleştirin. Bir bacağını D2’ye, çapraz karşısındaki bacağını GND’ye bağlayın.
- Buzzer’ı takın. Uzun bacağını D9’a, kısa bacağını GND’ye bağlayın.
- Kodu yükleyin. Kartınızı ve portu seçip Yükle‘ye basın.
- Oyunu başlatın. Araçlar → Seri Port Ekranı‘nı açın (9600 baud). “Hazır ol” yazısını görünce LED’e odaklanın ve yanar yanmaz butona basın.
- Yarışın. Birkaç kişi sırayla oynayıp en iyi skoru kimin yaptığını görün. Ortalama insan tepki süresi 200–300 ms civarındadır.
Sorun giderme
- LED yanmadan “Erken bastın” yazıyor: Buton bacakları yanlış yerleştirilmiş olabilir; çapraz bacakları kullandığınızdan emin olun.
- Seri Port Ekranı’nda anlamsız karakterler var: Ekranın sağ altındaki hız ayarını 9600 baud yapın.
Kendiniz deneyin
- İki buton ve iki LED ile iki kişilik düello modu yapın: kim önce basarsa onun LED’i yansın.
- Skoru I2C LCD ekranda gösterin, böylece bilgisayara gerek kalmasın.
Videolu anlatım
Projenin yapılışını adım adım videodan da izleyebilirsiniz. Diğer projeler için Arduino Projeleri oynatma listesine göz atın, yeni videolardan haberdar olmak için YouTube kanalıma abone olabilirsiniz.
Bir önceki proje: Arduino ile Sıcaklık ve Nem Ölçer Yapımı – DHT11 ve LCD Ekran
Daha fazla proje için: Bu ve benzeri projeleri adım adım anlattığım Arduino Projeleri kitabıma göz atabilirsiniz.
