Untuk sebarang projek menjadi hidup, kita perlu menggunakan sensor. Sensor bertindak sebagai mata dan telinga untuk semua aplikasi yang disisipkan, ini membantu Pengawal Mikro digital untuk memahami apa yang sebenarnya berlaku di dunia Analog sebenar ini. Dalam tutorial ini kita akan belajar bagaimana Interface Ultrasonic Sensor HC-SR04 dengan mikrokontroler PIC.
The HC-SR04 adalah sensor ultrasonik yang boleh digunakan untuk mengukur mana-mana sahaja jarak antara 2cm ke 450cm (secara teori). Sensor ini telah membuktikan dirinya layak dengan memasukkan banyak projek yang melibatkan pengesanan rintangan, pengukuran jarak, pemetaan persekitaran dll. Pada akhir artikel ini, anda akan belajar bagaimana sensor ini berfungsi dan bagaimana menghubungkannya dengan mikrokontroler PIC16F877A untuk mengukur jarak dan paparan pada skrin LCD. Kedengarannya menarik !! Oleh itu, mari kita mulakan…
Bahan yang Diperlukan:
- PIC16F877A MCU dengan penyediaan pengaturcaraan
- Paparan LCD 16 * 2
- Sensor ultrasonik (HC-SR04)
- Menyambung wayar
Bagaimana Sensor Ultrasonik berfungsi?
Sebelum kita melangkah lebih jauh, kita harus mengetahui bagaimana sensor Ultrasonik berfungsi agar kita dapat memahami tutorial ini dengan lebih baik. Sensor ultrasonik yang digunakan dalam projek ini ditunjukkan di bawah.
Seperti yang anda lihat, ia mempunyai dua mata bulat seperti unjuran dan empat pin keluar dari dalamnya. Kedua-dua unjuran seperti mata adalah pemancar dan penerima gelombang ultrasonik (selepas ini disebut gelombang AS). Pemancar memancarkan gelombang AS pada frekuensi 40Hz, gelombang ini bergerak melalui udara dan dipantulkan kembali ketika merasakan objek. Gelombang kembali diperhatikan oleh penerima. Sekarang kita tahu masa yang diperlukan untuk gelombang ini dipantulkan dan kembali dan kelajuan gelombang AS juga universal (3400cm / s). Dengan menggunakan maklumat ini dan formula sekolah menengah di bawah, kita dapat mengira jarak yang dilalui.
Jarak = Kelajuan Ă— Masa
Sekarang setelah kita mengetahui bagaimana sensor AS berfungsi, marilah kita bagaimana ia dapat dihubungkan dengan MCU / CPU apa pun menggunakan empat pin. Ini empat PIN Vcc, Trigger, Echo dan Ground masing-masing. Modul berfungsi pada + 5V dan oleh itu Vcc dan pin ground digunakan untuk memberi kuasa kepada modul. Dua pin yang lain adalah pin I / O yang kami gunakan untuk berkomunikasi dengan MCU kami. The pin pencetus perlu diisytiharkan sebagai pin output dan membuat tinggi untuk 10us, ini akan menghantar gelombang AS ke udara sebagai 8 kitaran pecah sonik. Setelah gelombang diperhatikan, pin Echo akan naik tinggi untuk selang waktu yang tepat yang diambil oleh gelombang AS untuk kembali ke modul sensor. Oleh itu pin Echo ini akan dinyatakan sebagai inputdan pemasa akan digunakan untuk mengukur berapa lama pin itu tinggi. Ini dapat difahami lebih lanjut dengan rajah masa di bawah.
Mudah-mudahan anda telah mencapai tentatif untuk menghubungkan sensor ini dengan PIC. Kami akan menggunakan modul Pemasa dan modul LCD dalam tutorial ini dan saya menganggap anda sudah biasa dengan kedua-duanya, jika tidak silakan kembali ke tutorial masing-masing di bawah ini kerana saya akan melewatkan sebahagian besar maklumat yang berkaitan dengannya.
- Antara muka LCD dengan PIC Microcontroller
- Memahami Pemasa dalam PIC Microcontroller
Rajah Litar:
Gambarajah litar lengkap untuk menghubungkan Ultrasonik Sensor dengan PIC16F877A ditunjukkan di bawah:
Seperti yang ditunjukkan, litar ini tidak lebih melibatkan paparan LCD dan sensor Ultrasonik itu sendiri. Sensor AS boleh dikuasakan oleh + 5V dan oleh itu ia secara langsung dikuasakan oleh pengatur voltan 7805. Sensor mempunyai satu pin output (Trigger pin) yang dihubungkan ke pin 34 (RB1) dan pin input (Echo pin) disambungkan ke pin 35 (RB2). Sambungan pin lengkap digambarkan dalam jadual di bawah.
S.No: |
Nombor Pin PIC |
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 |
34 |
RB1 |
Pencetus AS |
8 |
35 |
RB2 |
Gema AS |
Mengaturcara PIC Microcontroller anda
Program lengkap untuk tutorial ini diberikan di akhir halaman ini, lebih jauh di bawah ini saya telah menerangkan kod tersebut menjadi sedikit makna penuh untuk anda fahami. Seperti yang dinyatakan sebelumnya, program ini melibatkan konsep antara muka LCD dan Pemasa yang tidak akan dijelaskan secara terperinci dalam tutorial ini kerana kita telah membahasnya dalam tutorial sebelumnya.
Di dalamnya, fungsi utama kita mulakan dengan menginisialisasi pin IO dan register lain seperti biasa. Kami menentukan pin IO untuk sensor LCD dan AS dan juga memulakan daftar Pemasa 1 dengan menetapkannya berfungsi pada pra-skalar 1: 4 dan menggunakan jam dalaman (Fosc / 4)
TRISD = 0x00; // PORTD dinyatakan sebagai output untuk antara muka LCD TRISB0 = 1; // Tentukan pin RB0 sebagai input untuk digunakan sebagai pin interupsi TRISB1 = 0; // Pin pencetus sensor AS dihantar sebagai pin output TRISB2 = 1; // Pin gema sensor AS ditetapkan sebagai pin input TRISB3 = 0; // RB3 adalah pin output untuk LED T1CON = 0x20; // 4 jam skalar dan jam dalaman
Pemasa 1 adalah pemasa 16-bit yang digunakan dalam PIC16F877A, daftar T1CON mengawal parameter modul pemasa dan hasilnya akan disimpan dalam TMR1H dan TMR1L kerana hasil 16-bit 8 yang pertama akan disimpan di TMR1H dan 8 seterusnya dalam TMR1L. Pemasa ini boleh dihidupkan atau dimatikan masing-masing menggunakan TMR1ON = 0 dan TMR1ON = 1.
Sekarang, pemasa sudah siap digunakan, tetapi kita harus menghantar gelombang AS keluar dari sensor, untuk melakukan ini kita harus memastikan pin Trigger tetap tinggi untuk 10uS, ini dilakukan dengan kod berikut.
Pencetus = 1; __delay_us (10); Pencetus = 0;
Seperti yang ditunjukkan dalam rajah masa di atas, pin Echo akan tetap rendah hingga gelombang kembali dan kemudian akan naik tinggi dan tetap tinggi untuk masa yang tepat diambil untuk gelombang kembali. Masa ini harus diukur oleh modul Pemasa 1, yang dapat dilakukan dengan garis bawah
sementara (Echo == 0); TMR1ON = 1; sementara (Echo == 1); TMR1ON = 0;
Setelah masa diukur, nilai yang dihasilkan akan disimpan dalam daftar TMR1H dan TMR1L, daftar ini harus dikumpulkan untuk mengumpulkan untuk mendapatkan nilai 16-bit. Ini dilakukan dengan menggunakan garis di bawah
time_taken = (TMR1L - (TMR1H << 8));
Ini TIME_TAKEN akan berada di dalam bait bentuk, untuk mendapatkan nilai sebenar masa kita perlu menggunakan di bawah formula.
Masa = (nilai daftar 16-bit) * (1 / Jam Dalaman) * (Pra-skala) Jam Dalaman = Fosc / 4 Di mana dalam kes kita, Fosc = 20000000Mhz dan Pra-skala = 4 Oleh itu nilai Jam Dalaman akan menjadi 5000000Mhz dan nilai masa akan menjadi Masa = (nilai daftar 16-bit) * (1/5000000) * (4) = (nilai daftar 16-bit) * (4/5000000) = (nilai daftar 16-bit) * 0,0000008 saat (ATAU) Masa = (nilai daftar 16-bit) * 0,8 saat mikro
Dalam program kami, nilai daftar 16-bit disimpan dalam pemboleh ubah time_taking dan oleh itu baris di bawah digunakan untuk mengira time_take dalam detik mikro
time_taken = time_taken * 0.8;
Seterusnya kita harus mencari cara mengira jarak. Seperti yang kita ketahui jarak = kelajuan * masa. Tetapi di sini hasilnya harus dibahagi dengan 2 kerana gelombang meliputi jarak penghantaran dan jarak penerimaan. Kelajuan gelombang kita (suara) ialah 34000cm / s.
Jarak = (Kelajuan * Masa) / 2 = (34000 * (nilai daftar 16-bit) * 0,0000008) / 2 Jarak = (0,0272 * nilai daftar 16-bit) / 2
Jadi jarak dapat dikira dalam sentimeter seperti di bawah:
jarak = (0.0272 * masa_digunakan) / 2;
Setelah mengira nilai jarak dan masa yang diperlukan, kita hanya perlu memaparkannya pada skrin LCD.
Mengukur jarak menggunakan PIC dan Ultrasonic Sensor:
Setelah membuat sambungan dan memuat naik kod, persediaan eksperimen anda akan kelihatan seperti ini seperti yang ditunjukkan dalam gambar di bawah.
PIC Perf board, yang ditunjukkan dalam gambar ini, dibuat untuk siri tutorial PIC kami, di mana kami belajar bagaimana menggunakan mikrokontroler PIC. Anda mungkin ingin kembali ke tutorial PIC Microcontroller menggunakan MPLABX dan XC8 jika anda tidak tahu cara membakar program menggunakan Pickit 3, kerana saya akan melangkau semua maklumat asas tersebut.
Sekarang letakkan objek di hadapan sensor dan ia harus menunjukkan sejauh mana objek itu dari sensor. Anda juga dapat melihat masa yang diambil dalam detik mikro untuk gelombang menghantar dan kembali.
Anda boleh menggerakkan objek pada jarak pilihan anda dan memeriksa nilai yang dipaparkan pada LCD. Saya dapat mengukur jarak dari 2cm hingga 350cm dengan ketepatan 0.5cm. Ini adalah hasil yang cukup memuaskan! Semoga anda menikmati tutorial dan belajar bagaimana membuat sesuatu sendiri. Sekiranya anda mempunyai keraguan, lepaskan di ruangan komen di bawah atau gunakan forum.
Periksa juga antara muka sensor Ultrasonik dengan pengawal mikro lain:
- Pengukuran Jarak Berdasarkan Sensor Arduino & Ultrasonik
- Ukur Jarak menggunakan Sensor Ultrasonik Raspberry Pi dan HCSR04
- Pengukuran Jarak menggunakan HC-SR04 dan AVR Microcontroller