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.
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
- Arduino IDE > Araçlar > Kütüphaneleri Yönet.
- Arama kutusuna
NewPingyazın. - 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:
- Cisim
MAX_DISTANCEayarından (Örn: 200cm) daha uzaktadır. - Cisim çok yakındır (2cm'den az).
- 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.