Arduino mesafe sensörü olarak HC-SR04 kullanırken Arduino, Trig pinine ölçümü başlatan kısa bir tetikleme darbesi gönderir. Sensör ultrasonik bir dalga yollar, yani nesneden yansıyıp geri dönecek yüksek frekanslı bir ses sinyali üretir; Arduino da Echo pinindeki HIGH seviyenin ne kadar sürdüğünü, yani yankı süresini ölçer.
Bu süre tek yönlü mesafe değildir: dalga nesneye gider ve sensöre geri döner. Arduino, geçen zamanı ses hızına dayalı yaklaşık bir hesapla mesafeye çevirir. Gidiş ve dönüş birlikte ölçüldüğü için temel hesap mantığı yaklaşık mesafe = (yankı süresi × ses hızı) / 2 şeklindedir.
HC-SR04 ile Mesafe Ölçümü Nasıl Çalışır?
HC-SR04, VCC, GND, Trig ve Echo pinleri bulunan bir ultrasonik mesafe ölçüm modülüdür. Modül, Trig pininden gelen tetiklemeyle ultrasonik bir ses darbesi gönderir ve bu darbenin nesneden yansıyarak geri dönmesini bekler. HC-SR04 teknik dokümanında ölçümü başlatmak için Trig girişine en az 10 mikrosaniyelik HIGH darbesi verilmesi tanımlanır.
Çalışma akışını şu dört adımda düşünebilirsin:
- Arduino, Trig pinini kısa süreliğine HIGH seviyeye çıkarır. Bu sinyal, sensöre yeni bir ölçüm başlatması gerektiğini bildirir.
- HC-SR04, tetikleme sonrasında ultrasonik dalga gönderir.
- Dalga bir nesneye çarparsa sensöre doğru yansır. Sensör, yankının geri dönmesiyle Echo pininde bir HIGH sinyali oluşturur.
- Arduino, Echo pininin HIGH kaldığı süreyi ölçer. Bu süre, ultrasonik dalganın nesneye gidip sensöre dönmesi için geçen toplam zamanı temsil eder.
Echo süresini doğrudan santimetre olarak okuyamazsın. Süre uzadıkça dalganın gidip gelmesi daha uzun sürmüş demektir. Arduino bu zamanı ses hızıyla ilişkilendirir, toplam yolu hesaplar ve gidiş ile dönüş birlikte ölçüldüğü için sonucu ikiye böler. Böylece sensör ile nesne arasındaki yaklaşık uzaklık elde edilir. Nesnenin konumu, yüzey yapısı ve yansımayı etkileyen koşullar ölçüm sonucunu değiştirebileceğinden, değeri uygulamanın ihtiyacına göre yorumlamak gerekir.
VCC, GND, Trig ve Echo Bağlantısı Nasıl Yapılır?

Bu örnekte kart olarak Arduino Uno R3, Trig için D9 ve Echo için D10 kullanılmıştır. HC-SR04 dokümanında VCC için 5 V besleme, GND için toprak, Trig için tetikleme girişi ve Echo için TTL seviyeli çıkış tanımlanır. Arduino Uno R3 de 5 V çalışma gerilimine, 5V ve GND güç pinlerine ve D9 ile D10 gibi dijital pinlere sahiptir. Bu nedenle aşağıdaki bağlantı, Arduino Uno R3 ile 5 V beslemeli HC-SR04 için uygun bir başlangıç düzenidir.
Basit yön mantığı şöyledir: Trig komutu Arduino'dan sensöre gider, Echo cevabı sensörden Arduino'ya gelir. Bağlantıyı kurarken sensör üzerindeki pin etiketlerini esas al.
| Sensör pini | Örnek Arduino bağlantısı | İşlev |
|---|---|---|
| VCC | 5V | Sensöre besleme sağlar. |
| GND | GND | Arduino ile ortak toprak oluşturur. |
| Trig | D9 | Ölçümü başlatan tetikleme sinyalini alır. |
| Echo | D10 | Yankı süresini temsil eden sinyali Arduino'ya iletir. |
Kabloları bağladıktan sonra kodda kullanılan TRIG_PIN değerinin D9'u, ECHO_PIN değerinin ise D10'u gösterdiğini kontrol et. D9 veya D10 yerine başka dijital pin seçersen hem kablo bağlantısını hem de kodda karşılık gelen pin değerini birlikte değiştirmelisin. Kablo D10'da kalırken kodda farklı bir Echo pini tanımlanırsa Arduino sensörden gelen sinyali doğru girişte aramaz.
Bağlantı öncesi kısa kontrol listesi:
- VCC'nin Arduino'nun 5V pinine, GND'nin Arduino'nun GND pinine bağlandığını kontrol et.
- Sensör ile Arduino arasında ortak GND bağlantısı olduğundan emin ol.
- Dupont kablolarının gevşek olmadığını ve sensör üzerindeki pin adlarının doğru okunduğunu kontrol et.
- Kullandığın modülün besleme koşullarını ve Arduino kartının giriş seviyelerini birlikte değerlendir.
Çalışan Arduino Kodu: pulseIn ve Santimetre Hesabı

Arduino önce Trig pinine kısa bir LOW beklemesinin ardından 10 mikrosaniyelik HIGH darbesi gönderir. HC-SR04 bu tetiklemeyle ultrasonik sinyal üretir ve yankı geldiğinde Echo pinini HIGH seviyede tutar. pulseIn() fonksiyonu, Echo pinindeki bu HIGH sürenin uzunluğunu mikrosaniye cinsinden ölçer.
const byte TRIG_PIN = 9;
const byte ECHO_PIN = 10;
const float WARNING_DISTANCE_CM = 20.0;
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
digitalWrite(TRIG_PIN, LOW);
Serial.begin(9600);
}
void loop() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
unsigned long duration = pulseIn(ECHO_PIN, HIGH, 30000UL);
if (duration == 0) {
Serial.println("Olcum alinamadi");
} else {
float distanceCm = duration / 58.0;
Serial.print("Mesafe: ");
Serial.print(distanceCm, 1);
Serial.println(" cm");
if (distanceCm < WARNING_DISTANCE_CM) {
Serial.println("Uyari: Nesne yaklasiyor");
}
}
delay(100);
}
pulseIn(ECHO_PIN, HIGH, 30000UL) satırındaki üçüncü parametre, fonksiyonun yankı darbesini bekleyeceği süreyi mikrosaniye cinsinden sınırlar. Bu süre içinde ölçülebilir bir HIGH darbesi başlamazsa fonksiyon 0 döndürebilir. Böylece Arduino, yanıt gelmediğinde uzun süre beklemek yerine ölçümü geçersiz kabul eder.
duration değeri 0 değilse, süre 58.0 değerine bölünerek yaklaşık santimetre hesabı yapılır. Bunun nedeni, ses dalgasının sensörden nesneye gidip tekrar sensöre dönmesidir. Ölçülen süre tek yönlü değil, gidiş dönüş süresidir. HC-SR04 teknik kılavuzunda da mikrosaniye değerini santimetreye çevirmek için yaklaşık olarak 58'e bölme yöntemi verilir.
Geçerli bir okumada Seri Monitör'de Mesafe: 34.7 cm benzeri bir satır görünür. Ölçüm değeri 20 santimetrenin altına düşerse bunun altında Uyari: Nesne yaklasiyor mesajı yazdırılır. Yankı alınamazsa mesafe hesabına geçilmez ve Olcum alinamadi mesajı gösterilir.
Seri Monitör Testi ve Mini Park Sensörü Uyarısı
- Kodu Arduino'ya yükle ve yükleme tamamlandıktan sonra Seri Monitör'ü aç.
- Seri Monitör iletişim hızını kodda kullanılan 9600 baud değeriyle aynı yap.
- Sensörün karşısına düz bir nesne yerleştir. Nesne ile sensör arasındaki mesafeyi bir cetvelle yaklaşık olarak kontrol edebilirsin.
- Nesneyi yavaşça yaklaştırıp uzaklaştırırken Seri Monitör'deki değerleri izle. Nesne yaklaştıkça ölçüm değerinin genel olarak azalması beklenir.
İlk denemede şu kısa kontrol listesini kullan:
- Doğru Arduino kartı ve doğru port seçili mi?
- Seri Monitör 9600 baud ile açıldı mı?
- Arduino ile HC-SR04 arasında ortak GND bağlantısı var mı?
- Trig bağlantısı kodda belirtilen 9 numaralı pinle, Echo bağlantısı 10 numaralı pinle eşleşiyor mu?
- Seri Monitör'de
Mesafe: ... cmbiçiminde geçerli bir ölçüm görülüyor mu?
Bu örnek, mini park sensörü mantığını yalnızca Seri Monitör üzerinden gösterir. Ölçüm değeri örnekteki 20 santimetrelik eşik değerinin altına indiğinde Arduino sadece Uyari: Nesne yaklasiyor mesajını yazdırır. Herhangi bir buzzer, LED veya motor kontrolü eklenmediği için fiziksel bir sesli uyarı oluşmaz.
Yüzeyin konumu, açısı ve yankının sensöre dönüş biçimi okumaları etkileyebilir. Bu nedenle tek bir değeri kesin sonuç olarak yorumlamak yerine birkaç ardışık okumadaki genel değişime bakmak daha sağlıklıdır. Olcum alinamadi mesajı görüldüğünde bunu 0 santimetre olarak değerlendirme. Kod, duration == 0 durumunda mesafe hesabını yapmadan ölçümü geçersiz kabul eder.
Sabit, Yanlış, Boş ve Dalgalı Ölçümler Nasıl Teşhis Edilir?
HC-SR04 ölçümünde sorunu bulmak için önce bağlantıyı, sonra pin tanımlarını, ardından Echo sinyalini ve son olarak ölçüm ortamını kontrol et. Bu sıra, aynı anda birden fazla noktayı değiştirmeden sorunun kaynağını daraltmana yardımcı olur.
Ölçüm sürekli aynı değerde kalıyorsa
Seri Monitör'de değer hiç değişmiyorsa önce Trig pinine gönderilen kısa darbenin kodda gerçekten üretildiğini kontrol et. Ardından TRIG_PIN ve ECHO_PIN sabitlerinin fiziksel bağlantıyla aynı olduğundan emin ol. Son olarak VCC, GND, Trig ve Echo kablolarını söküp yeniden takarak temaslarını kontrol et. Düzeltme sırası, Trig darbesi, kodda tanımlı pinler ve kablo bağlantısı olmalıdır.
Değer ölçülüyor ama beklenenden yanlışsa
Önce sensör üzerindeki pin sırasını Arduino kodundaki bağlantıyla karşılaştır. Daha sonra duration değerinin mikrosaniye cinsinden süre olduğunu ve santimetre hesabında doğru birim dönüşümünün kullanıldığını kontrol et. Arduino ile sensörün GND bağlantısının ortak olması da önemlidir. Düzeltme sırası, pin sırası, birim hesabı ve ortak GND kontrolü şeklinde ilerlemelidir.
Echo alınamıyor veya sonuç 0 geliyorsa
pulseIn() belirlenen timeout süresi içinde tamamlanmış bir Echo darbesi alamazsa 0 döndürebilir. Önce sensörün beslemesini, sonra Echo kablosunun doğru Arduino pinine bağlı olduğunu ve bu pinin giriş olarak ayarlandığını kontrol et. Sonuç hâlâ 0 ise bu değeri geçerli bir mesafe gibi hesaplamak yerine Echo alınamadığını kabul ederek bağlantıyı yeniden incele.
Ölçüm değerleri dalgalanıyorsa
Nesnenin konumunu sabitle ve sensöre karşı mümkün olduğunca tutarlı bir yüzey kullan. Eğik veya düzensiz yüzeyler, sesin farklı yönlere yansımasına neden olabilir. Kablo temaslarını da kontrol et. Art arda okumaları tek tek kesin sonuç kabul etmek yerine aynı koşullarda birkaç değeri birlikte gözlemle.
Kısa teşhis akışı
- Önce VCC, GND, Trig ve Echo bağlantılarını kontrol et.
- Sonra kodda tanımlı Trig ve Echo pinlerini fiziksel bağlantıyla karşılaştır.
- Ardından Echo süresinin geçerli olup olmadığını ve timeout sonucunun 0 verip vermediğini incele.
- Son olarak nesnenin konumunu, yüzeyini, kablo temasını ve art arda okumaları değerlendir.
Bu sıralı kontrol, HC-SR04 ile Arduino arasındaki sorunu adım adım daraltarak ölçümleri daha sağlıklı yorumlamana yardımcı olur.