Bu eğitimde, mesafeyi ölçmek için bir devreyi tartışacağız ve tasarlayacağız. Bu devre, ultrasonik sensör “HC-SR04” ile AVR mikrodenetleyicisi arasında arayüz oluşturarak geliştirilmiştir. Bu sensör, bir yüzeye vurduktan sonra ses geri yansıdığında elde ettiğiniz bir şey olan "ECHO" adı verilen bir teknik kullanır.
Ses titreşimlerinin katılardan geçemeyeceğini biliyoruz. Öyleyse ne olur, bir ses kaynağı titreşimler oluşturduğunda, havada 220 metre / saniye hızla ilerler. Kulağımızla karşılaştıklarında bu titreşimleri ses olarak tanımlıyoruz. Daha önce de belirtildiği gibi bu titreşimler katıdan geçemez, bu nedenle duvar gibi bir yüzeye çarptığında, aynı hızda yankı denilen kaynağa geri yansıtılır.
Ultrasonik sensör "HC-SR04", yankıya dayalı olarak mesafeye orantılı bir çıkış sinyali sağlar. Buradaki sensör, bir tetikleyici verdikten sonra ultrasonik aralıkta bir ses titreşimi üretir, bundan sonra ses titreşiminin geri dönmesini bekler. Artık parametrelere, ses hızına (220m / s) ve yankının kaynağa ulaşması için geçen süreye bağlı olarak, mesafeye orantılı çıkış darbesi sağlar.
Şekilde gösterildiği gibi, ilk önce mesafeyi ölçmek için sensörü başlatmamız gerekir, yani sensörün tetik piminde 10uS'den fazla bir YÜKSEK mantık sinyali, ardından sensör tarafından bir yankıdan sonra bir ses titreşimi gönderilir, sensör şunları sağlar genişliği kaynak ile engel arasındaki mesafeyle orantılı olan çıkış pinindeki bir sinyal.
Bu mesafe, uzaklık (cm cinsinden) = darbe çıkışı genişliği (uS cinsinden) / 58 olarak hesaplanır.
Burada sinyalin genişliği, uS'nin katları (mikro saniye veya 10 ^ -6) olarak alınmalıdır.
Gerekli Bileşenler
Donanım: ATMEGA32, Güç kaynağı (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), 1000uF kapasitör, 10KΩ direnç (2 parça), HC-SR04 sensörü.
Yazılım: Atmel studio 6.1, progisp veya flash magic.
Devre Şeması ve Çalışma Açıklaması
Burada, LCD veri portuna (D0-D7) bağlanmak için PORTB kullanıyoruz. ATMEGA32A'nın SİGORTA BİTLERİ ile çalışmak istemeyenler PORTC'yi kullanamaz, çünkü PORTC, yalnızca FUSEBITS değiştirilerek devre dışı bırakılabilen özel bir iletişim türü içerir.
Devrede, sadece iki kontrol pini aldığımı gözlemliyorsunuz, bu daha iyi anlama esnekliği sağlıyor. Kontrast biti ve READ / WRITE sık kullanılmadığından toprağa kısa devre yapılabilir. Bu, LCD'yi en yüksek kontrast ve okuma moduna getirir. Karakterleri ve verileri buna göre göndermek için sadece ENABLE ve RS pinlerini kontrol etmemiz gerekiyor.
LCD için yapılan bağlantılar aşağıda verilmiştir:
PIN1 veya VSS toprağa
PIN2 veya VDD veya VCC ila + 5v güç
Zemine PIN3 veya VEE (yeni başlayanlar için en iyi maksimum kontrastı verir)
PIN4 veya RS (Kayıt Seçimi) uC'nin PD6'sına
PIN5 veya RW (Okuma / Yazma) zemine (LCD'yi okuma moduna geçirerek kullanıcı için iletişimi kolaylaştırır)
UC'nin PD5'ine PIN6 veya E (Etkinleştir)
UC'nin PIN7 veya D0 ila PB0'ı
UC'nin PIN8 veya D1 ila PB1'i
UC'nin PIN9 veya D2 ila PB2'si
UC'nin PIN10 veya D3 ila PB3'ü
UC'nin PIN11 veya D4 ila PB4'ü
UC'nin PIN12 veya D5 ila PB5'i
UC'nin PIN13 veya D6 ila PB6'sı
UC'nin PIN14 veya D7 ila PB7'si
Devrede 8 bit iletişim (D0-D7) kullandığımızı görebilirsiniz ancak bu zorunlu değildir ve 4 bit iletişim (D4-D7) kullanabiliriz ancak 4 bit iletişim programı ile biraz karmaşık hale gelir. Yukarıdaki tabloda gösterildiği gibi, kontrol için 8 pin ve 2 pin olmak üzere 10 pin LCD'yi kontrolöre bağlıyoruz.
Ultrasonik sensör dört pimli bir cihazdır, PIN1-VCC veya + 5V; PIN2-TETİKLEME; PIN3- ECHO; PIN4- ZEMİN. Tetik pimi, sensöre mesafeyi ölçmesini söylemek için tetik verdiğimiz yerdir. Eko, mesafeyi darbe genişliği şeklinde aldığımız çıkış pinidir. Buradaki yankı pini, denetleyiciye harici bir kesinti kaynağı olarak bağlanır. Bu yüzden sinyal çıkışının genişliğini elde etmek için sensörün yankı pini INT0 (kesinti 0) veya PD2'ye bağlanır.
1. En az 12uS için tetik pimini yukarı çekerek sensörü tetikleyin.
2. Yankı yükseldiğinde, harici bir kesinti alıyoruz ve bir kesinti tetiklendikten hemen sonra yürütülen ISR'de (Interrupt Service Routine) bir sayacı (bir sayacı etkinleştirerek) başlatacağız.
3. Yankı tekrar azaldığında bir kesinti üretilir, bu sefer sayacı durduracağız (sayacı devre dışı bırakacağız).
4. Yankı pininde yüksekten alçağa bir darbe için, bir sayıcı başlattık ve durdurduk. Şimdi sayı olarak yankı genişliğine sahip olduğumuzdan, bu sayı mesafeyi elde etmek için belleğe güncellenir.
5. Cm cinsinden mesafeyi elde etmek için bellekte daha fazla hesaplama yapacağız.
6. Mesafe 16x2 LCD ekranda görüntülenir.
Yukarıdaki özellikleri ayarlamak için aşağıdaki kayıtları ayarlayacağız:
Yukarıdaki üç kayıt, kurulumun çalışması için uygun şekilde ayarlanacak ve bunları kısaca tartışacağız, MAVİ (INT0): Bu bit, harici interrupt0'ı etkinleştirmek için yüksek olarak ayarlanmalıdır, bu pin ayarlandığında, PIND2 pinindeki mantık değişikliklerini algılayabiliriz.
KAHVERENGİ (ISC00, ISC01): Bu iki bit, kesme olarak kabul edilecek olan PD2'de uygun mantık değişikliği için ayarlanır.
Daha önce de söylediğimiz gibi saymaya başlamak ve durdurmak için bir kesintiye ihtiyacımız var. Böylece ISC00'ü bir olarak ayarladık ve INT0'da LOW'dan HIGH'a bir mantık olduğunda bir kesme elde ederiz; YÜKSEK ila DÜŞÜK bir mantık olduğunda başka bir kesinti.
KIRMIZI (CS10): Bu bit basitçe sayacı etkinleştirmek ve devre dışı bırakmak içindir. Diğer bit CS10, CS12 ile birlikte çalışmasına rağmen. Burada herhangi bir ön ölçekleme yapmıyoruz, bu yüzden onlar için endişelenmemize gerek yok.
Burada hatırlanması gereken bazı önemli noktalar şunlardır:
ATMEGA32A'nın 1MHz olan dahili saatini kullanıyoruz. Burada ön ölçeklendirme yok, karşılaştırma eşleme kesintisi oluşturma rutini yapmıyoruz, bu nedenle karmaşık kayıt ayarları yok.
Sayım sonrası sayma değeri 16 bit TCNT1 yazmacında saklanır.
Ayrıca bu projeyi arduino ile kontrol edin: Arduino kullanarak mesafe ölçümü
Programlama Açıklaması
Mesafe Ölçüm sensörünün çalışması aşağıdaki C programında adım adım anlatılmıştır.
#include // pinler üzerinde veri akışı kontrolünü etkinleştirmek için başlık #define F_CPU 1000000 // denetleyiciye kristal frekansı takılı #include