Herhangi bir projenin hayata geçmesi için sensör kullanmamız gerekir. Sensörler tüm gömülü uygulamalar için göz ve kulak görevi görür, dijital Mikroişlemcinin bu gerçek Analog dünyada gerçekte ne olduğunu anlamasına yardımcı olur. Bu eğitimde, Ultrasonik Sensör HC-SR04 ile PIC mikro denetleyicinin nasıl arayüzleneceğini öğreneceğiz.
HC-SR04, bir ultrasonik sensör olup 450cm (teorik olarak) için 2 cm arasındaki mesafe hiçbir yerinde ölçmek için kullanılabilir. Bu sensör, engel tespiti, mesafe ölçümü, çevre haritalama vb. İçeren birçok projeye uyarak kendini kanıtlamıştır. Bu makalenin sonunda, bu sensörün nasıl çalıştığını ve mesafeyi ölçmek için PIC16F877A mikrodenetleyici ile nasıl arayüz oluşturacağınızı öğreneceksiniz. LCD ekranda. Kulağa ilginç geliyor! Öyleyse başlayalım…
Gerekli malzemeler:
- Programlama ayarlı PIC16F877A MCU
- LCD 16 * 2 ekran
- Ultrasonik sensör (HC-SR04)
- Bağlantı telleri
Ultrasonik Sensör nasıl çalışır?
Daha ileri gitmeden önce, bu öğreticiyi çok daha iyi anlayabilmemiz için Ultrasonik sensörün nasıl çalıştığını bilmeliyiz. Bu projede kullanılan ultrasonik sensör aşağıda gösterilmiştir.
Gördüğünüz gibi çıkıntı gibi iki dairesel gözü ve ondan çıkan dört pimi vardır. Göze benzer iki çıkıntı Ultrasonik dalga (bundan sonra ABD dalgası olarak anılacaktır) Verici ve alıcıdır. Verici, 40Hz frekansında bir ABD dalgası yayar, bu dalga havada ilerler ve bir nesneyi algıladığında geri yansıtılır. Geri dönen dalgalar alıcı tarafından gözlemlenir. Artık bu dalganın yansıması ve geri gelmesi için harcanan zamanı ve ABD dalgasının hızının da evrensel (3400cm / s) olduğunu biliyoruz. Bu bilgileri ve aşağıdaki lise formüllerini kullanarak katedilen mesafeyi hesaplayabiliriz.
Mesafe = Hız × Zaman
Artık bir ABD sensörünün nasıl çalıştığını bildiğimize göre, dört pini kullanarak herhangi bir MCU / CPU ile nasıl arayüzlenebileceğini bize bildirin. Bu dört pim sırasıyla Vcc, Trigger, Echo ve Ground'dur. Modül + 5V üzerinde çalışır ve dolayısıyla Vcc ve toprak pimi modüle güç sağlamak için kullanılır. Diğer iki pin, MCU ile iletişim kurduğumuz I / O pinleridir. Tetik pimi bir çıkış pini olarak beyan edilmelidir ve 10us için en yüksek yapılan, 8 döngü ses patlaması gibi havaya ABD dalga iletecektir. Dalga gözlemlendiğinde, Echo pimi, sensör modülüne geri dönmek için ABD dalgası tarafından alınan tam zaman aralığı boyunca yükseğe çıkacaktır. Dolayısıyla bu Yankı pini girdi olarak ilan edilecekve pimin ne kadar yüksek olduğunu ölçmek için bir zamanlayıcı kullanılacaktır. Bu, aşağıdaki zamanlama diyagramı ile daha da anlaşılabilir.
Bu sensörün PIC ile arayüz oluşturmanın geçici bir yolunu bulduğunuzu umuyoruz. Bu eğitimde Zamanlayıcı modülünü ve LCD modülünü kullanacağız ve her ikisine de aşina olduğunuzu varsayıyorum, yoksa lütfen aşağıdaki ilgili eğiticiye geri dönün, çünkü onunla ilgili bilgilerin çoğunu atlayacağım.
- PIC Mikrodenetleyici ile LCD Arayüzü
- PIC Mikrodenetleyicide Zamanlayıcıları Anlamak
Devre şeması:
Ultrasonik Sensörün PIC16F877A ile arayüzlenmesi için eksiksiz devre şeması aşağıda gösterilmiştir:
Gösterildiği gibi, devre bir LCD ekran ve Ultrasonik sensörün kendisinden başka bir şey içermez. ABD sensörü + 5V ile çalıştırılabilir ve dolayısıyla doğrudan 7805 voltaj regülatörü tarafından çalıştırılır. Sensörün 34 pinine (RB1) bağlı bir çıkış pini (Tetik pini) ve giriş pini (Yankı pini) pim 35'e (RB2) bağlanmıştır. Tam pim bağlantısı aşağıdaki tabloda gösterilmektedir.
S.No: |
PIC Pin Numarası |
Pin Adı |
Bağlı |
1 |
21 |
RD2 |
LCD RS |
2 |
22 |
RD3 |
E / LCD |
3 |
27 |
RD4 |
D4 / LCD |
4 |
28 |
RD5 |
D5 / LCD |
5 |
29 |
RD6 |
D6 / LCD |
6 |
30 |
RD7 |
D7 / LCD |
7 |
34 |
RB1 |
ABD'nin tetikleyicisi |
8 |
35 |
RB2 |
Echo of US |
PIC Mikrodenetleyicinizi programlama:
Bu öğreticinin tam programı bu sayfanın sonunda verilmiştir, daha aşağıda kodu, anlamanız için küçük anlamlarda tam parçalar halinde açıkladım. Daha önce de belirtildiği gibi, program, önceki eğitimlerde bunları zaten ele aldığımız için bu eğitimde ayrıntılı olarak açıklanmayacak olan LCD arabirimi ve Zamanlayıcı kavramını içerir.
İçeride, ana fonksiyon IO pinlerini ve diğer kayıtları her zamanki gibi başlatmakla başlıyoruz. LCD ve US sensörü için IO pinlerini tanımlıyoruz ve ayrıca 1: 4 ön skaler üzerinde çalışacak ve dahili saati (Fosc / 4) kullanacak şekilde ayarlayarak Zamanlayıcı 1 kaydını başlatıyoruz.
TRISD = 0x00; // PORTD, LCD TRISB0 = 1 arabirimi için çıktı olarak ilan edildi; // RB0 pinini kesme pini olarak kullanılacak giriş olarak tanımlayın TRISB1 = 0; // US sensörünün tetikleme pini çıkış pini TRISB2 = 1 olarak gönderilir; // US sensörünün yankı pini giriş pini TRISB3 = 0 olarak ayarlanmıştır; // RB3, LED T1CON = 0x20 için çıkış pinidir; // 4 pres-skaler ve dahili saat
Zamanlayıcı 1, PIC16F877A'da kullanılan 16 bitlik bir zamanlayıcıdır, T1CON kaydı zamanlayıcı modülünün parametrelerini kontrol eder ve sonuç, 16 bitlik bir sonuç olduğu için TMR1H ve TMR1L'de depolanır, çünkü ilk 8, TMR1H'de depolanır ve sonraki 8 TMR1L'de. Bu zamanlayıcı sırasıyla TMR1ON = 0 ve TMR1ON = 1 kullanılarak açılabilir veya kapatılabilir.
Şimdi, zamanlayıcı kullanıma hazır, ancak ABD dalgalarını sensörden göndermemiz gerekiyor, bunu yapmak için Tetik pimini 10uS için yüksek tutmalıyız, bu aşağıdaki kodla yapılır.
Tetik = 1; __delay_us (10); Tetik = 0;
Yukarıdaki zamanlama diyagramında gösterildiği gibi, Yankı pimi dalga geri dönene kadar düşük kalacak ve daha sonra dalgaların geri dönmesi için geçen tam süre boyunca yükseğe çıkacak ve yüksek kalacaktır. Bu süre, Timer 1 modülü tarafından ölçülmelidir, bu aşağıdaki satır ile yapılabilir.
while (Echo == 0); TMR1ON = 1; while (Eko == 1); TMR1ON = 0;
Zaman ölçüldüğünde, elde edilen değer TMR1H ve TMR1L kayıtlarına kaydedilecektir, bu kayıtların 16 bitlik değeri elde etmek için toplanmaları gerekir. Bu, aşağıdaki satır kullanılarak yapılır
time_taken = (TMR1L - (TMR1H << 8));
Bu time_taken form bayt şeklinde olacaktır, gerçek zaman değerini elde etmek için aşağıdaki formülü kullanmamız gerekir.
Zaman = (16-bit kayıt değeri) * (1 / Dahili Saat) * (Ön-ölçek) Dahili Saat = Fosc / 4 Bizim durumumuzda Fosc = 20000000Mhz ve Pre-scale = 4 Bu nedenle Dahili Saatin değeri 5000000Mhz ve zaman değeri Time = (16-bit register değeri) * (1/5000000) * (4) = (16-bit register değeri) * (4/5000000) = (16-bit register değeri) * olacaktır. 0,0000008 saniye (OR) Zaman = (16-bit kayıt değeri) * 0,8 mikro saniye
Programımızda 16 bitlik yazmacın değeri, alınan zaman değişkeninde saklanır ve bu nedenle mikro saniye cinsinden alınan zamanı hesaplamak için aşağıdaki satır kullanılır.
time_taken = time_taken * 0.8;
Sonra mesafeyi nasıl hesaplayacağımızı bulmalıyız. Bildiğimiz gibi mesafe = hız * zaman. Ancak burada, dalga hem gönderme mesafesini hem de alma mesafesini kapladığı için sonuç 2'ye bölünmelidir. Dalga (ses) hızı 34000cm / s dir.
Mesafe = (Hız * Zaman) / 2 = (34000 * (16-bit kayıt değeri) * 0.0000008) / 2 Mesafe = (0.0272 * 16-bit kayıt değeri) / 2
Böylece mesafe aşağıdaki gibi santimetre olarak hesaplanabilir:
mesafe = (0,0272 * alınan zaman) / 2;
Mesafe ve alınan zamanın değerini hesapladıktan sonra bunları LCD ekranda görüntülememiz yeterlidir.
PIC ve Ultrasonik Sensör kullanarak mesafe ölçümü:
Bağlantıları yaptıktan ve kodu yükledikten sonra, deneysel kurulumunuz aşağıdaki resimde gösterildiği gibi görünmelidir.
Bu resimde gösterilen PIC Perf panosu, PIC mikrodenetleyicinin nasıl kullanılacağını öğrendiğimiz PIC eğitim serimiz için yapıldı. Tüm bu temel bilgileri atlayacağım için, Pickit 3 kullanarak bir programı nasıl yazacağınızı bilmiyorsanız MPLABX ve XC8 kullanan PIC Mikroişlemci eğitimlerine geri dönmek isteyebilirsiniz.
Şimdi sensörün önüne bir nesne yerleştirin ve nesnenin sensörden ne kadar uzakta olduğunu göstermesi gerekir. Dalganın iletilmesi ve geri dönmesi için geçen sürenin mikro saniye cinsinden görüntülendiğini de fark edebilirsiniz.
Nesneyi tercih ettiğiniz mesafede hareket ettirebilir ve LCD'de görüntülenen değeri kontrol edebilirsiniz. 0.5cm hassasiyetle 2cm'den 350cm'ye kadar olan mesafeyi ölçebildim. Bu oldukça tatmin edici bir sonuç! Umarım öğreticiden keyif almışsınızdır ve kendi başınıza bir şeyler yapmayı öğrenmişsinizdir. Herhangi bir şüpheniz varsa, bunları aşağıdaki yorum bölümüne bırakın veya forumları kullanın.
Ayrıca Ultrasonik sensörün diğer mikro denetleyicilerle arayüzünü kontrol edin:
- Arduino & Ultrasonik Sensör Bazlı Mesafe Ölçümü
- Raspberry Pi ve HCSR04 Ultrasonik Sensörü kullanarak Mesafeyi Ölçün
- HC-SR04 ve AVR Mikrodenetleyici kullanarak Mesafe Ölçümü