Arduino Reaksiyon Zamanlayıcısı: 5 Adım

Arduino Reaksiyon Zamanlayıcısı: 5 Adım

İçindekiler:

Anonim

Bu, reaksiyon hızınızı test eden eğlenceli ve bağımlılık yapan bir oyun.

Gereçler:

1. Adım: Malzemeler

Bu proje için malzeme listesi çok basittir:

  • Arduino (Uno veya diğer)
  • breadboard
  • 3 x LED (1 kırmızı, 1 sarı, 1 yeşil)
  • 3 x 220 direnç
  • 10k direnç
  • butona basınız
  • teller
  • USB kablosu (A - B)
  • Arduino IDE

Adım 2: Devreyi Kurmak

Bu proje sadece birkaç çok basit devrelere sahiptir:

  • 3 LED devresi
  • bir buton devresi

Her LED, Arduino'daki bir dijital bağlantı noktasına bağlanır, dijital bağlantı noktaları YÜKSEK veya DÜŞÜK olarak ayarlanarak ışıklar kontrol edilebilir. Her LED bir 220 rezistöre bağlanır.

Basmalı düğme dijital bir bağlantı noktasına bağlı. Düğmeye basılmadığında dijital bağlantı noktası toprağa (DÜŞÜK), düğme basıldığında dijital bağlantı noktası 5V'a (YÜKSEK) bağlanır. Bu devre 10k'lık bir direnç kullanır.

Devreyi oluştururken, düğmenin etrafında yeterince boşluk bırakmanız önemlidir, böylece erişimi kolaydır.

Adım 3: Kod

İşte yorum içermeyen kodun tamamı, girintisiz okunması biraz zor. Yorum ve girintili kodu indirebilirsiniz, bu bölümün sonunda yer almaktadır.

int ledRed = 12;

int ledSellow = 11;

int ledGreen = 10;

int düğmesi = 7;

int startTime = 0;

int endTime = 0;

int reactionTime = 0;

geçersiz kurulum () {

pinMode (ledRed, OUTPUT);

pinMode (ledSellow, ÇIKIŞ);

pinMode (ledGreen, ÇIKIŞ);

pinMode (düğme, GİRİŞ);

}

boşluk döngüsü () {

digitalWrite (ledRed, DÜŞÜK);

digitalWrite (ledSellow, DÜŞÜK);

digitalWrite (ledGreen, DÜŞÜK);

while (digitalRead (düğme) == 0) {

digitalWrite (ledRed, HIGH);

gecikme (50);

digitalWrite (ledRed, DÜŞÜK);

gecikme (50);

}

while (digitalRead (düğme) == 1) {}

digitalWrite (ledRed, HIGH);

digitalWrite (ledYellow, YÜKSEK);

digitalWrite (ledGreen, YÜKSEK);

startTime = millis ();

while (digitalRead (düğme) == 0) {}

endTime = millis ();

digitalWrite (ledRed, DÜŞÜK);

digitalWrite (ledSellow, DÜŞÜK);

digitalWrite (ledGreen, DÜŞÜK);

gecikme (500);

digitalWrite (ledRed, HIGH);

gecikme (500);

digitalWrite (ledYellow, YÜKSEK);

gecikme (500);

digitalWrite (ledGreen, YÜKSEK);

gecikme (1000);

digitalWrite (ledRed, DÜŞÜK);

digitalWrite (ledSellow, DÜŞÜK);

digitalWrite (ledGreen, DÜŞÜK);

reactionTime = endTime - startTime;

eğer (reactionTime <180) {

digitalWrite (ledGreen, YÜKSEK);

}

Başka{

eğer (reactionTime <260) {

digitalWrite (ledYellow, YÜKSEK);

}

Başka {

digitalWrite (ledRed, HIGH);

}

}

while (digitalRead (düğme) == 0) {}

while (digitalRead (düğme) == 1) {}

}

Adım 4: Test Et

Program başladığında neler olması gerektiği:

  • Oyunun başlamaya hazır olduğunu göstermek için kırmızı LED yanıp söner
  • Oyuna başlamak için düğmeye basın
  • Tüm LED'ler söner ve program rastgele bir süre bekler (1,5 - 6 saniye)
  • Tüm LED'ler yanar
  • Düğmeye mümkün olduğunca hızlı basın
  • LED'ler birer birer kapanıyor ve tekrar yanıyor
  • 1 saniye sonra 1 LED yanar
  • Yeşil: hızlı reaksiyon, sarı: ortalama reaksiyon, kırmızı: yavaş reaksiyon
  • Baştan başlamak için düğmeye tekrar basın

5. Adım: Geliştirmeler

Şu anda sadece butona basarak oyunu kolayca aldatabilirsiniz. Hile yapmamak için kodu değiştirebilir misiniz? İPUCU: rastgele zamanlayıcı sona erdiğinde düğmeye basıldığında biri hile yapıyordur

Daha doğru sonuçlar

Tepkime süresinin daha doğru okunmasını sağlayabilirsiniz:

  • gerçek reaksiyon süresini göstermek için bir ekran kullanın
  • yaklaşık reaksiyon süresine işaret etmek için bir servo motor kullanın