- Bahan yang Dibutuhkan:
- Menghitung Kecepatan dan Jarak Cakupan:
- Diagram Sirkuit dan Pengaturan Perangkat Keras:
- Simulasi:
- Memprogram PIC16F877A Anda:
- Penjelasan Kerja:
Mengukur kecepatan / rpm Kendaraan atau motor selalu menjadi proyek yang menarik untuk kami coba. Jadi, dalam proyek ini kami akan membangunnya menggunakan mikrokontroler PIC siap Industri. Kami akan menggunakan sepotong magnet dan Sensor Hall untuk mengukur kecepatan. Ada cara / sensor lain untuk mengukur kecepatan tetapi, menggunakan sensor hall murah dan juga bisa digunakan pada semua jenis motor / kendaraan. Dengan melakukan proyek ini kami juga akan meningkatkan keterampilan kami dalam mempelajari PIC16F877A karena proyek tersebut melibatkan penggunaan Interrupts dan Timer. Di akhir proyek ini, Anda akan dapat menghitung kecepatan dan jarak yang ditempuh oleh objek berputar dan menampilkannya pada layar LCD 16x2. Mari kita mulai dengan Speedometer Digital dan Sirkuit Odometer dengan PIC.
Bahan yang Dibutuhkan:
- PIC16F877A
- 7805 Regulator Tegangan
- Sensor Efek Hall (US1881 / 04E)
- Layar LCD 16 * 2
- Sepotong kecil magnet
- Menghubungkan kabel
- Kapasitor
- Papan tempat memotong roti.
- Sumber Daya listrik
Menghitung Kecepatan dan Jarak Cakupan:
Sebelum kita benar-benar mulai membangun sirkuit, mari kita pahami bagaimana kita akan menggunakan sensor Hall dan magnet untuk menghitung kecepatan sebuah roda. Sebelumnya kami telah menggunakan Teknik yang sama untuk membuat Speedometer Arduino yang menampilkan bacaan di Ponsel Cerdas Android.
Sensor Hall adalah perangkat yang dapat mendeteksi keberadaan magnet berdasarkan polaritasnya. Kami menempelkan sepotong kecil magnet pada roda dan menempatkan sensor hall di dekatnya sedemikian rupa sehingga setiap kali roda berputar, sensor hall mendeteksinya. Kami kemudian menggunakan bantuan pengatur waktu dan Interupsi pada Mikrokontroler PIC kami untuk menghitung waktu yang dibutuhkan untuk satu putaran penuh roda.
Setelah waktu yang dibutuhkan diketahui, kita dapat menghitung RPM dengan menggunakan rumus di bawah ini, Dimana 1000 / waktu yang dibutuhkan akan memberi kita RPS dan selanjutnya mengalikannya dengan 60 akan memberi Anda RPM
rpm = (1000 / timetaken) * 60;
Dimana (1000 / timetaken) memberikan rps (Revolusi per detik) dan dikalikan dengan 60 untuk mengubah rps menjadi rpm (Revolusi per menit).
Sekarang untuk menghitung kecepatan kendaraan kita harus mengetahui jari-jari roda. Dalam proyek kami, kami telah menggunakan roda mainan kecil yang memiliki radius hanya 3cm. Namun, diasumsikan jari-jari roda adalah 30cm (0,3m) sehingga kita dapat memvisualisasikan bacaannya.
Nilai tersebut juga dikalikan dengan 0,37699 karena diketahui bahwa Velocity = (RPM (diameter * Pi) / 60). Rumusnya disederhanakan menjadi
v = radius_of_wheel * rpm * 0,37699;
Setelah kami menghitung kecepatan, kami juga dapat menghitung jarak yang ditempuh dengan menggunakan metode serupa. Dengan Hall dan pengaturan magnet kita tahu berapa kali roda telah berputar. Kita juga mengetahui jari-jari roda, yang dengannya kita dapat menemukan keliling roda, dengan asumsi jari-jari roda adalah 0,3 m (R) nilai keliling Pi * R * R adalah 0,2827. Artinya untuk setiap kali sensor hall bertemu dengan magnet jarak 0,2827 meter tertutup oleh roda.
Distance_covered = distance_covered + circumference_of_the_circle
Karena, sekarang kita tahu bagaimana proyek ini akan bekerja, mari lanjutkan ke diagram sirkuit kita dan mulai membangunnya.
Diagram Sirkuit dan Pengaturan Perangkat Keras:
Diagram Sirkuit Proyek Speedometer dan Odometer ini sangat sederhana dan dapat dibuat di atas papan tempat memotong roti. Jika Anda telah mengikuti tutorial PIC maka Anda juga dapat menggunakan kembali perangkat keras yang kami gunakan untuk mempelajari mikrokontroler PIC. Di sini kami telah menggunakan Perf Board yang sama yang telah kami buat untuk LED Berkedip dengan Mikrokontroler PIC, seperti yang ditunjukkan di bawah ini:
Sambungan pin untuk PIC16F877A MCU diberikan pada tabel di bawah ini.
S.Tidak: |
Nomor PIN |
Nama Pin |
Terhubung dengan |
1 |
21 |
RD2 |
RS LCD |
2 |
22 |
RD3 |
E dari 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 pin dari sensor Balai |
Setelah Anda membangun proyek Anda, itu akan terlihat seperti ini pada gambar di bawah ini
Seperti yang Anda lihat, saya telah menggunakan dua kotak untuk menempatkan Motor dan sensor hall di posisi terdekat. Anda dapat memasang magnet pada objek yang berputar dan memasang sensor hall di dekatnya sedemikian rupa sehingga dapat mendeteksi magnet.
Catatan: Sensor hall memiliki polaritas, jadi pastikan kutub mana yang dideteksi dan letakkan dengan benar.
Juga pastikan Anda menggunakan resistor Pull-up dengan pin keluaran sensor hall.
Simulasi:
Simulasi untuk proyek ini dilakukan dengan menggunakan Proteus. Karena proyek ini melibatkan objek bergerak, tidak mungkin untuk mendemonstrasikan proyek secara lengkap menggunakan simulasi tetapi kerja LCD dapat diverifikasi. Cukup muat file hex ke Simulasi dan simulasikan. Anda akan dapat melihat LCD bekerja seperti yang ditunjukkan di bawah ini.
Untuk memeriksa apakah speedometer dan odometer berfungsi, saya telah mengganti sensor Hall dengan perangkat status Logika. Selama simulasi, Anda dapat mengklik tombol status logika untuk memicu Interupsi dan memeriksa apakah kecepatan dan jarak yang ditempuh diperbarui seperti yang ditunjukkan di atas.
Memprogram PIC16F877A Anda:
Seperti yang dikatakan sebelumnya, kami akan menggunakan bantuan pengatur waktu dan interupsi di Mikrokontroler PIC16F877A untuk menghitung waktu yang dibutuhkan untuk satu putaran roda yang lengkap. Kami telah mempelajari cara menggunakan Pengatur Waktu dalam tutorial sebelumnya. Saya telah memberikan kode lengkap proyek di akhir artikel ini. Selanjutnya saya telah menjelaskan beberapa baris penting di bawah ini.
Baris kode di bawah ini menginisialisasi Port D sebagai pin output untuk antarmuka LCD dan RB0 sebagai pin input untuk menggunakannya sebagai Pin eksternal. Selanjutnya kami telah mengaktifkan resistor pull-up internal menggunakan OPTION_REG dan juga menetapkan 64 sebagai presale. WE kemudian Mengaktifkan Interupsi Global dan Periferal untuk mengaktifkan Timer dan Interupsi Eksternal. Untuk mendefinisikan RB0 sebagai bit interupsi eksternal, INTE harus dibuat tinggi. Nilai Overflow disetel ke 100 sehingga untuk setiap 1 milidetik bendera interupsi pengatur waktu TMR0IF akan dipicu. Ini akan membantu menjalankan pengatur waktu milidetik untuk menentukan waktu yang dibutuhkan dalam milidetik:
TRISD = 0x00; // PORTD dideklarasikan sebagai keluaran untuk antarmuka LCD TRISB0 = 1; // Tentukan pin RB0 sebagai input untuk digunakan sebagai pin interupsi OPTION_REG = 0b00000101; // Timer0 64 sebagai prescalar // Juga Mengaktifkan PULL UPs TMR0 = 100; // Muat nilai waktu untuk 1ms; delayValue bisa antara 0-256 hanya TMR0IE = 1; // Aktifkan bit interupsi pengatur waktu di register PIE1 GIE = 1; // Aktifkan Global Interrupt PEIE = 1; // Aktifkan Peripheral Interrupt INTE = 1; // Aktifkan RB0 sebagai pin Interupsi eksternal
Fungsi di bawah ini akan dijalankan setiap kali Interupsi terdeteksi. Kita bisa menamai fungsinya sesuai keinginan kita jadi saya menamakannya sebagai speed_isr (). Program ini menangani dua interupsi, satu Interupsi Timer dan Interupsi Eksternal. Setiap kali terjadi Interupsi Timer, bendera TMR0IF menjadi tinggi, untuk menghapus dan mengatur ulang interupsi kita harus membuatnya rendah dengan mendefinisikan TMR0IF = 0 seperti yang ditunjukkan pada kode di bawah ini.
void interrupt speed_isr () {if (TMR0IF == 1) // Timer telah meluap {TMR0IF = 0; // Hapus timer interupsi flag milli_sec ++; } jika (INTF == 1) {rpm = (1000 / milli_sec) * 60; kecepatan = 0,3 * rpm * 0,37699; // (Dengan asumsi radius roda 30cm) INTF = 0; // hapus bendera interupsi milli_sec = 0; jarak = jarak + 028,2; }}
Demikian pula ketika Interupsi Eksternal terjadi, bendera INTF akan naik, ini juga harus dihapus dengan mendefinisikan INTF = 0. Waktu yang dibutuhkan disimpan dalam jalur oleh Interupsi Pengatur Waktu dan Interupsi Eksternal menentukan kapan roda telah menyelesaikan satu putaran penuh. Dengan data ini, kecepatan dan jarak yang ditempuh oleh roda dihitung selama setiap Interupsi eksternal.
Setelah kecepatan dan jarak dihitung, mereka dapat dengan mudah ditampilkan di layar LCD menggunakan fungsi LCD kami. Jika Anda baru mengenal LCD, lihat tutorial interfacing LCD kami dengan PIC16F877A MCU.
Penjelasan Kerja:
Setelah Anda menyiapkan Perangkat Keras dan perangkat lunak, cukup unggah kode ke PIC16F877A Anda. Jika Anda benar-benar baru mengenal PIC maka Anda harus membaca beberapa tutorial tentang cara mengunggah program ke Mikrokontroler PIC16F877A.
Saya telah menggunakan POT variabel untuk menyesuaikan Kecepatan Motor untuk tujuan demonstrasi. Anda juga dapat menggunakan aplikasi yang sama untuk menemukan aplikasi waktu nyata. Jika semuanya bekerja seperti yang diharapkan maka Anda harus bisa mendapatkan Kecepatan dalam Km / Jam dan Jarak yang tercakup dalam meter seperti yang ditunjukkan pada Video di bawah ini.
Semoga Anda menikmati proyek ini dan berhasil. Jika tidak, Anda dapat menggunakan bagian komentar di bawah atau forum untuk memposting keraguan Anda.