Daha önceki derslerde mesafe ölçmek için ses hızıyla matematiksel hesaplamalar yapmıştık. Ancak karmaşık projelerde (örneğin otonom robotlarda) bu hesaplamalar işlemciyi yorar ve hatalara sebep olabilir. Şimdi bu işin profesyonel yolunu: NewPing Kütüphanesi'ni öğreneceğiz.

1. Manuel Kod vs NewPing

Standart pulseIn() komutu işlemciyi bloke eder (cevap gelene kadar donar). NewPing kütüphanesi ise çok daha akıllıdır.

Eski Yöntem (Manuel)
  • ❌ Uzun kod satırları gerekir.
  • ❌ Ses hızı formülünü ezberlemeniz gerekir.
  • ❌ Sensör yanıt vermezse Arduino donabilir (Lag).
  • ❌ Maksimum mesafeyi sınırlamak zordur.
Yeni Yöntem (NewPing)
  • ✅ Tek satır kodla ölçüm: sonar.ping_cm()
  • ✅ Arka planda optimize edilmiştir, hızlıdır.
  • ✅ Maksimum mesafe sınırı koyabilirsiniz.
  • ✅ Çoklu sensör kullanımına uygundur.

2. Sensörün Gözleri ve Kör Nokta

HC-SR04 modülü, bir hoparlör (T) ve bir mikrofondan (R) oluşur. Ancak bilmeniz gereken kritik bir detay var: Kör Nokta.

T R 2 cm KÖR BÖLGE GÜVENLİ ÖLÇÜM ALANI (2cm - 400cm arası) Nesne
Dikkat: Sensörün burnunun dibindeki (0-2cm) cisimleri algılayamaz. Çünkü ses daha gönderilirken yankı geri döner, sensörün kafası karışır.

3. Bağlantı Şeması

  • 🔌 VCC ➔ 5V
  • 🔌 GND ➔ GND
  • 🔌 Trig ➔ Pin 12
  • 🔌 Echo ➔ Pin 11

4. Yazılım (NewPing)

🛠️ Kütüphane Kurulumu
  1. Arduino IDE > Araçlar > Kütüphaneleri Yönet.
  2. Arama kutusuna NewPing yazın.
  3. Tim Eckel tarafından yapılan kütüphaneyi kurun.
NewPing_Ornek.ino C++
#include <NewPing.h>

// Pin Tanımları
#define TRIGGER_PIN  12
#define ECHO_PIN     11
#define MAX_DISTANCE 200 // Maksimum ölçüm mesafesi (cm). 
                             // Bundan uzağı ölçmeye çalışıp vakit kaybetmez.

// NewPing nesnesini oluştur (Kurulum)
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

void setup() {
  Serial.begin(9600);
  Serial.println("NewPing Test Basliyor...");
}

void loop() {
  delay(50); // Ölçümler arası kısa bekleme (En az 29ms önerilir)

  // TEK SATIRDA ÖLÇÜM!
  // ping_cm() fonksiyonu mesafeyi cm cinsinden verir.
  // Eğer menzil dışındaysa "0" döndürür.
  unsigned int mesafe = sonar.ping_cm();

  Serial.print("Mesafe: ");
  Serial.print(mesafe);
  Serial.println(" cm");
  
  // Basit Park Sensörü Mantığı
  if (mesafe > 0 && mesafe < 10) {
    Serial.println("⚠️ DIKKAT! CARPACAKSIN!");
  }
}
        

5. Sensör Kararlılığı

Üç sebebi olabilir:
  1. Cisim MAX_DISTANCE ayarından (Örn: 200cm) daha uzaktadır.
  2. Cisim çok yakındır (2cm'den az).
  3. Cisim ses dalgalarını yansıtmıyordur (Kumaş, sünger veya açılı yüzey). Ses yarasalarda olduğu gibi açılı yüzeyden sekip başka yöne gidebilir.