Kerem Öz

Mesafe Sensörleri Rehberi: Kızılötesi, Ultrasonik ve ToF Karşılaştırması

HC-SR04, Sharp GP2Y0A21, VL53L0X ve TFmini karşılaştırması: ölçüm mantığı, menzil, yanıt süresi, yüzey rengi ve ortam ışığı etkisi, robot projelerinde doğru sensör seçimi.

Mesafe Sensörleri Rehberi: Kızılötesi, Ultrasonik ve ToF Karşılaştırması
Fig. 1 Mesafe Sensörleri Rehberi: Kızılötesi, Ultrasonik ve ToF Karşılaştırması

Bir robotun çevresini algılaması, çoğu zaman tek bir soruya indirgenir: “önümdeki şey ne kadar uzakta?” Bu soruyu cevaplayan sensörler ise birbirinden çok farklı fizik prensipleriyle çalışıyor ve her birinin kendine özgü kör noktaları var.

Bu rehberde dört sensör ailesini karşılaştırıyorum: ultrasonik, kızılötesi üçgenleme, uçuş süresi (ToF) ve LiDAR. Amaç, katalog rakamlarının ötesine geçip her birinin nerede güvenilir, nerede yanıltıcı olduğunu göstermek.

Hızlı karşılaştırma

SensörPrensipMenzilYanıtYaklaşık maliyet
HC-SR04Ultrasonik yankı2–400 cm~60 msÇok düşük
Sharp GP2Y0A21IR üçgenleme10–80 cm~38 msDüşük
Sharp GP2Y0A02IR üçgenleme20–150 cm~38 msOrta
VL53L0XLazer ToF3–200 cm~20 msOrta
VL53L1XLazer ToF4–400 cm~20 msOrta-yüksek
TFmini-SLazer ToF10–1200 cm~10 msYüksek

Tablodaki rakamlar bir başlangıç, ama asıl soru “hangisi en iyi?” değil, “benim koşullarımda hangisi yanılmaz?” Aşağıdaki seçiciyle kendi durumunuzu işaretleyip karşılaştırabilirsiniz.

Etkileşimli sensör seçici — bu bölüm JavaScript ile çalışır.

Ultrasonik sensörler (HC-SR04)

Çalışma prensibi bir yarasanınkiyle aynı: sensör 40 kHz’lik kısa bir ses darbesi gönderir, yankının dönmesini bekler ve geçen süreden mesafeyi hesaplar.

float mesafeOlc() {
  digitalWrite(TRIG, LOW);  delayMicroseconds(2);
  digitalWrite(TRIG, HIGH); delayMicroseconds(10);
  digitalWrite(TRIG, LOW);

  long sure = pulseIn(ECHO, HIGH, 30000UL);   // 30 ms zaman aşımı
  if (sure == 0) return -1;                   // yankı gelmedi

  return sure * 0.0343 / 2.0;   // cm — sesin hızı 343 m/s
}

Güçlü yanları

  • Yüzey rengi fark etmez. Siyah bir robot da beyaz duvar kadar iyi algılanır.
  • Ortam ışığından etkilenmez. Karanlıkta da güneşte de aynı çalışır.
  • Çok ucuz ve her yerde bulunur.

Zayıf yanları

  • Yavaş. Sesin gidip gelmesi zaman alır. 4 metrelik ölçüm tek başına 23 ms sürer.
  • Geniş koni. Yaklaşık 15–30 derecelik bir alanı tarar; nesnenin tam olarak nerede olduğunu söylemez.
  • Eğik yüzeylerde kör. Ses ışık gibi yansır; yüzey 45 dereceden fazla eğikse yankı başka yöne gider ve sensör “boşluk” görür.
  • Yumuşak malzemeleri göremez. Kumaş, sünger ve halı sesi yutar.
  • Birbirini karıştırır. Yan yana iki HC-SR04 aynı anda tetiklenirse birinin sesi diğerine yankı gibi görünür.
Saha notu

Birden fazla ultrasonik sensör kullanıyorsanız hepsini aynı anda tetiklemeyin; sırayla okuyun ve her ölçümden sonra en az 60 ms bekleyin. Aksi halde sensörler birbirinin yankısını okur ve tamamen anlamsız değerler üretir.

Kızılötesi üçgenleme (Sharp)

Sharp sensörler mesafeyi süreyle değil açıyla ölçer. Bir IR LED dar bir ışık huzmesi gönderir; nesneden yansıyan ışık, sensörün içindeki küçük bir çizgisel dizinin farklı bir noktasına düşer. Nesne yaklaştıkça düşme noktası kayar.

Bu prensibin doğrudan sonucu: çıkış doğrusal değildir. Gerilim–mesafe eğrisi hiperbolik bir şekle sahiptir.

// GP2Y0A21 için yaklaşık dönüşüm (10–80 cm aralığında)
float sharpMesafe() {
  int ham = analogRead(SHARP_PIN);
  float volt = ham * (5.0 / 1023.0);
  if (volt < 0.4) return 80;          // menzil dışı
  return 27.86 * pow(volt, -1.15);    // cm
}

On santimetre tuzağı

Sharp sensörlerin en tehlikeli özelliği bu: minimum menzilin altında eğri tersine döner. 5 cm mesafedeki bir nesne, 25 cm mesafedeki nesneyle neredeyse aynı gerilimi üretir.

Robot bu durumda “nesne uzakta” diye düşünüp tam gaz ilerler ve çarpar. Çözüm koddan çok mekaniktir: sensörü, hiçbir nesnenin minimum menzilden yakın olamayacağı bir konuma yerleştirin (örneğin robotun ön yüzeyinden 10 cm içeri).

Değerlendirme

  • Artı: Ultrasoniğe göre hızlı, dar ışın, eğik yüzeylerde daha iyi.
  • Eksi: Doğrusal olmayan çıkış, siyah yüzeylerde menzil düşüşü, güneş ışığında bozulma, gürültülü analog sinyal.

Analog gürültü için basit bir hareketli ortalama neredeyse zorunludur:

#define ORNEK 5
int gecmis[ORNEK];
int idx = 0;

int filtreliOku() {
  gecmis[idx] = analogRead(SHARP_PIN);
  idx = (idx + 1) % ORNEK;
  long toplam = 0;
  for (int i = 0; i < ORNEK; i++) toplam += gecmis[i];
  return toplam / ORNEK;
}
Ultrasonik, kızılötesi ve ToF mesafe sensörleri bir çalışma masasında yan yana
Şek. 2 — Üç farklı ölçüm prensibi, üç farklı kör nokta. Doğru sensör, projenin zayıf noktasına göre seçilir.

Uçuş süresi sensörleri (ToF)

ToF sensörler bir lazer darbesi gönderir ve fotonların geri dönme süresini ölçer. Ses yerine ışık kullandıkları için çok hızlıdırlar ve ışın son derece dardır (yaklaşık 25 derece, VL53L1X’te ayarlanabilir).

#include <VL53L0X.h>
VL53L0X sensor;

void setup() {
  Wire.begin();
  sensor.init();
  sensor.setTimeout(500);
  sensor.startContinuous();     // sürekli ölçüm modu
}

void loop() {
  uint16_t mm = sensor.readRangeContinuousMillimeters();
  if (sensor.timeoutOccurred()) { /* hata */ }
}

Güçlü yanları

  • Hızlı. 20 ms ve altı ölçüm süresi, hareketli hedef takibinde belirleyici.
  • Dar ışın. Nesnenin konumunu daha net verir; yan yana birden fazla sensörle açısal tarama yapılabilir.
  • I2C. Analog gürültü sorunu yok, dijital veri geliyor.
  • Küçük. Bir pul büyüklüğünde.

Zayıf yanları

  • Yüzeye duyarlı. Mat siyah bir yüzeyde menzil yarıya inebilir; cam ve parlak metal ışığı yanlış yöne yansıtır.
  • Güneş ışığında zayıflar. Doğrudan güneşte menzil ciddi biçimde düşer.
  • I2C adres çakışması. Aynı model birden fazla sensör kullanacaksanız her birini XSHUT pininden sırayla açıp adres atamanız gerekir.

Birden fazla VL53L0X kullanmak

// Tüm sensörleri kapat, sonra tek tek açıp adres ver
void sensorleriBaslat() {
  for (int i = 0; i < SENSOR_SAYISI; i++) pinMode(xshut[i], OUTPUT);
  for (int i = 0; i < SENSOR_SAYISI; i++) digitalWrite(xshut[i], LOW);
  delay(10);

  for (int i = 0; i < SENSOR_SAYISI; i++) {
    pinMode(xshut[i], INPUT);      // yüksek empedans = sensör açılır
    delay(10);
    sensor[i].init();
    sensor[i].setAddress(0x30 + i);
    sensor[i].startContinuous();
  }
}

LiDAR sensörler

TFmini gibi tek ışınlı LiDAR’lar, ToF prensibini daha güçlü bir lazer ve daha iyi optikle uygular. 12 metreye kadar ölçüm ve 100 Hz’e varan hız sunarlar.

Robotik yarışmalarında genelde aşırıdır ama otonom araç projelerinde, özellikle açık alanda çalışacak sistemlerde anlamlıdır. Dönen (2D tarayıcı) LiDAR’lar ise haritalama yapan robotlar için ayrı bir kategori.

Hangi projede hangisi

UygulamaÖnerilenSebep
Engelden kaçan robot (öğrenme)HC-SR04Ucuz, affedici, yeterli
Mini sumo rakip takibiVL53L0XHız ve dar ışın kritik
Park sensörüHC-SR04Geniş koni burada avantaj
Duvar takibiSharp / ToFDar ışın, sabit mesafe kontrolü
Otonom araç, açık alanTFmini / LiDARMenzil ve hız
Su seviyesi ölçümüHC-SR04Su yüzeyi ışığı yansıtır, sesi yansıtır
Sıra/kuyruk sayacıToFDar ışın, yanlış tetikleme az

Sensörünüzü doğrulamak

Katalog değerleri laboratuvar koşullarında ölçülür; sizin ortamınız laboratuvar değil. Sensörü kullanmadan önce yarım saat ayırıp gerçek davranışını çıkarın.

Doğrulama masası

Bir metre şerit metre, birkaç farklı yüzey (beyaz karton, siyah mat karton, alüminyum folyo, kumaş) ve bir defter yeterli. Sensörü sabitleyin, hedefi bilinen mesafelere koyun ve okumaları not edin:

Gerçek mesafeBeyaz kartonSiyah matKumaşMetal
5 cm
10 cm
25 cm
50 cm
80 cm

Bu tabloyu doldurduğunuzda üç şeyi öğrenirsiniz: sensörün gerçek menzili, hangi yüzeyde yanıldığı ve okumanın ne kadar dağıldığı. Bunlar olmadan kodunuzdaki eşik değerleri tahminden ibaret kalır.

Tekrarlanabilirlik testi

Hedefi sabit tutup 100 ölçüm alın ve dağılıma bakın. Standart sapma büyükse ya filtreleme gerekir ya da sensör o mesafede güvenilir değildir.

void dagilimOlc() {
  const int N = 100;
  long toplam = 0; int enKucuk = 9999, enBuyuk = 0;

  for (int i = 0; i < N; i++) {
    int d = mesafeOlc();
    toplam += d;
    enKucuk = min(enKucuk, d);
    enBuyuk = max(enBuyuk, d);
    delay(60);
  }
  Serial.print("Ortalama: "); Serial.print(toplam / N);
  Serial.print("  Aralik: "); Serial.print(enKucuk);
  Serial.print(" - ");        Serial.println(enBuyuk);
}

Sensör füzyonu: iki sensörü birleştirmek

Tek sensörün kör noktası varsa, ikinci bir sensör tipiyle kapatabilirsiniz. Basit ve etkili bir birleştirme kuralı şöyle çalışır:

float birlesikMesafe() {
  float tof  = tofOku();          // hızlı, hassas, siyahta zayıf
  float sonik = ultrasonikOku();  // yavaş, kaba, yüzey rengi umursamaz

  bool tofGecerli   = (tof  > 3   && tof  < 190);
  bool sonikGecerli = (sonik > 3  && sonik < 380);

  if (tofGecerli && sonikGecerli) {
    // İkisi de görüyor: birbirini doğruluyorsa ToF'a güven
    if (fabs(tof - sonik) < 15) return tof;
    return min(tof, sonik);       // uyuşmuyorsa temkinli davran
  }
  if (tofGecerli)   return tof;
  if (sonikGecerli) return sonik;
  return -1;                       // ikisi de göremiyor
}

Son satırdaki min() tercihi bilinçli: iki sensör farklı şey söylüyorsa, robotun daha yakın olanı varsayması güvenlidir. Çarpmaktansa erken yavaşlamak yeğdir.

Ne zaman gereksiz

Füzyon, karmaşıklık ve gecikme ekler. Tek bir sensör ortamınızda güvenilir çalışıyorsa ikincisini eklemeyin. Füzyonu, doğrulama masasında somut bir kör nokta bulduğunuzda düşünün.

Ölçümü güvenilir kılan üç alışkanlık

1. Aykırı değerleri atın

Tek bir hatalı okuma robotu yanlış karara sürükleyebilir. Ortanca (median) filtre, ani sıçramaları hareketli ortalamadan çok daha iyi temizler:

int ortancaOku() {
  int a = tekOlcum(), b = tekOlcum(), c = tekOlcum();
  if ((a <= b && b <= c) || (c <= b && b <= a)) return b;
  if ((b <= a && a <= c) || (c <= a && a <= b)) return a;
  return c;
}

2. Menzil dışını ayrı bir durum olarak ele alın

“Ölçüm yok” ile “çok uzak” aynı şey değildir. Ultrasonik sensörde yankı gelmemesi, nesnenin uzak olduğu kadar sesi yutan bir yüzey olduğu anlamına da gelebilir. Kodunuzda bu durumu -1 gibi ayrı bir değerle işaretleyin ve robotun buna nasıl tepki vereceğine bilinçli karar verin.

3. Sensörleri karıştırarak kullanın

Farklı prensiplerin kör noktaları farklıdır. Ultrasonik + ToF kombinasyonu, tek başına ikisinden de güvenilirdir: ToF hızlı ve hassas ölçer, ultrasonik ise ToF’un göremediği mat siyah yüzeyi yakalar.

Robot şasisine monte edilmiş üç mesafe sensörü, önden ve yanlardan bakış açısı
Şek. 3 — Sensör yerleşimi en az sensör seçimi kadar önemli. Ölçüm konileri çakışmamalı, kör açı bırakmamalı.

Sonuç

Mesafe sensörü seçerken sorulacak doğru soru “hangisi en iyi?” değil, “benim ortamımda hangisi en az yanılır?” Yüzeyler siyahsa ultrasonik, hız gerekiyorsa ToF, bütçe kritikse HC-SR04, açık alan söz konusuysa LiDAR.

Sensörlerden gelen veriyi bir kontrol döngüsüne bağlamak isterseniz PID kontrol rehberi doğal devam noktası; sensörleri bir karta bağlarken pin ve gerilim uyumu için ESP32 mi Arduino mu yazısındaki 3,3 V uyarılarına göz atın.

Frequently asked questions

HC-SR04 ile VL53L0X arasındaki fark nedir?

HC-SR04 ses dalgası kullanır: ucuzdur, yüzey rengi önemli değildir ama yavaştır (~60 ms) ve ölçüm konisi geniştir. VL53L0X lazer ışığının uçuş süresini ölçer: çok hızlıdır (~20 ms), ışını dardır, ancak siyah ve parlak yüzeylerde menzili düşer.

Ultrasonik sensör neden yanlış ölçüyor?

En yaygın sebepler: yüzeyin sensöre eğik olması (ses yansıyıp geri gelmez), yumuşak/gözenekli malzemenin sesi yutması, iki sensörün birbirini duyması ve ölçümler arası yeterli bekleme koymamak. İki ölçüm arasında en az 60 ms bırakın.

Sharp mesafe sensörü neden yakın mesafede saçmalıyor?

Sharp GP2Y0A21 üçgenleme prensibiyle çalışır ve çıkışı doğrusal değildir. Yaklaşık 10 cm’in altında gerilim eğrisi tersine döner: 5 cm ile 25 cm neredeyse aynı değeri verir. Bu yüzden sensörü fiziksel olarak, en yakın nesnenin 10 cm’den uzak kalacağı şekilde konumlandırın.

Robot için kaç mesafe sensörü gerekir?

Engelden kaçan basit bir robotta öne bakan tek sensör yeterli olabilir. Mini sumo gibi rakip takibi gereken robotlarda en az üç (sol-orta-sağ), tercihen beş sensör kullanın. Otonom araçlarda 6–8 sensörlü diziler yaygındır.

Güneş ışığı sensörleri etkiler mi?

Kızılötesi ve ToF sensörlerini belirgin şekilde etkiler; doğrudan güneş ışığında menzil ciddi düşer, hatta ölçüm imkânsızlaşır. Ultrasonik sensörler ışıktan hiç etkilenmez. Açık havada çalışacak projelerde bu tek başına belirleyici olabilir.

Comments

0

No comments yet. Be the first to comment!

Write a Comment

Your email will not be published, only the site owner can see it.