Agar proyek apa pun menjadi hidup, kita perlu menggunakan sensor. Sensor bertindak sebagai mata dan telinga untuk semua aplikasi yang disematkan, ini membantu Mikrokontroler digital untuk memahami apa yang sebenarnya terjadi di dunia Analog nyata ini. Pada tutorial kali ini kita akan belajar bagaimana Menghubungkan Sensor Ultrasonik HC-SR04 dengan mikrokontroler PIC.
The HC-SR04 adalah sensor ultrasonik yang dapat digunakan untuk mengukur di mana saja jarak antara 2 cm ke 450cm (secara teoritis). Sensor ini telah membuktikan dirinya layak dengan menyesuaikan diri dengan banyak proyek yang melibatkan deteksi rintangan, pengukuran jarak, pemetaan lingkungan dll. Di akhir artikel ini Anda akan mempelajari cara kerja sensor ini dan cara menghubungkannya dengan mikrokontroler PIC16F877A untuk mengukur jarak dan tampilan di layar LCD. Kedengarannya menarik kan !! Jadi mari kita mulai…
Bahan yang Dibutuhkan:
- PIC16F877A MCU dengan pengaturan pemrograman
- Layar LCD 16 * 2
- Sensor ultrasonik (HC-SR04)
- Menghubungkan kabel
Bagaimana cara kerja Sensor Ultrasonik?
Sebelum kita melangkah lebih jauh, kita harus mengetahui cara kerja sensor ultrasonik agar kita dapat memahami tutorial ini dengan lebih baik. Sensor ultrasonik yang digunakan dalam proyek ini ditunjukkan di bawah ini.
Seperti yang Anda lihat, ia memiliki dua mata melingkar seperti proyeksi dan empat pin keluar darinya. Proyeksi dua mata adalah gelombang Ultrasonik (selanjutnya disebut gelombang AS) Pemancar dan penerima. Pemancar memancarkan gelombang AS pada frekuensi 40Hz, gelombang ini bergerak melalui udara dan dipantulkan kembali saat ia merasakan suatu objek. Gelombang yang kembali diamati oleh penerima. Sekarang kita tahu waktu yang dibutuhkan gelombang ini untuk memantulkan dan kembali dan kecepatan gelombang AS juga universal (3400cm / s). Dengan menggunakan informasi ini dan rumus sekolah menengah di bawah ini, kami dapat menghitung jarak yang ditempuh.
Jarak = Kecepatan × Waktu
Sekarang kita tahu bagaimana sensor AS bekerja, mari kita bagaimana itu dapat dihubungkan dengan MCU / CPU menggunakan empat pin. Ini empat pin adalah Vcc, Trigger, Echo dan Ground masing-masing. Modul ini bekerja pada + 5V dan karenanya Vcc dan pin ground digunakan untuk menyalakan modul. Dua pin lainnya adalah pin I / O yang digunakan untuk berkomunikasi dengan MCU kami. The pemicu pin harus dinyatakan sebagai output pin dan membuat tinggi untuk 10us, ini akan mengirimkan gelombang AS ke udara sebagai 8 siklus meledak sonic. Setelah gelombang diamati, pin Echo akan naik tinggi untuk interval waktu yang tepat yang diambil oleh gelombang AS untuk kembali ke modul sensor. Karenanya pin Echo ini akan dideklarasikan sebagai inputdan timer akan digunakan untuk mengukur berapa panjang pin itu tinggi. Ini selanjutnya dapat dipahami dengan diagram waktu di bawah ini.
Harap Anda sampai pada cara tentatif untuk menghubungkan sensor ini dengan PIC. Kami akan menggunakan modul Timer dan modul LCD dalam tutorial ini dan saya menganggap Anda sudah familiar dengan keduanya, jika tidak silakan kembali ke tutorial masing-masing di bawah ini karena saya akan melewatkan sebagian besar informasi yang terkait dengannya.
- Antarmuka LCD dengan Mikrokontroler PIC
- Memahami Timer pada Mikrokontroler PIC
Diagram Sirkuit:
Diagram rangkaian lengkap untuk menghubungkan Sensor Ultrasonik dengan PIC16F877A ditunjukkan di bawah ini:
Seperti yang ditunjukkan, rangkaian tidak lebih dari layar LCD dan sensor Ultrasonik itu sendiri. Sensor AS dapat didukung oleh + 5V dan karenanya didukung langsung oleh regulator tegangan 7805. Sensor memiliki satu pin keluaran (pin pemicu) yang dihubungkan ke pin 34 (RB1) dan pin masukan (pin gema) terhubung ke pin 35 (RB2). Sambungan pin lengkap diilustrasikan pada tabel di bawah ini.
S.Tidak: |
Nomor Pin PIC |
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 |
34 |
RB1 |
Pemicu AS |
8 |
35 |
RB2 |
Gema AS |
Memprogram Mikrokontroler PIC Anda:
Program lengkap untuk tutorial ini diberikan di akhir halaman ini, lebih jauh di bawah ini saya telah menjelaskan kode menjadi potongan-potongan kecil yang berarti untuk Anda pahami. Seperti yang dikatakan sebelumnya, program ini melibatkan konsep antarmuka LCD dan Timer yang tidak akan dijelaskan secara rinci dalam tutorial ini karena kita telah membahasnya di tutorial sebelumnya.
Di dalam, fungsi utama kita mulai dengan menginisialisasi pin IO dan register lain seperti biasa. Kami menentukan pin IO untuk LCD dan sensor AS dan juga memulai register Timer 1 dengan mengaturnya agar berfungsi pada pra-skalar 1: 4 dan menggunakan jam internal (Fosc / 4)
TRISD = 0x00; // PORTD dideklarasikan sebagai keluaran untuk antarmuka LCD TRISB0 = 1; // Tentukan pin RB0 sebagai input untuk digunakan sebagai pin interupsi TRISB1 = 0; // Pin pemicu sensor US dikirim sebagai pin keluaran TRISB2 = 1; // Pin gema sensor AS disetel sebagai pin input TRISB3 = 0; // RB3 adalah pin keluaran untuk LED T1CON = 0x20; // 4 pres-skalar dan jam internal
Timer 1 adalah timer 16-bit yang digunakan di PIC16F877A, register T1CON mengontrol parameter modul timer dan hasilnya akan disimpan di TMR1H dan TMR1L karena hasilnya 16-bit, 8 pertama akan disimpan di TMR1H dan 8 berikutnya di TMR1L. Timer ini dapat dihidupkan atau dimatikan menggunakan TMR1ON = 0 dan TMR1ON = 1.
Sekarang, pengatur waktu siap digunakan, tetapi kita harus mengirim gelombang AS keluar dari sensor, untuk melakukan ini kita harus menjaga pin Trigger tetap tinggi selama 10uS, ini dilakukan dengan kode berikut.
Pemicu = 1; __delay_us (10); Pemicu = 0;
Seperti yang ditunjukkan pada diagram waktu di atas, pin Echo akan tetap rendah sampai gelombang kembali dan kemudian akan naik dan tetap tinggi untuk waktu yang tepat yang dibutuhkan agar gelombang kembali. Waktu ini harus diukur dengan modul Timer 1, yang dapat dilakukan oleh baris di bawah ini
sementara (Gema == 0); TMR1ON = 1; sementara (Gema == 1); TMR1ON = 0;
Setelah waktu diukur, nilai yang dihasilkan akan disimpan dalam register TMR1H dan TMR1L, register ini harus dipukuli untuk mengumpulkan nilai 16-bit. Ini dilakukan dengan menggunakan baris di bawah ini
time_taken = (TMR1L - (TMR1H << 8));
Time_taken ini akan berbentuk byte, untuk mendapatkan nilai waktu sebenarnya kita harus menggunakan rumus di bawah ini.
Waktu = (Nilai register 16-bit) * (1 / Jam Internal) * (Skala Awal) Jam Internal = Fosc / 4 Dimana dalam kasus kami, Fosc = 20000000Mhz dan Pra-skala = 4 Oleh karena itu nilai Jam Internal akan menjadi 5000000Mhz dan nilai waktu akan menjadi Waktu = (nilai register 16-bit) * (1/5000000) * (4) = (nilai register 16-bit) * (4/5000000) = (nilai register 16-bit) * 0,0000008 detik (OR) Waktu = (nilai register 16-bit) * 0,8 mikro detik
Dalam program kami, nilai register 16-bit disimpan dalam variabel time_taken dan karenanya baris di bawah ini digunakan untuk menghitung time_taken dalam mikro detik
time_taken = time_taken * 0.8;
Selanjutnya kita harus mencari cara menghitung jarak. Seperti yang kita ketahui jarak = kecepatan * waktu. Tetapi di sini hasilnya harus dibagi 2 karena gelombang mencakup jarak transmisi dan jarak penerima. Kecepatan gelombang kami (suara) adalah 34000cm / s.
Jarak = (Kecepatan * Waktu) / 2 = (34000 * (nilai register 16-bit) * 0,0000008) / 2 Jarak = (0,0272 * nilai register 16-bit) / 2
Jadi jaraknya bisa dihitung dalam centimeter seperti di bawah ini:
jarak = (0,0272 * waktu_diambil) / 2;
Setelah menghitung nilai jarak dan waktu yang ditempuh kita tinggal menampilkannya di layar LCD.
Mengukur jarak menggunakan PIC dan Sensor Ultrasonik:
Setelah membuat koneksi dan mengunggah kode, pengaturan eksperimental Anda akan terlihat seperti ini yang ditunjukkan pada gambar di bawah ini.
Papan PIC Perf, yang ditunjukkan dalam gambar ini, dibuat untuk seri tutorial PIC kami, di mana kami mempelajari cara menggunakan mikrokontroler PIC. Anda mungkin ingin kembali ke tutorial Mikrokontroler PIC menggunakan MPLABX dan XC8 jika Anda tidak tahu cara membakar program menggunakan Pickit 3, karena saya akan melewatkan semua informasi dasar tersebut.
Sekarang letakkan sebuah objek di depan sensor dan itu akan menampilkan seberapa jauh objek tersebut dari sensor. Anda juga dapat melihat waktu yang dibutuhkan ditampilkan dalam detik mikro untuk gelombang untuk dikirim dan kembali.
Anda dapat memindahkan objek pada jarak yang Anda inginkan dan memeriksa nilai yang ditampilkan pada LCD. Saya bisa mengukur jarak dari 2cm hingga 350cm dengan akurasi 0,5cm. Ini hasil yang cukup memuaskan! Semoga Anda menikmati tutorial ini dan belajar cara membuat sesuatu sendiri. Jika Anda ragu, letakkan di bagian komentar di bawah atau gunakan forum.
Juga periksa antarmuka sensor Ultrasonik dengan mikrokontroler lain:
- Pengukuran Jarak Berbasis Arduino & Ultrasonic Sensor
- Mengukur Jarak menggunakan Raspberry Pi dan HCSR04 Ultrasonic Sensor
- Pengukuran Jarak menggunakan Mikrokontroler HC-SR04 dan AVR