- Gerekli malzemeler:
- Hız ve Kapsanan Mesafenin Hesaplanması:
- Devre Şeması ve Donanım Kurulumu:
- Simülasyon:
- PIC16F877A'nızı programlama:
- Çalışma Açıklaması:
Bir Aracın veya bir motorun hızını / rpm'sini ölçmek, her zaman denemek için büyüleyici bir proje olmuştur. Bu nedenle, bu projede Endüstriyel hazır PIC mikro denetleyicileri kullanarak bir tane inşa edeceğiz. Hızı ölçmek için bir parça mıknatıs ve bir Hall Sensörü kullanacağız. Hızı ölçmenin başka yolları / sensörler vardır, ancak bir salon sensörü kullanmak ucuzdur ve her tür motor / araçta da kullanılabilir. Bu projeyi yaparak, proje Kesmeler ve Zamanlayıcıların kullanımını içerdiğinden, PIC16F877A'yı öğrenme becerilerimizi de geliştireceğiz. Bu projenin sonunda, herhangi bir dönen nesnenin kat ettiği hız ve mesafeleri hesaplayabilecek ve bunları 16x2 LCD ekranda görüntüleyebileceksiniz. Bu Dijital Hız Göstergesi ve PIC'li Kilometre Sayacı Devresi ile başlayalım.
Gerekli malzemeler:
- PIC16F877A
- 7805 Voltaj Regülatörü
- Hall Etkisi Sensörü (US1881 / 04E)
- 16 * 2 LCD ekran
- Küçük bir mıknatıs parçası
- Bağlantı telleri
- Kapasitörler
- Breadboard.
- Güç kaynağı
Hız ve Kapsanan Mesafenin Hesaplanması:
Devreyi gerçekten inşa etmeye başlamadan önce, bir tekerleğin hızını hesaplamak için bir Hall sensörünü ve bir mıknatısı nasıl kullanacağımızı anlayalım. Daha önce aynı Tekniği Android Akıllı Telefonda okumaları gösteren Arduino Hız Ölçer oluşturmak için kullandık.
Hall sensörü, polaritesine bağlı olarak bir mıknatısın varlığını algılayabilen bir cihazdır. Tekerleğin üzerine küçük bir mıknatıs parçası yapıştırıyoruz ve salon sensörünü, tekerlek her döndüğünde salon sensörü algılayacağı şekilde yanına yerleştiriyoruz. Daha sonra, tekerleğin bir tam dönüşü için geçen zamanı hesaplamak için PIC Mikroişlemcimizdeki zamanlayıcıların ve Kesintilerin yardımını kullanırız.
Alınan zaman bilindikten sonra aşağıdaki formülleri kullanarak RPM'yi hesaplayabiliriz.Alınan 1000 / zaman bize RPS'yi verecek ve bunu 60 ile çarpmak size RPM'yi verecektir.
rpm = (1000 / zamanlanmış) * 60;
Burada (1000 / zaman), rps'yi (Saniyedeki devir sayısı) verir ve rps'yi rpm'ye dönüştürmek için 60 ile çarpılır (Dakikadaki devir sayısı).
Şimdi aracın hızını hesaplamak için tekerleğin yarıçapını bilmemiz gerekiyor. Projemizde sadece 3 cm yarıçapı olan küçük bir oyuncak tekerlek kullandık. Ancak, ölçümleri görselleştirebilmemiz için tekerleğin yarıçapının 30cm (0.3m) olduğunu varsaydık.
Hız = (RPM (çap * Pi) / 60) olduğunu bildiğimiz için değer de 0,37699 ile çarpılır . Formüller basitleştirilmiştir.
v = yarıçap_çarkı * rpm * 0,37699;
Hızı hesapladıktan sonra, kapsanan mesafeyi de benzer bir yöntemle hesaplayabiliriz. Hall ve mıknatıs düzenlememiz sayesinde çarkın kaç kez döndüğünü biliyoruz. Tekerleğin yarıçapını 0,3 m (R) olarak varsayarak tekerleğin çevresini bulabileceğimiz tekerleğin yarıçapını da biliyoruz, Pi * R * R çevresi değerleri 0,2827 olacaktır. Bu, salon sensörünün mıknatısla her buluştuğunda 0,2827 metrelik bir mesafenin tekerlek tarafından kaplandığı anlamına gelir.
Distance_covered = distance_covered + circle_of_the_circle
Artık bu projenin nasıl çalışacağını bildiğimiz için devre şemamıza geçelim ve onu oluşturmaya başlayalım.
Devre Şeması ve Donanım Kurulumu:
Bu Hızölçer ve Kilometre Sayacı Projesinin Devre Şeması çok basittir ve bir devre tahtası üzerine inşa edilebilir. PIC eğitimlerini takip ediyorsanız, PIC mikrodenetleyicilerini öğrenmek için kullandığımız donanımı da yeniden kullanabilirsiniz. Burada aynı kullandık Kurulu perf aşağıda gösterildiği gibi biz PIC Mikrodenetleyici ile led Yanıp Sönen için inşa hangi:
PIC16F877A MCU için pin bağlantıları aşağıdaki tabloda verilmiştir.
S.No: |
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 |
33 |
RB0 / INT |
3 rd Hall sensörünün pimi |
Projenizi oluşturduktan sonra aşağıdaki resimde bunun gibi görünmelidir
Gördüğünüz gibi, Motor ve bir hall sensörünü yakın konuma yerleştirmek için iki kutu kullandım. Mıknatısı dönen nesnenize sabitleyebilir ve hall sensörünü mıknatısı algılayacak şekilde yakınına dokunmadan sabitleyebilirsiniz.
Not: Hall sensörünün kutupları vardır, bu nedenle hangi kutbu algıladığından emin olun ve uygun şekilde yerleştirin.
Ayrıca, hall sensörünün çıkış pini ile bir Çekme direnci kullandığınızdan emin olun.
Simülasyon:
Bu proje için Simülasyon Proteus kullanılarak yapılmıştır. Proje hareket eden nesneleri içerdiğinden, simülasyon kullanarak projenin tamamını göstermek mümkün değildir, ancak LCD'nin çalışması doğrulanabilir. Hex dosyasını Simülasyona yükleyin ve simüle edin. LCD'nin aşağıda gösterildiği gibi çalıştığını göreceksiniz.
Hız göstergesinin ve kilometre sayacının çalışıp çalışmadığını kontrol etmek için Hall sensörünü Mantık durum cihazı ile değiştirdim. Simülasyon sırasında, Kesmeyi tetiklemek için mantık durumu düğmesine tıklayabilir ve yukarıda gösterildiği gibi kapsanan hız ve mesafenin güncellenip güncellenmediğini kontrol edebilirsiniz.
PIC16F877A'nızı programlama:
Daha önce belirtildiği gibi, tekerleğin bir tam dönüşü için geçen süreyi hesaplamak için PIC16F877A Mikroişlemcideki zamanlayıcıların ve kesintilerin yardımını kullanacağız. Geçirgen eğitimimizde Zamanlayıcıları nasıl kullanacağımızı zaten öğrendik. Bu makalenin sonunda projenin tam kodunu verdim. Ayrıca aşağıda birkaç önemli satırı açıkladım.
Aşağıdaki kod satırları, Port D'yi LCD arabirimi için çıkış pinleri olarak ve RB0'ı harici Pin olarak kullanmak için giriş pini olarak başlatır. Ayrıca OPTION_REG kullanarak dahili kaldırma direncini etkinleştirdik ve ayrıca 64'ü ön satış olarak ayarladık. Daha sonra Zamanlayıcı ve Harici Kesmeyi etkinleştirmek için Global ve Çevresel Kesmeyi Etkinleştiriyoruz. RB0'ı harici kesme biti olarak tanımlamak için INTE yüksek yapılmalıdır. Taşma değeri 100 olarak ayarlanır, böylece her 1 milisaniye için zamanlayıcı kesinti bayrağı TMR0IF tetiklenir. Bu, milisaniye cinsinden geçen süreyi belirlemek için bir milisaniye zamanlayıcı çalıştırmaya yardımcı olacaktır:
TRISD = 0x00; // PORTD, LCD TRISB0 = 1 arabirimi için çıktı olarak ilan edildi; // RB0 pinini kesme pini olarak kullanılacak girdi olarak tanımlama OPTION_REG = 0b00000101; // Prescalar olarak Timer0 64 // PULL UP'ları da Etkinleştirir TMR0 = 100; // 1ms için zaman değerini yükleyin; delayValue yalnızca 0-256 arasında olabilir TMR0IE = 1; // PIE1 kaydında zamanlayıcı kesinti bitini etkinleştir GIE = 1; // Global Kesmeyi Etkinleştir PEIE = 1; // Çevresel Kesintiyi etkinleştirin INTE = 1; // RB0'ı harici Kesme pini olarak etkinleştirin
Aşağıdaki işlev, her Kesinti algılandığında yürütülecektir. İşlevi istediğimiz gibi adlandırabiliriz, böylece ona speed_isr () adını verdim. Bu program, biri Timer Interrupt ve diğeri External Interrupt olmak üzere iki kesinti ile ilgilenir. Bir Zamanlayıcı Kesmesi meydana geldiğinde, TMR0IF bayrağı yükselir, kesmeyi temizlemek ve sıfırlamak için, aşağıdaki kodda gösterildiği gibi TMR0IF = 0 tanımlayarak onu düşürmemiz gerekir.
void interrupt speed_isr () {if (TMR0IF == 1) // Zamanlayıcı taştı {TMR0IF = 0; // Zamanlayıcı kesinti işaretini temizle milli_sec ++; } eğer (INTF == 1) {rpm = (1000 / milli_sec) * 60; hız = 0,3 * rpm * 0,37699; // (Tekerlek yarıçapının 30cm olduğunu varsayarsak) INTF = 0; // kesme bayrağını sil milli_sec = 0; mesafe = mesafe + 028,2; }}
Benzer şekilde, Harici Kesinti oluştuğunda, INTF bayrağı yükselir, bu da INTF = 0 tanımlanarak temizlenmelidir. Zamanlayıcı Kesmesi tarafından alınan zaman izinde tutulur ve Harici Kesinti, çarkın bir tam dönüşü ne zaman tamamladığını belirler. Bu verilerle, her harici Kesmede tekerlek tarafından kapsanan hız ve mesafe hesaplanır.
Hız ve mesafe hesaplandıktan sonra, LCD işlevlerimiz kullanılarak LCD ekranda kolayca görüntülenebilir. LCD'lerde yeniyseniz, PIC16F877A MCU öğreticili arayüz LCD'imize bakın.
Çalışma Açıklaması:
Donanımı ve yazılımı hazırladıktan sonra, kodu PIC16F877A'nıza yüklemeniz yeterlidir. PIC konusunda tamamen yeniyseniz, programı bir PIC16F877A Mikroişlemciye nasıl yükleyeceğinizi öğrenmek için birkaç öğretici okumanız gerekir.
Gösterim amacıyla Motor Hızını ayarlamak için değişken bir POT kullandım. Aynı şeyi gerçek zamanlı bir uygulama bulmak için de kullanabilirsiniz. Her şey beklendiği gibi çalışıyorsa, aşağıdaki Videoda gösterildiği gibi Km / Hr cinsinden Hız ve metre cinsinden kapsanan Mesafeyi alabilmeniz gerekir.
Umarım projeyi beğenmişsinizdir ve çalıştırmışsınızdır. Değilse, şüphenizi göndermek için aşağıdaki yorum bölümünü veya forumu kullanabilirsiniz.