- Bahan yang Diperlukan:
- Mengira Kelajuan dan Jarak yang Diliputi:
- Diagram Litar dan Persediaan Perkakasan:
- Simulasi:
- Memprogram PIC16F877A anda:
- Penjelasan Kerja:
Mengukur kelajuan / rpm Kenderaan atau motor selalu menjadi projek menarik untuk kita cuba. Oleh itu, dalam projek ini kita akan membina satu menggunakan mikrokontroler PIC siap industri. Kami akan menggunakan sekeping magnet dan Hall Sensor untuk mengukur kelajuan. Terdapat cara / sensor lain untuk mengukur kelajuan tetapi, menggunakan sensor dewan adalah murah dan juga dapat digunakan pada semua jenis motor / Kenderaan. Dengan melakukan projek ini, kita juga akan meningkatkan kemahiran kita dalam mempelajari PIC16F877A kerana projek ini melibatkan penggunaan Interrupts and Timers. Pada akhir projek ini, anda akan dapat mengira kelajuan dan jarak yang dilalui oleh sebarang objek berputar dan memaparkannya pada skrin LCD 16x2. Mari mulakan dengan Speedometer Digital dan Litar Odometer ini dengan PIC.
Bahan yang Diperlukan:
- PIC16F877A
- 7805 Pengatur Voltan
- Sensor Kesan Dewan (US1881 / 04E)
- Paparan LCD 16 * 2
- Sekeping magnet kecil
- Menyambung wayar
- Kapasitor
- Papan roti.
- Bekalan kuasa
Mengira Kelajuan dan Jarak yang Diliputi:
Sebelum kita benar-benar mula membina litar, mari kita fahami bagaimana kita akan menggunakan sensor Hall dan magnet untuk mengira kelajuan roda. Sebelumnya kami telah menggunakan Teknik yang sama untuk membangun Arduino Speedometer yang memaparkan bacaan pada Telefon Pintar Android.
Sensor Hall adalah peranti yang dapat mengesan kehadiran magnet berdasarkan kekutubannya. Kami melekatkan sepotong kecil magnet pada roda dan meletakkan sensor dewan di dekatnya sedemikian rupa sehingga setiap kali roda berputar sensor dewan mengesannya. Kami kemudian menggunakan bantuan pemasa dan Gangguan pada Mikrokontroler PIC kami untuk mengira masa yang diperlukan untuk satu putaran roda yang lengkap.
Setelah masa yang diambil diketahui, kita dapat mengira RPM dengan menggunakan formula di bawah, Di mana 1000 / masa yang diambil akan memberi kita RPS dan mengalikannya lagi dengan 60 akan memberi Anda RPM
rpm = (1000 / timetaken) * 60;
Di mana (1000 / timetaken) memberikan rps (Revolusi per saat) dan dikalikan dengan 60 untuk menukar rps ke rpm (Revolusi per minit).
Sekarang untuk mengira halaju kenderaan kita harus mengetahui jejari roda. Dalam projek kami, kami telah menggunakan roda mainan kecil yang memiliki radius hanya 3cm. Tetapi, kami menganggap radius roda harus 30cm (0.3m) sehingga kami dapat memvisualisasikan bacaannya.
Nilainya juga dikalikan dengan 0.37699 kerana kita tahu bahawa Velocity = (RPM (diameter * Pi) / 60). Rumus dipermudahkan hingga
v = radius_of_wheel * rpm * 0.37699;
Setelah kita mengira halaju, kita juga dapat mengira jarak yang diliputi dengan menggunakan kaedah yang serupa. Dengan susunan Hall dan magnet kita dapat mengetahui bahawa berapa kali roda berpusing. Kami juga mengetahui radius roda, dengan menggunakan mana kita dapat menemukan keliling roda, dengan anggapan jari-jari roda menjadi 0.3m (R) nilai lilitan Pi * R * R akan menjadi 0.2827. Ini bermaksud bahawa setiap kali sensor dewan memenuhi magnet jarak 0.2827 meter diliputi oleh roda.
Jarak_tutup = jarak_lingkup + lilitan_dari_pusing
Oleh kerana, sekarang kita tahu bagaimana projek ini akan berfungsi mari kita lanjutkan ke rajah litar kita dan mula membinanya.
Diagram Litar dan Persediaan Perkakasan:
Gambarajah Litar Projek Speedometer dan Odometer ini sangat ringkas dan boleh dibina di atas papan roti. Sekiranya anda mengikuti tutorial PIC maka anda juga boleh menggunakan semula perkakasan yang kami gunakan untuk belajar mikrokontroler PIC. Di sini kami telah menggunakan Papan perf yang sama dengan yang kami buat untuk LED Blinking with PIC Microcontroller, seperti gambar di bawah:
Sambungan pin untuk MCU PIC16F877A diberikan dalam jadual di bawah.
S.No: |
Nombor PIN |
Nama Pin |
Berhubung dengan |
1 |
21 |
RD2 |
RS LCD |
2 |
22 |
RD3 |
E dari LCD |
3 |
27 |
RD4 |
D4 dari LCD |
4 |
28 |
RD5 |
D5 dari LCD |
5 |
29 |
RD6 |
D6 dari LCD |
6 |
30 |
RD7 |
D7 dari LCD |
7 |
33 |
RB0 / INT |
3 rd pin sensor Dewan |
Sebaik sahaja anda membina projek anda, ia akan kelihatan seperti ini dalam gambar di bawah
Seperti yang anda lihat, saya telah menggunakan dua kotak untuk meletakkan Motor dan sensor dewan dalam kedudukan berdekatan. Anda boleh memasang magnet pada objek berputar anda dan memasang sensor ruang yang berdekatan dengannya sehingga dapat mengesan magnet.
Catatan: Sensor ruang mempunyai kutub, jadi pastikan tiang mana yang dikesan dan letakkan dengan tepat.
Pastikan juga anda menggunakan resistor Pull-up dengan pin output sensor dewan.
Simulasi:
Simulasi untuk projek ini dilakukan menggunakan Proteus. Oleh kerana projek tersebut melibatkan objek bergerak, tidak mustahil untuk menunjukkan projek yang lengkap menggunakan simulasi tetapi cara kerja LCD dapat disahkan. Cukup muatkan fail hex ke Simulasi dan simulasinya. Anda akan dapat melihat LCD berfungsi seperti yang ditunjukkan di bawah.
Untuk memeriksa speedometer dan odometer yang berfungsi, saya telah mengganti sensor Hall dengan peranti keadaan Logik. Semasa simulasi anda boleh mengklik butang keadaan logik untuk mencetuskan Interrupt dan memeriksa apakah kelajuan dan jarak yang dilalui semakin diperbaharui seperti gambar di atas.
Memprogram PIC16F877A anda:
Seperti yang telah disebutkan sebelumnya, kami akan menggunakan bantuan pemasa dan gangguan dalam Mikrokontroler PIC16F877A untuk mengira masa yang diperlukan untuk satu putaran roda yang lengkap. Kami telah belajar bagaimana menggunakan Pemasa dalam tutorial kami. Saya telah memberikan kod lengkap projek pada akhir artikel ini. Selanjutnya saya telah menerangkan beberapa baris penting di bawah.
Garis kod di bawah ini menginisialisasi Port D sebagai pin output untuk antara muka LCD dan RB0 sebagai pin input untuk menggunakannya sebagai Pin luaran. Selanjutnya kami telah mengaktifkan resistor pull-up dalaman menggunakan OPTION_REG dan juga telah menetapkan 64 sebagai presale. KAMI kemudian Aktifkan Gangguan Global dan Periferal untuk membolehkan Pemasa dan Gangguan Luaran. Untuk menentukan RB0 sebagai INTER bit luaran INTE harus dibuat tinggi. Nilai Overflow diatur menjadi 100 sehingga untuk setiap 1 milidetik bendera gangguan pemasa TMR0IF akan dipicu. Ini akan membantu menjalankan pemasa milisaat untuk menentukan masa yang diambil dalam milisaat:
TRISD = 0x00; // PORTD dinyatakan sebagai output untuk antara muka LCD TRISB0 = 1; // Tentukan pin RB0 sebagai input untuk digunakan sebagai pin gangguan OPTION_REG = 0b00000101; // Timer0 64 sebagai prescalar // Juga Membolehkan PULL UPs TMR0 = 100; // Muatkan nilai masa untuk 1ms; delayValue boleh antara 0-256 hanya TMR0IE = 1; // Aktifkan bit gangguan pemasa dalam daftar PIE1 GIE = 1; // Dayakan Global Interrupt PEIE = 1; // Aktifkan INTE Periferal Interrupt = 1; // Aktifkan RB0 sebagai pin Interrupt luaran
Fungsi di bawah ini akan dilaksanakan setiap kali Interrupt dikesan. Kita boleh menamakan fungsi itu mengikut kehendak kita, jadi saya menamakannya sebagai speed_isr (). Program ini berkaitan dengan dua gangguan satu Timer Interrupt dan yang lain adalah External Interrupt. Setiap kali Timer Interrupt berlaku, bendera TMR0IF naik tinggi, untuk membersihkan dan menetapkan semula gangguan itu, kita harus menjadikannya rendah dengan menentukan TMR0IF = 0 seperti yang ditunjukkan dalam kod di bawah.
batal interrupt speed_isr () {if (TMR0IF == 1) // Pemasa telah melimpah {TMR0IF = 0; // Kosongkan pemasa mengganggu bendera milli_sec ++; } jika (INTF == 1) {rpm = (1000 / milli_sec) * 60; kelajuan = 0.3 * rpm * 0.37699; // (Dengan andaian radius roda 30cm) INTF = 0; // kosongkan bendera interrupt milli_sec = 0; jarak = jarak + 028.2; }}
Begitu juga apabila gangguan luaran berlaku, bendera INTF akan naik tinggi, ini juga harus dihapus dengan menentukan INTF = 0. Masa yang diambil dijejaki oleh Timer Interrupt dan External Interrupt menentukan bila roda telah menyelesaikan satu putaran penuh. Dengan data ini kelajuan dan jarak yang dilalui roda dikira semasa setiap gangguan luaran.
Setelah kelajuan dan jarak dikira, mereka dapat dipaparkan di skrin LCD dengan menggunakan fungsi LCD kami. Sekiranya anda baru menggunakan LCD, rujuk LCD antara muka kami dengan tutorial MCU PIC16F877A.
Penjelasan Kerja:
Setelah anda menyiapkan Perkakasan dan perisian, muat naik kod ke PIC16F877A anda. Sekiranya anda benar-benar baru dalam PIC maka anda harus membaca beberapa tutorial untuk mengetahui cara memuat naik program ke PIC16F877A Mikrokontroler.
Saya telah menggunakan pemboleh ubah POT untuk menyesuaikan Kelajuan Motor untuk tujuan demonstrasi. Anda juga boleh menggunakan aplikasi mencari masa nyata yang sama. Sekiranya semuanya berfungsi seperti yang diharapkan maka anda seharusnya dapat memperoleh Kecepatan dalam Km / Jam dan Jarak yang diliputi dari segi meter seperti yang ditunjukkan dalam Video di bawah.
Semoga anda menikmati projek ini dan berjaya. Sekiranya tidak, anda boleh menggunakan bahagian komen di bawah atau forum untuk mengemukakan keraguan anda.