Yazılardaki ürünleri komponentci.net'te inceleyebilir, hemen sipariş verebilirsiniz.komponentci.net →
KomponentciBlog Mağaza
Blog  ›  Projeler

Reaksiyon Süresi Oyunu: Arduino ile Tepki Ölçme

Reaksiyon Süresi Oyunu: Arduino ile Tepki Ölçme
Kısa cevap

Reaksiyon süresi oyunu, Arduino, bir LED ve bir butonla tepki hızını milisaniye olarak ölçer. LED 2-5 saniyelik rastgele bir beklemeden sonra yanar; Arduino millis() ile yanma anından butona basılana kadar geçen süreyi hesaplar. LED yanmadan basılırsa tur geçersiz sayılır. Çoğu insanın ışığa tepki süresi 200-300 ms arasındadır.

Arkadaşlarınızdan hangisinin daha hızlı tepki verdiğini bilimsel olarak ölçmek ister misiniz? Bu yazıda Arduino Uno, bir LED ve bir butonla reaksiyon süresi ölçen bir oyun yapıyoruz. Rastgele beklemenin, millis() ile ölçümün ve erken basma kontrolünün nasıl çalıştığını anlatıyoruz. Sonda sınıfınızın ölçümleriyle istatistik yapmayı gösteriyoruz.

Reaksiyon süresi nedir?

Reaksiyon süresi, bir uyarının (ışık, ses ya da dokunma) algılanmasıyla ona verilen hareket tepkisinin başlaması arasında geçen süredir. Işık yandığında göz bunu algılar, sinyal sinirlerle beyne gider. Beyin karar verir ve parmak kaslarına "bas" komutu gönderir.

Bu zincirin her halkası birkaç on milisaniye sürer. Basit bir ışık uyarısına tepki süresi çoğu insanda 200-300 ms arasındadır. Yorgunluk, dikkat dağınıklığı ve uykusuzluk bu süreyi uzatır. Alıştırma ise biraz kısaltabilir.

Hangi malzemeler gerekir?

Reaksiyon süresi oyunu için bir Arduino Uno, bir LED, bir 220 Ω direnç, bir buton, breadboard ve jumper kablolar yeterlidir. Sonuçlar bilgisayardaki Seri Monitör'de görünür.

Malzeme listesi

MalzemeAdetNe işe yarar?
Arduino UNO R31Rastgele bekler, süreyi ölçer
5 mm kırmızı LED1"Şimdi bas" işaretini verir
220 Ω direnç1LED akımını sınırlar
6x6 mm tact buton1Oyuncunun bastığı tuştur
830 pin breadboard1Lehimsiz bağlantı yapılır
Erkek-erkek jumper kablo5-6Parçaları karta bağlar

LED'den geçen akım yaklaşık (5 − 2) / 220 ≈ 14 mA olur; bu değer hem LED hem Arduino pini için güvenlidir. Hesabın ayrıntısı LED direnci hesaplama yazısında.

Devre nasıl kurulur?

LED, 220 Ω direnç üzerinden D7 pinine; buton ise D2 pini ile GND arasına bağlanır. Buton için dış direnç gerekmez, çünkü kod Arduino'nun iç pull-up direncini açar.

  1. Breadboard'un mavi (−) hattını Arduino'nun GND pinine bağlayın.
  2. D7 pininden çıkan kabloyu 220 Ω direncin bir ucuna takın.
  3. Direncin diğer ucunu LED'in uzun bacağına (anot) bağlayın. LED'in kısa bacağını (katot) GND hattına takın.
  4. Butonun bir bacağını D2 pinine, çapraz karşısındaki bacağını GND hattına bağlayın.
  5. USB kablosunu takın, kodu yükleyin ve Seri Monitör'ü 9600 baud hızında açın.

Oyun nasıl çalışır?

Oyun her turda dört aşamadan geçer: hazırlık, rastgele bekleme, LED'in yanması ve butona basılmasıyla süre ölçümü.

  1. Hazırlık: Seri Monitör'de "Hazir ol" yazar ve 1 saniye beklenir.
  2. Rastgele bekleme: Arduino 2.000 ile 5.000 ms arasında rastgele bir süre seçer. Bu sırada butona basılırsa "Erken bastiniz" yazar ve tur geçersiz olur.
  3. Işık: Bekleme bitince LED yanar ve o anın zamanı t0 olarak kaydedilir.
  4. Ölçüm: Butona basıldığı an süre = millis() − t0 hesaplanır ve ekrana yazılır.
Reaksiyon süresi oyunu zaman çizelgesi: önce 1 saniye hazır ol, sonra 2 ile 5 saniye arası rastgele bekleme; bu sırada butona basılırsa erken basma sayılır ve tur geçersiz olur; LED D7 pininde yanar ve t0 kaydedilir; buton D2 pininde pull-up ile HIGH, basılınca LOW olur ve t1 kaydedilir; süre t1 eksi t0 örnekte 245 ms; altta LED 220 Ω dirençle D7'ye, buton D2 ile GND arasına bağlı; beş turun ortalaması 1.205 / 5 = 241 ms
LED rastgele 2-5 saniye sonra yanar; süre, LED'in yandığı andan (t0) butona basılana (t1) kadar millis() ile ölçülür.

Bekleme süresinin rastgele olması çok önemlidir. Süre hep aynı olsaydı oyuncu ışığı beklemeden, zamanı tahmin ederek basardı. O zaman tepki değil tahmin ölçülürdü. Erken basma kontrolü de aynı nedenle vardır: ışık yanmadan basan oyuncu tepki vermemiş, şans denemiştir.

Reaksiyon süresi kodu nasıl yazılır?

Kod, random() ile bekleme süresini seçer, bekleme sırasında butonu kontrol eder ve millis() ile milisaniye hassasiyetinde ölçüm yapar.

const byte LED = 7, BUTON = 2;

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(BUTON, INPUT_PULLUP);
  Serial.begin(9600);
  randomSeed(analogRead(A0));   // boştaki A0'dan rastgele başlangıç
}

void loop() {
  Serial.println(F("Hazir ol..."));
  delay(1000);
  unsigned long bekle = random(2000, 5001);   // 2-5 saniye
  unsigned long basla = millis();
  while (millis() - basla < bekle) {
    if (digitalRead(BUTON) == LOW) {          // ışıktan önce basıldı
      Serial.println(F("Erken bastiniz! Tur gecersiz."));
      while (digitalRead(BUTON) == LOW) {}    // bırakılmasını bekle
      delay(1000);
      return;                                 // yeni tura başla
    }
  }
  digitalWrite(LED, HIGH);
  unsigned long t0 = millis();
  while (digitalRead(BUTON) == HIGH) {}       // basılmasını bekle
  unsigned long sure = millis() - t0;
  digitalWrite(LED, LOW);
  Serial.print(F("Tepki suresi: "));
  Serial.print(sure);
  Serial.println(F(" ms"));
  while (digitalRead(BUTON) == LOW) {}
  delay(2000);
}

millis(), Arduino açıldığından beri geçen süreyi milisaniye olarak verir. İki okuma arasındaki fark, aradaki süreyi verir. randomSeed(analogRead(A0)) satırı, boştaki A0 pininin dalgalanan değerini başlangıç noktası yapar. Bu satır olmasaydı Arduino her açılışta aynı "rastgele" sayı sırasını üretirdi.

Sınıf istatistiği nasıl yapılır?

Sınıf istatistiği için her öğrenci 5 geçerli tur oynar, ölçümler tabloya yazılır ve her öğrencinin ortalaması, en iyi ve en kötü süresi hesaplanır. Erken basılan turlar tabloya yazılmaz, sadece sayısı not edilir.

Öğrenci1. tur2. tur3. tur4. tur5. turOrtalamaErken basma
Örnek245230260220250241 ms1
Öğrenci A…………………
Öğrenci B…………………

Ortalama, ölçümlerin toplamının ölçüm sayısına bölünmesiyle bulunur. Örnek satırda (245 + 230 + 260 + 220 + 250) / 5 = 1.205 / 5 = 241 ms'dir. Tek bir ölçüm şanstan etkilenebilir; ortalama daha güvenilirdir. Sınıfın bütün ortalamalarını küçükten büyüğe sıralayıp bir sütun grafiği çizebilirsiniz.

Karşılaştırma için bir değişken seçin: baskın el ile diğer el, sabah ile öğleden sonra ya da sessiz ortam ile gürültülü ortam. Her seferinde yalnızca bir koşulu değiştirin; diğer her şey aynı kalsın.

Hangi güvenlik kurallarına dikkat edilmeli?

Oyun 5 V ile çalıştığı için güvenlidir; yine de şu kurallara uyun:

  • Devreyi yalnızca bilgisayarın USB çıkışından ya da USB powerbank'tan besleyin. 220V şebeke elektriğine hiçbir şey bağlamayın.
  • Projeyi bir öğretmen ya da yetişkin gözetiminde kurun.
  • LED'i dirençsiz bağlamayın; LED ve Arduino pini zarar görebilir.
  • Butona çok sert vurmayın. Breadboard ve buton bacakları zorlanır, kablolar yerinden çıkar.
  • Işığa duyarlılığı olan arkadaşlarınız için yanıp sönen ışıklı oyunlarda dikkatli olun; rahatsızlık hisseden kişi oyunu bıraksın.

Ödevinizi nasıl sunarsınız?

Ödevinizi, oyunu canlı oynatıp sınıfın ölçümlerinden hazırladığınız tablo ve grafikle bir soruya cevap vererek sunabilirsiniz.

  • Soru: "Baskın elimizle daha mı hızlı tepki veririz?"
  • Hipotez: "Baskın elin tepki süresi daha kısadır."
  • Deney: En az 10 öğrenci, iki elle de 5'er geçerli tur oynasın.
  • Analiz: Her öğrenci için iki ortalamayı yan yana yazın ve farkı hesaplayın.
  • Sonuç: Hipotezin doğrulanıp doğrulanmadığını ve erken basma sayılarını yorumlayın.

Sunumda LED'i ve butonu bir kutunun üzerine yerleştirip Seri Monitör'ü projeksiyona yansıtın. Öğretmeninizin de oynamasını istemek dikkat çeker. Projeye ikinci bir buton ekleyip iki oyunculu yarışma da yapabilirsiniz; daha fazla fikir için öğrenciler için Arduino proje fikirleri yazısına bakın. Büyük tuşlar için push buton kategorisine bakabilirsiniz.

Sık sorulan sorular

Ölçüm ne kadar hassastır?

Ölçüm yaklaşık 1-2 ms hassasiyetindedir. millis() milisaniye adımlarıyla sayar ve kod butonu sürekli kontrol ettiği için basışı hemen yakalar. Asıl belirsizlik insandan gelir: aynı kişi art arda turlarda 30-50 ms farklı sonuçlar alabilir. Bu yüzden tek ölçüm yerine en az 5 ölçümün ortalamasını kullanmak gerekir. Butonun mekanik yapısı da birkaç milisaniyelik gecikme ekleyebilir.

100 ms'nin altında süre çıkarsa ne demektir?

100 ms'nin altındaki bir süre büyük olasılıkla gerçek bir tepki değil, tahmindir. Oyuncu, ışığın yanacağı anı sezip ışık yanmadan hemen önce basmaya başlamıştır. Beynin ışığı algılayıp kasa komut göndermesi için bu süre çok kısadır. Bu ölçümleri tabloda işaretleyin ya da 100 ms altını geçersiz sayacak bir kural ekleyin.

Sesli uyarıya tepki daha mı hızlıdır?

Evet, birçok araştırmada sesli uyarıya tepki süresi ışığa göre biraz daha kısa bulunur. Bunu kendiniz test edebilirsiniz: LED'in yanına D8 pinine bir aktif buzzer bağlayın ve kodda LED ile birlikte buzzer'ı da çalıştırın. Sonra yalnızca ışık ve yalnızca ses ile ayrı ayrı ölçüm yapıp ortalamaları karşılaştırın.

Seri Monitör'de garip karakterler çıkıyorsa ne yapmalıyım?

Seri Monitör'de garip karakterler genellikle hız ayarı yanlış olduğunda çıkar. Seri Monitör penceresinin sağ alt köşesindeki hız ayarını 9600 baud yapın; koddaki Serial.begin(9600) ile aynı olmalıdır. Türkçe karakterleri de kodda kullanmayın; "ı" yerine "i", "ş" yerine "s" yazmak sorunları önler.

Oyun bir ekranla gösterilebilir mi?

Evet, sonuçlar bilgisayar yerine bir LCD ya da OLED ekranda gösterilebilir. I2C bağlantılı 16x2 LCD yalnızca dört kabloyla bağlanır ve süreyi "245 ms" gibi gösterir. Ekranlı sürüm bilgisayarsız çalıştığı için sunumda daha kullanışlıdır. Arduino'yu bir powerbank ile beslerseniz oyunu sınıfta elden ele dolaştırabilirsiniz.

Özet

  • Reaksiyon süresi, uyarının algılanmasıyla tepkinin başlaması arasındaki süredir; ışığa tepki çoğu insanda 200-300 ms'dir.
  • LED 220 Ω ile D7'ye, buton D2 ile GND arasına bağlanır.
  • Rastgele 2-5 saniyelik bekleme, oyuncunun zamanı tahmin etmesini önler.
  • Süre, millis() ile LED'in yandığı andan butona basılana kadar ölçülür.
  • Erken basılan turlar geçersizdir; her öğrenci için 5 ölçümün ortalaması alınır.
  • Devreyi yalnızca USB ile, yetişkin gözetiminde çalıştırın.

Bu yazıdaki ürünler

Diğer yazılar