3.2- MicroPython’da Ultrasonik Algılayıcı ile Mesafe Ölçümü

Sınıfları daha iyi anlama adına yukarıda yazdığımız karakter LCD kütüphanesiyle beraber bir algılayıcıyı uygulamamıza ekleyelim ve bunun için de bir sınıf oluşturalım. Pek çok alanda kullanılan uygun fiyatlı bir algılayıcı olarak ultrasonik algılayıcı kullanabiliriz. Piyasada HC-SR04 ve daha kalitelisi HY-SRF05 modelleri oldukça yaygın olup pek çok öğrenci projesinde ve robot araçlarda kullanılmaktadır.

HC-SR04 ultrasonik algılayıcının datasheetine aşağıdan erişebilirsiniz.

https://cdn.sparkfun.com/datasheets/Sensors/Proximity/HCSR04.pdf

Bu algılayıcıyı programda kullanmadan önce datasheette bizim için önemli noktaları tespit etmemiz gereklidir. Çalışma gerilimi (Working Voltage) örneğin devre kurmada gerekli iken tetikleme sinyali süresi (Trigger Input Signal) programlamada önem arz etmektedir. Bu tarz modülleri ve kendine has iletişimi olan dijital entegreleri kullanırken zamanlama diyagramına özellikle dikkat etmek gereklidir.

Diyagramdan anlaşıldığı üzere bizim 10 mikrosaniyelik bir tetikleme sinyali göndermemiz gereklidir. Sonrasında Echo ayağından geri dönen sinyal ile arasında geçen zamanı ölçüp bunun sesin yayılma hızı ile oranladığımızda mesafeyi ölçebiliriz. Modül 5 voltta çalıştığı için Echo çıkışını gerilim bölücü direnç kullanarak 3.3 volta çevirmemiz gerekecektir. Bunun için 1k ve 2k ya da 2.7k ve 4.7k dirençleri kullanabiliriz. Trigger ayağında böyle bir çevirim yapmamıza gerek yoktur. 5V TTL mantık seviyesi 3.3V gerilimi 1 olarak algılamaktadır.

Devreyi önceki LCD devresinin üzerine ultrasonik algılayıcıyı ekleyerek tamamlayabilirsiniz. Ekrana yazdırmak için bir önceki uygulamada kullandığımız lcdsinifli.py modülünü kullanacağız. Bu modülü bir kere karta yüklemeniz yeterlidir.

Biz HC-SR04’ü kullanacağımız bir sınıf oluşturmadan önce bu modül için neler yapmamız gerektiğinin bir listesini oluşturalım.

· Ayak tanımlarını yapacağımız bir yapıcı.
· Datasheette yazan azami 400cm mesafenin gecikmesini hesapla. (4/343 = 11.6 milisaniye)
· Sesin bir milimetre gitmesi için gereken süreyi hesapla. (0.3432 mm/us -> 2.91us)
· Sinyali gönderip bekleyeceğimiz bir metot oluştur.
· Geçen süreye göre mesafeyi hesaplayıp geri döndüren bir metot oluştur.

Burada yapmamız gereken işler için uygun MicroPython fonksiyonları olup olmadığına, donanımın yeterli gelip gelmediğine de dikkat etmemiz gereklidir. Önceki bölümde yer alan frekans okuma uygulamasında time_pulse_us() metodu sinyalin uzunluğunu hesaplamamıza yarıyordu. Bu iş için kullanmamız gereken metot tam olarak bu olsa gerektir. Trigger’da tetikleme sinyali göndermek içinse bir dijital çıkış vermek ve belli bir süre beklemek yeterlidir.

Programı denediğinizde doğruya yakın değerler elde ettiğinizi göreceksiniz. Neden tamamen doğru değerler elde edemediğimizin başlıca sebeplerinden biri ses dalgalarının çarptığı yüzeylere göre çeşitli miktarda dağılmaya ve sapmaya uğramasıdır. Örneğin bir defter kapağı gibi düz bir zemini dik bir şekilde yaklaştırdığınızda isabetli bir ölçüm elde etseniz de kumaş yüzeylerde veya açılı tutulan cisimlerde ölçüm doğru olmayacaktır.

--

--