İçeriğe geç

Ultrasonik Sensörlerle Mesafe Ölçümü: Bir Dost Sohbeti

Merhaba millet! Nasılsınız bakalım? Bugün size benim de bayıldığım, hem eğlenceli hem de bir o kadar da faydalı bir konudan bahsedeceğim: Ultrasonik sensörler ve mesafe ölçümü. Hani şu robotların etrafı algılamasını sağlayan, park sensörlerinde kullanılan o sihirli aletler var ya, işte onlardan! Geçenlerde bir projede kullanırken aklıma geldi, dedim ki neden bunu bir dost sohbeti tadında anlatmayayım ki? Hem hepimiz biraz daha bilgi sahibi oluruz, hem de belki sizin de aklınızda o meşhur ‘yapabilir miyim?’ sorusu uyanır.

Şimdi olayın mantığı aslında çok basit, inanılır gibi değil. Düşünün, birini çağırıyorsunuz ve sesin yankılanıp size geri dönmesini bekliyorsunuz. İşte ultrasonik sensör de tam olarak bunu yapıyor ama ses yerine yüksek frekanslı ses dalgaları gönderiyor. Bu dalgalar bir cisme çarpıp geri yansıyor ve sensör bu geri dönüşü algılıyor. Aradaki süreye bakarak da mesafeyi hesaplıyor. Ne kadar hızlı geri dönerse, cisim o kadar yakındır, mantık bu kadar basit!

Bu işin matematiği de aslında çok karmaşık değil. Sesin havada yayılma hızı bellidir, değil mi? Yaklaşık 343 metre/saniye. Sensörden çıkan ses dalgasının gidip cisme çarpıp geri dönme süresini ölçüyorsunuz. Sonra bu süreyi sesin hızına bölüp ikiye ayırıyorsunuz çünkü ses hem gidiyor hem geliyor. Yani mesafe = (ses hızı * zaman) / 2. İşte bu kadar! İnanın ki ilk öğrendiğimde ‘bu kadar mı yani?’ demiştim.

Tabi bu işin pratik uygulamaları bambaşka bir dünya. Araba park sensörleri, robotların engellerden kaçması, hatta bazıları su seviyesini ölçmek için bile kullanılıyor. Düşünsenize, bir depoya elinizi sokmadan su seviyesini ölçebiliyorsunuz. Süper değil mi?

Ama işin bu kısmı biraz daha teknikleşiyor tabi. Bu sensörler genellikle iki kısımdan oluşur: Birincisi gönderici (transmitter), ikincisi de alıcı (receiver). Gönderici, o yüksek frekanslı ses dalgalarını ‘pırt pırt’ diye yayıyor. Alıcı ise yankıyı yakalıyor. Arada bir de işlemci olması lazım ki bu süreleri ölçüp mesafeyi hesaplasın. Genelde Arduino gibi mikrodenetleyicilerle beraber kullanılıyorlar. Bu arada, benim kullandığım sensörlerin bir kısmı 4 pinliydi, bir kısmı da sadece iki pinliydi, bu da onları daha da kullanışlı hale getiriyor.

Mesela geçenlerde bir projede, Arduino ile HC-SR04 ultrasonik sensörünü kullandım. Çok popüler bir sensör kendisi. Başlangıçta işler biraz karışıktı. Kodları bir türlü oturtamadım, sürekli yanlış mesafeler okuyordum. Ya duvarı 10 metre görüyor, ya da boşluğa 5 santim diyor. Sinir bozucu olabiliyor gerçekten.

Neyse efendim, biraz kurcaladıktan, internette bir sürü kaynağa baktıktan sonra işin püf noktasını buldum. Aslında benim hatam, sensörün ‘trig’ ve ‘echo’ pinlerinin doğru şekilde tetiklenmemesinden kaynaklanıyordu. Yani göndericiye ‘hadi gönder’ komutunu veriyordum ama alıcıya ‘gelen sinyali yakala’ komutunu düzgünce iletemiyordum galiba. Bu arada, şöyle bir Google araması yaparsanız bolca örnek kod bulursunuz. Gerçi bazılarının kodları da bana biraz karmaşık geldi başta.

İşte size o zamanlar yazdığım, benim de ‘vay be!’ dediğim basit ama işe yarayan bir kod örneği. İlk başta şöyle bir şey yapmaya çalışmıştım, ama işte gördüğünüz gibi mesafeler tutmuyordu:

// YANLIŞ KOD ÖRNEĞİ (SADECE ANLATIM İÇİN, ÇALIŞMAZ) int trigPin = 9; int echoPin = 10; long sure = 0; int mesafe = 0;

void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); Serial.begin(9600); }

void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); sure = pulseIn(echoPin, HIGH); mesafe = sure * 0.034 / 2; // Sesin hızı yaklaşık 343 m/s Serial.print("Mesafe (Yanlis): "); Serial.println(mesafe); delay(500); }

Yukarıdaki kodda, trig pinini doğru tetikleyemediğim için sürekli saçma sapan değerler alıyordum. Sonra biraz daha araştırdım ve doğru yöntemi buldum. İşte şimdi çalışan, benim de severek kullandığım versiyonu:

// DOĞRU KOD ÖRNEĞİ const int trigPin = 9; const int echoPin = 10; long sure; int mesafe;

void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); Serial.begin(9600); // Seri iletişimi başlat }

void loop() { // Trig pinini kısa bir süre HIGH yapıp LOW'a çekerek ses dalgasını gönder digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); // Dalganın yayılması için yeterli süre digitalWrite(trigPin, LOW);

// Echo pininden sinyalin geri dönme süresini ölç sure = pulseIn(echoPin, HIGH);

// Mesafeyi hesapla (ses hızı yaklaşık 343 m/s) mesafe = sure * 0.034 / 2;

Serial.print("Mesafe: "); Serial.print(mesafe); Serial.println(" cm");

delay(100); // Kısa bir gecikme }

Bu kod, trig pinini doğru bir şekilde ayarlayıp echo pininden gelen süreyi ölçerek hassas mesafe değerleri veriyor. Gerçekten de aradaki fark inanılmazdı. Sanki bir anda gözlerim açılmış gibi oldu. Ne güzel değil mi? Kendi yazdığın bir kodla etrafındaki dünyayı algılayabilmek.

Bu arada, bu sensörlerin menzili de önemli bir konu. Bazıları 2 santimetreye kadar ölçüm yapabilirken, bazıları 4 metreye kadar çıkabiliyor. Kullanacağınız projeye göre doğru sensörü seçmek de işin başka bir boyutu. Yani her sensör her işe yaramıyor açıkçası.

Sonuç olarak, ultrasonik sensörler gerçekten de hem hobi projeleri hem de daha ciddi uygulamalar için harika bir araç. Biraz sabır ve doğru kod ile siz de kendi mesafe ölçer projelerinizi rahatlıkla yapabilirsiniz. İnanın ki sonuç aldığınızda hissettiğiniz o keyif bambaşka oluyor. Hatta belki de bu yazıyı okuduktan sonra siz de bir tane edinip denemek istersiniz, kim bilir?

Bu arada, bu sensörlerle ilgili daha fazla bilgiye şuralardan da ulaşabilirsiniz: Wikipedia ve YouTube’da birçok öğretici video mevcut. Merak edenler için faydalı olacaktır diye düşünüyorum.

Neyse efendim, konuyu daha fazla uzatmayayım. Ben de bu sensörlerle ilk tanıştığım zamanları hatırladım da… Tam bir acemiydim o zamanlar. Bir keresinde, bir robot projesi yapıyordum ve sensörün açısını yanlış ayarladığım için robot sürekli duvara çarpıyordu. Günlerce uğraştım, kodları değiştirdim, kabloları kontrol ettim, ama sorun hep aynıydı. Sonunda ‘tesadüfen’ sensörün tam olarak nereye baktığını fark ettim ve açısını düzelttiğim an her şey düzeldi. Kendi hatamı bulmak zaman aldı ama o anki sevinci anlatamam. İşte böyle, bazen en basit şeyler en büyük sorunları yaratabiliyor, ama sonunda başarınca da tadından yenmiyor!

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.