Dalam tutorial ini kita akan membincangkan dan merancang litar untuk mengukur jarak. Litar ini dikembangkan dengan menghubungkan sensor ultrasonik "HC-SR04" dengan mikrokontroler AVR. Sensor ini menggunakan teknik yang disebut "ECHO" yang merupakan sesuatu yang anda dapat apabila suara dipantulkan kembali setelah menyerang dengan permukaan.
Kita tahu bahawa getaran bunyi tidak dapat menembusi pepejal. Jadi apa yang berlaku adalah, apabila sumber suara menghasilkan getaran, mereka bergerak melalui udara dengan kelajuan 220 meter sesaat. Getaran ini ketika mereka memenuhi telinga kita menggambarkannya sebagai bunyi. Seperti yang dinyatakan sebelumnya getaran ini tidak dapat melalui pepejal, jadi ketika menyerang dengan permukaan seperti dinding, ia dipantulkan kembali dengan kelajuan yang sama ke sumber, yang disebut gema.
Sensor ultrasonik "HC-SR04" memberikan isyarat output yang sebanding dengan jarak berdasarkan gema. Sensor di sini menghasilkan getaran suara dalam jarak ultrasonik setelah memberikan pemicu, setelah itu menunggu getaran suara kembali. Kini berdasarkan parameter, kelajuan suara (220m / s) dan waktu yang diperlukan agar gema sampai ke sumbernya, ia memberikan denyut output yang sebanding dengan jarak.
Seperti yang ditunjukkan dalam gambar, pada awalnya kita perlu memulai sensor untuk mengukur jarak, itu adalah isyarat logik TINGGI pada pin pemicu sensor selama lebih dari 10uS, setelah itu getaran suara dikirim oleh sensor, setelah gema, sensor memberikan isyarat pada pin output yang lebarnya berkadar dengan jarak antara sumber dan halangan.
Jarak ini dikira sebagai, jarak (dalam cm) = lebar keluaran nadi (dalam uS) / 58.
Di sini lebar isyarat mesti diambil dalam beberapa uS (mikro kedua atau 10 ^ -6).
Komponen Diperlukan
Perkakasan: ATMEGA32, Bekalan kuasa (5v), PROGRAMMER AVR-ISP, JHD_162ALCD (16x2LCD), kapasitor 1000uF, perintang 10KΩ (2 keping), sensor HC-SR04.
Perisian: Atmel studio 6.1, progisp atau flash magic.
Diagram Litar dan Penjelasan Kerja
Di sini kita menggunakan PORTB untuk menyambung ke port data LCD (D0-D7). Sesiapa yang tidak mahu bekerja dengan FUSE BITS ATMEGA32A tidak boleh menggunakan PORTC, kerana PORTC mengandungi jenis komunikasi khas yang hanya boleh dilumpuhkan dengan menukar FUSEBITS.
Di litar, anda perhatikan bahawa saya hanya mengambil dua pin kawalan, ini memberi fleksibiliti pemahaman yang lebih baik. Bit kontras dan BACA / MENULIS tidak sering digunakan sehingga boleh dipendekkan ke tanah. Ini meletakkan LCD dalam mod kontras dan baca tertinggi. Kita hanya perlu mengawal pin ENABLE dan RS untuk menghantar watak dan data yang sesuai.
Sambungan yang dilakukan untuk LCD diberikan di bawah:
PIN1 atau VSS ke pembumian
PIN2 atau VDD atau VCC untuk +5v kuasa
PIN3 atau VEE ke ground (memberikan kontras maksimum terbaik untuk pemula)
PIN4 atau RS (Daftar Pilihan) ke PD6 uC
PIN5 atau RW (Baca / Tulis) ke tanah (meletakkan LCD dalam mod baca memudahkan komunikasi untuk pengguna)
PIN6 atau E (Aktifkan) ke PD5 uC
PIN7 atau D0 hingga PB0 dari uC
PIN8 atau D1 hingga PB1 dari uC
PIN9 atau D2 ke PB2 dari uC
PIN10 atau D3 hingga PB3 dari uC
PIN11 atau D4 ke PB4 dari uC
PIN12 atau D5 hingga PB5 dari uC
PIN13 atau D6 hingga PB6 dari uC
PIN14 atau D7 hingga PB7 dari uC
Di litar anda dapat melihat kami telah menggunakan komunikasi 8bit (D0-D7) namun ini bukan suatu yang wajib dan kami dapat menggunakan komunikasi 4bit (D4-D7) tetapi dengan program komunikasi 4 bit menjadi sedikit rumit. Oleh itu, seperti yang ditunjukkan dalam jadual di atas, kami menghubungkan 10 pin LCD ke pengawal di mana 8 pin adalah pin data dan 2 pin untuk kawalan.
Sensor ultrasonik adalah peranti empat pin, PIN1- VCC atau + 5V; PIN2-TRIGGER; PIN3- ECHO; PIN4- GROUND. Pin pemicu adalah tempat kita memberikan pemicu untuk memberitahu sensor untuk mengukur jarak. Echo adalah pin output di mana kita mendapatkan jarak dalam bentuk lebar nadi. Pin gema di sini disambungkan ke pengawal sebagai sumber gangguan luaran. Oleh itu, untuk mendapatkan lebar keluaran isyarat, pin echo sensor disambungkan ke INT0 (interrupt 0) atau PD2.
1. Memicu sensor dengan menarik pin pemicu untuk sekurang-kurangnya 12uS.
2. Setelah gema naik tinggi, kita mendapat gangguan luaran dan kita akan memulakan penghitung (mengaktifkan kaunter) di ISR (Interrupt Service Routine) yang dijalankan tepat setelah gangguan dicetuskan.
3. Setelah gema kembali rendah, gangguan dihasilkan, kali ini kita akan menghentikan kaunter (mematikan kaunter).
4. Jadi untuk denyut nadi tinggi hingga rendah pada pin gema, kami telah memulakan pembilang dan menghentikannya. Kiraan ini diperbaharui ke memori untuk mendapatkan jarak, karena kita memiliki lebar gema dalam hitungan sekarang.
5. Kami akan melakukan pengiraan lebih lanjut dalam memori untuk mendapatkan jarak dalam cm
6. Jarak dipaparkan pada paparan LCD 16x2.
Untuk menetapkan ciri-ciri di atas, kami akan menetapkan daftar berikut:
Tiga daftar di atas akan ditetapkan dengan sewajarnya agar penyediaan berfungsi dan kami akan membincangkannya secara ringkas, BIRU (INT0): bit ini mesti ditetapkan tinggi untuk membolehkan gangguan luaran0, setelah pin ini ditetapkan, kita dapat merasakan perubahan logik pada pin PIND2.
BROWN (ISC00, ISC01): kedua bit ini disesuaikan untuk perubahan logik yang sesuai pada PD2, yang akan dianggap sebagai gangguan.
Jadi seperti yang dinyatakan sebelumnya, kita memerlukan gangguan untuk memulakan kiraan dan menghentikannya. Oleh itu, kami menetapkan ISC00 sebagai satu dan kami mendapat gangguan apabila terdapat logik RENDAH hingga TINGGI di INT0; gangguan lain apabila terdapat logik TINGGI hingga RENDAH.
MERAH (CS10): Bit ini hanya untuk mengaktifkan dan mematikan pembilang. Walaupun ia berfungsi bersama dengan bit lain CS10, CS12. Kami tidak melakukan prescelling di sini, jadi kami tidak perlu risau tentang mereka.
Beberapa perkara penting yang perlu diingat di sini adalah:
Kami menggunakan jam dalaman ATMEGA32A iaitu 1MHz. Tidak ada prescaling di sini, kami tidak melakukan perbandingan pertandingan menghasilkan rutin, jadi tidak ada pengaturan daftar yang kompleks.
Nilai kiraan selepas pengiraan disimpan dalam daftar TCNT1 16bit.
Lihat juga projek ini dengan arduino: Pengukuran jarak menggunakan Arduino
Penjelasan Pengaturcaraan
Kerja sensor Pengukuran Jarak dijelaskan langkah demi langkah dalam program C di bawah.
#include // header untuk membolehkan kawalan aliran data ke atas pin #define F_CPU 1000000 // memberitahu frekuensi kristal pengawal yang dilampirkan #masuk