- Gerekli malzemeler:
- Devre şeması:
- HC-SR04 modülü gerçekte nasıl çalışır:
- İki Ultrasonik sensör (HC-SR04) arasındaki ölçüm mesafesi:
- Verici Sensör Programı:
- Alıcı Sensörü Programı:
- Çalışma:
- Doğaçlama Fikir - sensörü bilinen bir mesafe kullanarak kalibre etmek:
Ultrasonik sensör (HC-SR04), bir nesnenin belirli bir noktaya olan mesafesini bulmak için yaygın olarak kullanılır. Bunu Arduino ile yapmak oldukça kolay oldu ve kod da oldukça basit. Ancak bu yazıda, bu popüler HC-SR04 sensörleri ile farklı bir şey deneyeceğiz. İki Ultrasonik sensör arasındaki mesafeyi hesaplamaya çalışacağız , yani bir sensörü verici, diğer sensörü alıcı görevi görecek şekilde yapacağız. Bunu yaparak, birçok ultrasonik alıcı kullanarak bir vericinin konumunu izleyebiliriz, bu izleme nirengi olarak adlandırılır ve otomatik yerleştirme robotları, bagaj takipçileri ve diğer benzer uygulamalar için kullanılabilir. İki ABD sensörü arasındaki mesafeyi bulma oldukça basit bir görev gibi görünebilir, ancak bu projede tartışılan birkaç zorlukla karşılaştım.
Bu makalede tartışılan teknik, oldukça doğru değildir ve değişiklik yapılmadan herhangi bir gerçek sistemde yararlı olmayabilir. Bu dokümantasyon sırasında benimki kadar yakın sonuç alan kimseyi bulamadım, bu yüzden onu nasıl çalıştırdığıma dair görüşlerimi paylaştım, böylece bunu deneyen insanların tekerleği yeniden icat etmesine gerek kalmadı.
Gerekli malzemeler:
- Arduino (2Nos) - Herhangi bir model
- HCSR04 Modülü (2Nos)
Devre şeması:
Bir US (Ultrasonic) sensörünü verici, diğerini alıcı olarak yapacak olsak da, sensörlerin dört pininin hepsini Arduino ile bağlamak zorunludur. Neden yapmalıyız? Bunun daha fazlası daha sonra tartışılacak, ancak şimdilik devre şeması aşağıdaki gibi olacak
Gördüğünüz gibi hem Verici hem de alıcı için devre şeması aynıdır. Ayrıca şunları da kontrol edin: Arduino Ultrasonik Sensör Arayüzü
HC-SR04 modülü gerçekte nasıl çalışır:
Devam etmeden önce , HC-SR04 sensörünün nasıl çalıştığını anlayalım. Aşağıdaki zamanlama şeması, çalışmayı anlamamıza yardımcı olacaktır.
Sensörün, zamanlama diyagramında gösterildiği gibi mesafeyi ölçmek için kullanılan iki iğneli Tetik ve Yankı vardır. İlk önce ölçümü başlatmak için vericiden bir Ultrasonik dalga göndermeliyiz, bu, tetik pimini 10uS için yüksek ayarlayarak yapılabilir. Bu yapılır yapılmaz, verici pimi 8 sonik patlama ABD dalgası gönderecektir. Bu ABD dalgası geri dönen bir nesneye çarpacak ve alıcı tarafından alınacaktır.
Burada zamanlama diyagramı, alıcının dalgayı aldıktan sonra, Echo pininin, dalganın ABD sensöründen geçmesi ve sensöre geri dönmesi için geçen süreye eşit bir süre boyunca yükseğe çıkmasını sağlayacağını göstermektedir. Bu zamanlama diyagramı doğru görünmüyor.
Sensörümün Tx (verici) kısmını kapattım ve Yankı darbesinin yükselip yükselmediğini kontrol ettim ve evet yükseliyor. Bu, Yankı darbesinin ABD (ultrasonik) dalgasının kendisi tarafından alınmasını beklemediği anlamına gelir. ABD dalgasını ilettikten sonra yükselir ve dalga geri dönene kadar yüksek kalır. Bu yüzden doğru zamanlama diyagramı aşağıda gösterildiği gibi olmalıdır (Zayıf yazma becerilerim için özür dilerim)
HC-SR04'ün yalnızca Verici olarak çalışmasını sağlamak:
Bir HC-SR04'ün yalnızca verici olarak çalışmasını sağlamak oldukça basittir. Zamanlama diyagramında gösterildiği gibi, Tetik pimini çıkış pini olarak bildirmeniz ve 10 Mikrosaniye boyunca yüksek kalmasını sağlamanız gerekir. Bu, Ultrasonik dalga patlamasını başlatacaktır. Dolayısıyla, dalgayı ne zaman iletmek istersek, sadece aşağıda kodun verildiği Verici sensörünün tetik pimini kontrol etmeliyiz.
HC-SR04'ün yalnızca Alıcı olarak çalışmasını sağlama:
Zamanlama diyagramında gösterildiği gibi, tetik pimi ile ilgili olduğu için Echo piminin yükselişini kontrol edemiyoruz. Dolayısıyla, HC-SR04'ün yalnızca alıcı olarak çalışmasını sağlamanın bir yolu yok. Ancak sensörün Verici kısmını sadece bantla (aşağıdaki resimde gösterildiği gibi) kapatarak veya ABD dalgası Verici muhafazasının dışına çıkamaz ve Yankı pimi bu ABD dalgasından etkilenmeyecektir.
Şimdi, yankı pimini yükseğe çıkarmak için bu sahte tetik pimini 10 Mikrosaniye kadar yükseğe çekmemiz gerekiyor. Bu Alıcı sensörü, Verici sensörü tarafından iletilen ABD dalgasını aldığında, yankı pini düşük olacaktır.
İki Ultrasonik sensör (HC-SR04) arasındaki ölçüm mesafesi:
Şimdiye kadar bir sensörün verici, diğer sensörün alıcı olarak çalışmasını nasıl sağlayacağımızı anladık. Şimdi, ultrasonik dalgayı verici sensöründen iletip alıcı sensörle almalı ve dalganın vericiden alıcıya geçmesi için geçen süreyi kontrol etmeliyiz kolay değil mi? Ama ne yazık ki !, burada bir sorunumuz var ve bu işe yaramayacak.
Verici modülü ve Alıcı modülü birbirinden çok uzaktır ve alıcı modül, verici modülünden ABD dalgasını aldığında, vericinin bu belirli dalgayı ne zaman gönderdiğini bilemeyecektir. Başlangıç zamanını bilmeden geçen zamanı ve dolayısıyla mesafeyi hesaplayamayız. Bu sorunu çözmek için alıcı modülün Yankı darbesinin, Verici modülü ABD dalgasını ilettiği anda tam olarak yüksek olması gerekir. Başka bir deyişle, Verici modül ve alıcı modül aynı anda tetiklenmelidir. Bu, aşağıdaki yöntemle elde edilebilir.
Yukarıdaki diyagramda Tx, Verici sensörünü ve Rx, Alıcı sensörünü temsil eder. Gösterildiği gibi, Verici sensörü, ABD dalgalarını bilinen bir periyodik gecikmeyle iletecek, tek yapması gereken bu.
Alıcı sensöründe, tam olarak verici pimi yükseldiğinde tetik pimini bir şekilde yükseğe çıkarmamız gerekir. Bu nedenle, başlangıçta, alıcıların Tetiklemesini yüksek gitmesi için rastgele yaparız, bu da yankı pimi düşene kadar yüksek kalacaktır. Bu eko pini, yalnızca vericiden bir ABD dalgası aldığında azalacaktır. Dolayısıyla, düşer düşmez Verici sensörünün henüz tetiklendiğini varsayabiliriz. Şimdi, bu varsayımla yankı azalır azalmaz bilinen gecikmeyi bekleyebilir ve ardından alıcıların tetikleyicisini tetikleyebiliriz. Bu, hem Vericinin hem de alıcının tetikleyicisini kısmen senkronize eder ve dolayısıyla pulseIn () kullanarak anlık yankı darbesi süresini okuyabilir ve mesafeyi hesaplayabilirsiniz.
Verici Sensör Programı:
Verici modülü için eksiksiz program sayfanın altında bulunabilir. Verici sensörünü periyodik aralıklarla tetiklemekten başka bir şey yapmaz.
digitalWrite (trigPin, YÜKSEK); gecikme Mikrosaniye (10); digitalWrite (trigPin, DÜŞÜK);
Bir sensörü tetiklemek için tetik pimini 10uS boyunca yüksek kalması için yapmalıyız. Aynısını yapmak için kod yukarıda gösterilmiştir
Alıcı Sensörü Programı:
Alıcı sensörde, sensörün Verici gözünü daha önce tartışıldığı gibi kukla yapmak için kapattık. Şimdi, iki sensör arasındaki mesafeyi ölçmek için yukarıda belirtilen tekniği kullanabiliriz. Programın tamamı bu sayfanın altında verilmiştir. Aşağıda birkaç önemli satır açıklanmıştır
Trigger_US (); while (digitalRead (echoPin) == HIGH); gecikme Mikrosaniye (10); Trigger_US (); süre = pulseIn (echoPin, HIGH);
Başlangıçta ABD sensörünü Trigger_US () işlevini kullanarak tetikleriz ve ardından bir while döngüsü kullanarak yankı pini yüksek kalana kadar bekleriz. Düştüğü zaman önceden belirlenmiş süre kadar bekleriz, bu süre deneme yanılma ile belirlenebilecek 10 ila 30 mikrosaniye arasında bir yerde olmalıdır (Veya aşağıda verilen doğaçlama fikri kullanabilirsiniz). Bu gecikmeden sonra aynı işlevi kullanarak ABD'yi tekrar tetikleyin ve ardından dalganın süresini hesaplamak için pulseIn () işlevini kullanın.
Şimdi aynı eski formülleri kullanarak mesafeyi aşağıdaki gibi hesaplayabiliriz
mesafe = süre * 0,034;
Çalışma:
Bağlantıları programda açıklandığı gibi yapın. Alıcı sensörün Tx kısmını resimde gösterildiği gibi kapatın. Daha sonra aşağıda verilen Verici kodunu ve alıcı kodunu sırasıyla verici ve alıcı Arduino'ya yükleyin. Alıcı modülün seri monitörünü açın ve aşağıdaki videoda gösterildiği gibi görüntülenen iki modül arasındaki mesafeyi fark etmelisiniz.
Not: Bu yöntem yalnızca bir ideolojidir ve doğru veya tatmin edici olmayabilir. Ancak daha iyi sonuçlar almak için aşağıdaki doğaçlama fikri deneyebilirsiniz.
Doğaçlama Fikir - sensörü bilinen bir mesafe kullanarak kalibre etmek:
Şimdiye kadar garip bir şekilde anlatılan yöntem tatmin edici görünüyor ama yine de projem için yeterliydi. Ancak bu yöntemin dezavantajlarını ve bunların üstesinden gelmenin bir yolunu da paylaşmak isterim. Bu yöntemin önemli bir dezavantajı, alıcının Yankı piminin, Verici sensörü ABD dalgasını ilettikten hemen sonra düşük düştüğünü varsaymamızdır, bu doğru değildir, çünkü dalganın vericiden alıcıya gitmesi biraz zaman alacaktır. Bu nedenle, vericinin Tetikleyicisi ve alıcının tetikleyicisi mükemmel bir şekilde senkronize olmayacaktır.
Bunun üstesinden gelmek için sensörü başlangıçta bir bilgi mesafesi kullanarak kalibre edebiliriz. Mesafe biliniyorsa, ABD dalgasının vericiden alıcıya ulaşması için geçen süreyi bileceğiz. Bu zamanı aşağıda gösterildiği gibi Del (D) olarak alalım.
Şimdi, Vericinin tetikleyicisiyle senkronize olması için Alıcının Tetik pimini ne kadar süre sonra tam olarak bileceğiz. Bu süre Bilinen Gecikme (t) - Del (D) ile hesaplanabilir. Zaman sınırlamaları nedeniyle bu fikri test edemedim, bu yüzden ne kadar doğru çalışacağından emin değilim. Bu yüzden denerseniz, sonuçları yorum bölümünden bana bildirin.