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

Arduino Kronometre: IR Kapılı Yarış Zamanlayıcısı

Arduino Kronometre: IR Kapılı Yarış Zamanlayıcısı
Kısa cevap

Arduino kronometre, başlangıç ve bitiş çizgisine konan iki IR sensör kapısıyla bir cismin iki çizgi arasındaki geçiş süresini milisaniye çözünürlüğüyle ölçer. Cisim birinci kapıdan geçince sayım başlar, ikinci kapıdan geçince durur ve süre OLED ekranda görünür. Kapılar arası mesafe girilirse ortalama hız da hesaplanır.

Oyuncak araba yarışında hangi araba daha hızlı? Eğik düzlemden bırakılan bilye kaç saniyede aşağı iner? Elle tutulan kronometrede tepki süremiz yüzünden onda birkaç saniyelik hata olur. Bu projede başlangıç ve bitiş çizgisine iki sensör kapısı koyarak süreyi Arduino'ya ölçtüren bir yarış zamanlayıcısı yapıyoruz. Proje fizik dersindeki hız ve hareket konularına doğrudan bağlanır; ortaokul, lise ve TÜBİTAK 4006 projeleri için uygundur.

Kapılı kronometre nedir?

Kapılı kronometre, bir cismin belirli noktalardan geçişini sensörlerle algılayıp iki geçiş arasındaki süreyi otomatik ölçen bir zamanlayıcıdır. Atletizm ve araç yarışlarındaki fotosel sistemleri aynı ilkeyle çalışır.

Elle kullanılan kronometrede insanın tepki süresi devreye girer. Çoğu insanın görsel uyarıya tepki süresi 0,2-0,3 saniye civarındadır. Bunu reaksiyon süresi oyunu projesiyle kendiniz de ölçebilirsiniz. Sensör kapıları bu hatayı ortadan kaldırır.

Hangi malzemeler gerekir?

Arduino kronometre için Arduino Uno, iki KY-032 IR engel sensörü, 0,96 inç I2C OLED ekran, bir buton, pasif buzzer ve jumper kablolar yeterlidir.

Malzeme listesi

MalzemeAdetNe işe yarar?
Arduino Uno R3 (CH340, USB kablolu)1Süreyi mikrosaniye düzeyinde tutar
KY-032 IR engel sensörü (38 kHz)2Başlangıç ve bitiş kapıları
0,96 inç I2C OLED ekran (SSD1306)1Süre ve hızı gösterir
6x6 mm tact buton1Sıfırlama
Pasif buzzer 17 mm1Bitişte bip sesi
Breadboard ve jumper kablo seti1Bağlantılar (kapılar için uzun kablo)

KY-032, önüne gelen cisimden yansıyan kızılötesi ışığı algılar ve 2-40 cm aralığında çalışır. Cisim önüne geldiğinde OUT ucu LOW olur. Kızılötesi algılamanın temelini kızılötesi IR sensör yazısında anlattık.

Devre nasıl bağlanır?

Başlangıç kapısının OUT ucu D2'ye, bitiş kapısınınki D3'e, sıfırlama butonu D4'e, buzzer D8'e, OLED ise A4 (SDA) ve A5'e (SCL) bağlanır. D2 ve D3, Arduino Uno'nun dış kesme (interrupt) pinleridir.

  1. Kapı 1 (KY-032): GND → GND, + → 5V, OUT → D2. EN ucunun yanındaki jumper takılı kalsın.
  2. Kapı 2 (KY-032): GND → GND, + → 5V, OUT → D3.
  3. OLED: VCC → 5V, GND → GND, SDA → A4, SCL → A5.
  4. Buton: bir ucu D4'e, çaprazındaki ucu GND'ye. Pasif buzzer: artı → D8, eksi → GND.
  5. Sensörleri pistin kenarına, yüzleri pistin ortasına bakacak şekilde yerleştirin. İki kapı arasındaki mesafeyi cetvelle ölçün; örneğin tam 1 metre.
  6. Elinizi sensörün 5-10 cm önüne getirin; kart üzerindeki gösterge LED'i yanmalıdır. Yanmıyorsa mesafe trimpotunu küçük adımlarla çevirin.
Arduino kronometre bağlantı şeması: üstte aralarında 1 metre bulunan iki IR kapılı pist ve bir oyuncak araba; alt kısımda Kapı 1 KY-032 sensörünün OUT ucu Arduino Uno D2 pinine, Kapı 2'ninki D3 pinine bağlı, sensörler 5V ve GND ile besleniyor; sıfırlama butonu D4'e, pasif buzzer D8'e bağlı; 0,96 inç OLED ekranın SDA ucu A4'e, SCL ucu A5'e bağlı ve ekranda 0.500 ile Hiz: 2.00 m/s yazıyor; altta micros() ile süre ve hız hesabı
Kapı 1 D2'ye, kapı 2 D3'e (kesme pinleri), sıfırlama butonu D4'e, buzzer D8'e, OLED A4 ve A5'e bağlanır; 1 m'yi 0,5 s'de geçen cisim 2 m/s hızla gider.

Kapılar Arduino'dan uzaktaysa kabloları uzatmak için ikişer jumper kabloyu uç uca takabilir ya da üç damarlı bir kablo kullanabilirsiniz.

Kronometre kodu nasıl çalışır?

Kod her iki kapıyı kesme ile dinler: birinci kapı tetiklenince micros() zamanını kaydeder, ikinci kapı tetiklenince bitiş zamanını kaydeder ve fark süreyi verir. Kesme sayesinde ekran yenilenirken bile geçiş anı kaçmaz.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Adafruit_SSD1306 oled(128, 64, &Wire, -1);
const byte KAPI1 = 2, KAPI2 = 3, BUTON = 4, BUZZER = 8;
const float MESAFE = 1.0;               // iki kapı arası mesafe (metre)

volatile unsigned long basla = 0, bitis = 0;
volatile byte durum = 0;                // 0 hazır, 1 sayıyor, 2 bitti

void kapi1() { if (durum == 0) { basla = micros(); durum = 1; } }
void kapi2() { if (durum == 1) { bitis = micros(); durum = 2; } }

void goster(float sn, const char* alt) {
  oled.clearDisplay();
  oled.setTextSize(3);
  oled.setCursor(0, 4);
  oled.print(sn, 3);                    // saniye, 3 ondalık
  oled.setTextSize(1);
  oled.setCursor(0, 40);
  oled.print(alt);
  oled.display();
}

void setup() {
  pinMode(KAPI1, INPUT_PULLUP);
  pinMode(KAPI2, INPUT_PULLUP);
  pinMode(BUTON, INPUT_PULLUP);
  oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  oled.setTextColor(SSD1306_WHITE);
  attachInterrupt(digitalPinToInterrupt(KAPI1), kapi1, FALLING);
  attachInterrupt(digitalPinToInterrupt(KAPI2), kapi2, FALLING);
}

void loop() {
  static byte eski = 255;
  byte d = durum;
  if (d == 1) {
    goster((micros() - basla) / 1e6, "Sayiyor...");
  } else if (d != eski) {
    if (d == 0) goster(0, "Hazir: kapi 1'i gecin");
    if (d == 2) {
      float sn = (bitis - basla) / 1e6;
      char satir[24], hiz[12];
      dtostrf(MESAFE / sn, 4, 2, hiz);
      snprintf(satir, sizeof(satir), "Hiz: %s m/s", hiz);
      goster(sn, satir);
      tone(BUZZER, 2000, 200);
    }
  }
  eski = d;
  if (digitalRead(BUTON) == LOW) { durum = 0; delay(300); }   // sıfırla
}

Kod "Adafruit SSD1306" ve "Adafruit GFX" kütüphanelerini kullanır. Kapılar arasındaki mesafe farklıysa MESAFE değerini metre cinsinden değiştirin; örneğin 50 cm için 0.5 yazın. OLED'in kullanımı için OLED ekran SSD1306 yazısına bakabilirsiniz.

Süreden hız nasıl hesaplanır?

Ortalama hız, kapılar arasındaki mesafenin geçiş süresine bölünmesiyle bulunur: v = mesafe / süre. Sonucu km/sa'e çevirmek için m/s değeri 3,6 ile çarpılır.

Kapılar arasıÖlçülen süreHız (m/s)Hız (km/sa)
1 m2,000 s0,501,8
1 m1,000 s1,003,6
1 m0,500 s2,007,2
1 m0,250 s4,0014,4
0,5 m0,250 s2,007,2

Bu yöntem ortalama hızı verir; cisim iki kapı arasında hızlanıyor ya da yavaşlıyorsa anlık hız farklı olabilir. Eğik düzlem deneyinde kapıları farklı noktalara koyarak cismin aşağı indikçe hızlandığını gösterebilirsiniz.

Kronometre ne kadar hassas ölçer?

Arduino Uno'nun micros() sayacı 4 mikrosaniye adımla ilerler; ancak sensörün tepki gecikmesi nedeniyle pratik doğruluk birkaç milisaniye düzeyindedir. İki kapıda aynı model sensör kullanıldığında gecikmeler büyük ölçüde birbirini götürür.

Ölçümü en çok etkileyen şey sensörlerin ayarıdır: iki kapının algılama mesafesini aynı yapın ve cismin iki kapının önünden aynı uzaklıkta geçmesini sağlayın. Güneş ışığı kızılötesi içerdiği için ölçümleri iç mekânda yapın. micros() yaklaşık 70 dakikada sıfırlandığı için tek ölçüm bu süreden kısa olmalıdır.

Hangi güvenlik kurallarına dikkat edilmeli?

Kronometre USB'den 5V ile çalışır ve güvenli bir projedir; yine de şu kurallara uyun:

  • Devreyi bilgisayarın USB çıkışından, USB powerbank'tan ya da en çok 12V'luk bir adaptörden besleyin. 220V şebeke elektriğine hiçbir şey bağlamayın.
  • Uzun kabloları yürüme yolundan geçirmeyin ya da bantla yere sabitleyin; takılıp düşme riski oluşur.
  • Rampa ve pist yaparken maket bıçağı ve sıcak silikonu öğretmen ya da yetişkin gözetiminde kullanın.
  • Bilye ve oyuncak arabaların piste dışarı fırlamaması için pistin kenarlarına bariyer yapın.

Ödevinizi nasıl sunarsınız?

Ödevinizi, aynı ölçümü hem elle kronometreyle hem kapılı kronometreyle yapıp iki sonucu karşılaştırarak sunabilirsiniz.

  • Problem: "Elle tutulan kronometre ne kadar hata yapar?"
  • Deney: Bir oyuncak arabayı aynı rampadan 5 kez bırakın; her seferinde iki yöntemle süre ölçüp tabloya yazın.
  • Hesap: İki yöntemin ortalamasını ve en büyük-en küçük farkını bulun; v = mesafe / süre ile hızı hesaplayın.
  • Rapor: Bağlantı şemasını, ölçüm tablosunu ve hız grafiğini ekleyin.
  • Geliştirme: Üçüncü bir kapı ekleyip ivmeyi hesaplamayı ya da en iyi süreyi EEPROM'a kaydetmeyi önerin.

Sık sorulan sorular

Kronometre kendiliğinden başlıyorsa ne yapmalıyım?

Sensör, karşısındaki bir duvarı ya da pist kenarını cisim sanıyor olabilir. Kart üzerindeki gösterge LED'i cisim yokken yanıyorsa algılama mesafesini trimpotla kısaltın ya da sensörün karşısını açık bırakın. Parlak beyaz yüzeyler kızılötesini daha çok yansıttığı için karşıya koyu renkli bir karton koymak da yardımcı olur.

İnsan koşusunda kullanılabilir mi?

KY-032'nin algılama mesafesi en çok 40 cm olduğu için geniş bir koşu yolunda güvenilir değildir; koşucunun sensöre çok yakın geçmesi gerekir. Koşu ölçümü için yolun iki yanına kurulan ışın kesme kapıları, örneğin düşük güçlü lazer ve LDR ya da kızılötesi verici-alıcı çiftleri daha uygundur.

Neden kesme (interrupt) kullanılıyor?

Kesme, pin durumu değiştiği anda ana programı durdurup kısa bir işlevi hemen çalıştırır. OLED ekranı yenilemek birkaç on milisaniye sürer; kod pinleri loop() içinde okusaydı geçiş anını bu kadar geç fark edebilirdi. Kesmede zaman, cisim kapıya geldiği anda kaydedilir.

Ekran yerine Seri Monitör kullanılabilir mi?

Evet, OLED olmadan da çalışır. goster işlevinin içindeki OLED satırlarını Serial.print ile değiştirin ve setup() içine Serial.begin(9600) ekleyin. Sonuçlar bilgisayardaki Seri Monitör'de görünür; ölçüm sonuçlarını tabloya kopyalamak da kolaylaşır.

Özet

  • Arduino kronometre, iki IR sensör kapısı arasındaki geçiş süresini otomatik ölçer.
  • Bağlantı: kapı 1 → D2, kapı 2 → D3 (kesme pinleri), buton D4, buzzer D8, OLED A4 ve A5.
  • Ortalama hız v = mesafe / süre ile bulunur; 1 m'yi 0,5 s'de geçen cisim 2 m/s, yani 7,2 km/sa gider.
  • Pratik doğruluk birkaç milisaniyedir; elle kronometrenin 0,2-0,3 s tepki hatası ortadan kalkar.
  • Devre USB'den 5V ile çalışır; 220V kullanılmaz ve kablolar yürüme yolundan uzak tutulur.

Bu yazıdaki ürünler

Diğer yazılar

11 Kasım 20266 dk okuma

Pense Çeşitleri: Yan Keski, Kargaburun ve Kombine Pense

Pense çeşitleri arasında seçim işe göre yapılır: tel ve komponent bacağı kesmek için yan keski, dar alanda tutmak ve bükmek için kargaburun,...

Devamını oku →
11 Kasım 20267 dk okuma

Işık Takip Eden Robot Yapımı: Arduino, LDR ve L298N

Işık takip eden robot, önüne takılan iki LDR ile hangi tarafın daha aydınlık olduğunu ölçüp tekerleklerini o yöne süren bir Arduino projesid...

Devamını oku →
11 Kasım 20266 dk okuma

İzoleli Tornavida ve 1000V VDE El Aletleri Nedir?

İzoleli tornavida, IEC 60900 (EN 60900) standardına göre 1000V AC ve 1500V DC gerilime kadar yalıtım için test edilmiş ve üzerinde çift üçge...

Devamını oku →
11 Kasım 20267 dk okuma

ESP8266 Hava Durumu Ekranı: NodeMCU, OLED ve Open-Meteo

ESP8266 hava durumu ekranı, NodeMCU kartının Wi-Fi ile internete bağlanıp Open-Meteo servisinden anlık sıcaklık, nem, rüzgâr ve hava durumu...

Devamını oku →
11 Kasım 20266 dk okuma

Havya Ucu Çeşitleri ve Bakımı: Konik, Keski, Bıçak

Havya ucu, lehimlenecek noktanın boyutuna göre seçilir: ince SMD ve sık bacaklar için konik (I), genel THT lehim için keski (D) ya da eğik k...

Devamını oku →
11 Kasım 20266 dk okuma

Ultrasonik Theremin Projesi: HC-SR04 ile Elle Müzik

Ultrasonik theremin, HC-SR04 sensörüyle elinizin uzaklığını ölçüp bu mesafeyi ses frekansına çeviren bir Arduino projesidir. El sensöre yakl...

Devamını oku →