- Bahan Diperlukan
- Memahami Modul Joystick:
- Rajah Litar:
- Pengaturcaraan untuk Menghadapi Joystick:
- Paparan Simulasi:
- Perkakasan dan Kerja:
Peranti input memainkan peranan penting dalam sebarang projek elektronik. Peranti input ini membantu pengguna untuk berinteraksi dengan dunia digital. Peranti input boleh sesederhana butang tekan atau rumit seperti layar sentuh; ia berbeza-beza berdasarkan keperluan projek. Dalam tutorial ini, kita akan belajar bagaimana mengaitkan kayu bedik dengan mikrokontroler PIC kita, kayu bedik adalah cara yang baik untuk berinteraksi dengan dunia digital dan hampir semua orang akan menggunakannya untuk bermain permainan video pada zaman remaja mereka.
Joystick nampaknya merupakan alat yang canggih, tetapi sebenarnya hanyalah gabungan dua Potensiometer dan butang tekan. Oleh itu, sangat mudah untuk berinteraksi dengan mana-mana MCU dengan syarat kita tahu bagaimana menggunakan ciri ADC MCU tersebut. Kami telah belajar bagaimana menggunakan ADC dengan PIC, oleh itu ia hanya berfungsi untuk menghubungkan Joystick. Bagi orang yang baru memilih, disarankan untuk mempelajari projek ADC di atas serta Projek LED Blinking Sequence untuk lebih mudah memahami projek tersebut.
Bahan Diperlukan
- PicKit 3 untuk pengaturcaraan
- Modul Joy Stick
- PIC16F877A IC
- 40 - Pemegang IC pin
- Papan Perf
- OSC Crystal 20 MHz
- Pin Bergstik
- Perintang 220ohm
- 5-LED pelbagai warna
- 1 kit pematerian
- IC 7805
- Penyesuai 12V
- Menyambung wayar
- Papan roti
Memahami Modul Joystick:
Joystick boleh didapati dalam pelbagai bentuk dan saiz. Modul Joystick khas ditunjukkan pada gambar di bawah. Joystick tidak lebih dari beberapa potensiometer dan butang tekan yang dipasang di atas susunan mekanikal pintar. Potensiometer digunakan untuk mengawasi pergerakan X dan Y dari kayu bedik dan butang digunakan untuk merasakan jika kayu bedik ditekan. Kedua-dua Potensiometer menghasilkan voltan analog yang bergantung pada kedudukan kayu bedik. Dan kita boleh mendapatkan arah pergerakan dengan menafsirkan perubahan voltan ini menggunakan beberapa mikrokontroler. Sebelum ini kami menghubungkan Joystick dengan AVR, Joystick dengan Arduino dan Raspberry Pi.
Sebelum menghubungkan sebarang sensor atau modul dengan pengawal mikro, penting untuk mengetahui bagaimana ia berfungsi. Di sini kayu bedik kami mempunyai 5 pin output di mana dua daripadanya adalah untuk kuasa dan tiga untuk data. Modul harus dikuasakan dengan + 5V. Pin data dinamakan sebagai VRX, VRY dan SW.
Istilah "VRX" bermaksud voltan boleh ubah pada paksi X dan istilah "VRY" bermaksud voltan boleh ubah dalam paksi Y dan "SW" bermaksud suis.
Oleh itu, apabila kita menggerakkan kayu bedik ke kiri atau kanan, nilai voltan pada VRX akan berbeza-beza dan ketika kita mengubahnya naik atau turun VRY akan berbeza. Begitu juga ketika kita menggerakkannya secara menyerong, kita berdua VRX dan VRY akan berbeza. Semasa kita tekan suis pin SW akan dihubungkan ke tanah. Gambar di bawah akan membantu anda memahami nilai Output dengan lebih baik
Rajah Litar:
Setelah mengetahui bagaimana tongkat Joy berfungsi, kita dapat membuat kesimpulan bahawa kita memerlukan dua pin ADC dan satu pin input digital untuk membaca ketiga-tiga pin data modul Joystick. Gambarajah litar lengkap ditunjukkan dalam gambar di bawah
Seperti yang anda lihat dalam gambarajah litar, bukannya kayu bedik, kami telah menggunakan dua potensiometer RV1 dan RV3 sebagai input voltan analog dan input logik untuk suis. Anda boleh mengikuti label yang ditulis dengan warna ungu untuk memadankan nama pin dan membuat hubungan anda dengan sewajarnya.
Perhatikan bahawa pin Analog disambungkan ke saluran A0 dan A1 dan suis digital disambungkan ke RB0. Kami juga akan menyambungkan 5 lampu LED sebagai output, sehingga kami dapat menyalakannya berdasarkan arah joystick digerakkan. Oleh itu, pin output ini disambungkan ke PORT C dari RC0 ke RC4. Setelah menggerakkan rajah litar kami, kami dapat meneruskan pengaturcaraan, kemudian mensimulasikan program di litar ini kemudian membina litar di papan roti dan kemudian memuat naik program ke perkakasan. Untuk memberi anda idea perkakasan saya setelah membuat sambungan di atas ditunjukkan di bawah
Pengaturcaraan untuk Menghadapi Joystick:
The program untuk berhubung joystick dengan PIC adalah mudah dan lurus ke hadapan. Kami sudah mengetahui pin mana yang disambungkan Joystick dan fungsi mereka, jadi kita hanya perlu membaca voltan analog dari pin dan mengawal LED output dengan sewajarnya.
Program lengkap untuk melakukan ini diberikan di akhir dokumen ini, tetapi untuk menerangkan perkara-perkara yang saya kodkan kepada beberapa petikan kecil di bawah ini.
Seperti biasa program ini dimulakan dengan menetapkan bit konfigurasi, kita tidak akan membincangkan banyak mengenai pengaturan bit konfigurasi kerana kita sudah mempelajarinya dalam projek LED Blinking dan ia juga sama untuk projek ini. Setelah bit konfigurasi ditetapkan, kita harus menentukan fungsi ADC untuk menggunakan modul ADC dalam PIC kita. Fungsi ini juga dipelajari dalam cara menggunakan ADC dengan tutorial PIC. Selepas itu, kita harus menyatakan pin mana yang merupakan input dan yang mana pin output. Di sini LED disambungkan ke PORTC sehingga mereka adalah pin output dan Switch Switch of Joystick adalah pin input digital. Oleh itu, kami menggunakan baris berikut untuk menyatakan perkara yang sama:
// ***** Konfigurasi I / O **** // TRISC = 0X00; // PORT C digunakan sebagai port output PORTC = 0X00; // Jadikan semua pin rendah TRISB0 = 1; // RB0 digunakan sebagai input // *** Konfigurasi akhir I / O ** ///
The pin ADC tidak perlu ditakrifkan sebagai input pin kerana mereka apabila menggunakan fungsi ADC ia akan ditugaskan sebagai pin input. Setelah pin ditentukan, kita boleh memanggil fungsi ADC_initialize yang kita tentukan sebelumnya. Fungsi ini akan menetapkan daftar ADC yang diperlukan dan menyiapkan modul ADC.
ADC_Initialize (); // Konfigurasikan modul ADC
Sekarang, kita melangkah ke lingkaran sementara yang tidak terhingga. Di dalam gelung ini kita harus memantau nilai-nilai VRX, VRY dan SW dan berdasarkan nilai-nilai yang kita miliki untuk mengawal output led. Kita boleh memulakan proses pemantauan dengan membaca voltan analog VRX dan VRY dengan menggunakan garis berikut
int joy_X = (ADC_Read (0)); // Baca X-Axis joystick int joy_Y = (ADC_Read (1)); // Baca Y-Axis Joystick
Garis ini akan menyimpan nilai VRX dan VRY dalam variabel joy_X dan joy_Y masing-masing. Fungsi ADC_Read (0) bermaksud kita membaca nilai ADC dari saluran 0 yang merupakan pin A0. Kami telah menghubungkan VRX dan VRY ke pin A0 dan A1 dan oleh itu kami membaca dari 0 dan 1.
Sekiranya anda dapat mengingat kembali dari tutorial ADC kami, kami tahu bahawa kami membaca Analog Voltage yang mana PIC menjadi alat digital akan membacanya dari 0 hingga 1023. Nilai ini bergantung pada kedudukan modul joystick. Anda boleh menggunakan gambar rajah label di atas untuk mengetahui nilai yang dapat anda harapkan untuk setiap kedudukan kayu bedik.
Di sini saya telah menggunakan nilai had 200 sebagai had bawah dan nilai 800 sebagai had atas. Anda boleh menggunakan apa sahaja yang anda mahukan. Oleh itu, mari kita gunakan nilai-nilai ini dan mula menyalakan LED dengan sewajarnya. Untuk melakukan ini, kita harus membandingkan nilai joy_X dengan nilai yang telah ditentukan menggunakan gelung IF dan menjadikan pin LED tinggi atau rendah seperti yang ditunjukkan di bawah. Garis komen akan membantu anda memahami dengan lebih baik
if (joy_X <200) // Kegembiraan naik {RC0 = 0; RC1 = 1;} // Cahaya LED atas yang lain jika (kegembiraan_X> 800) // Joy turun ke bawah {RC0 = 1; RC1 = 0;} // Glow Lower LED lain // Sekiranya tidak digerakkan {RC0 = 0; RC1 = 0;} // Matikan kedua-dua led
Kita juga boleh melakukan perkara yang sama untuk nilai paksi-Y juga. Kita hanya perlu mengganti pemboleh ubah joy_X dengan joy_Y dan juga mengawal dua pin LED seterusnya seperti yang ditunjukkan di bawah. Perhatikan bahawa apabila kayu bedik tidak digerakkan, kami akan mematikan kedua-dua lampu LED.
if (joy_Y <200) // Joy bergerak ke Kiri {RC2 = 0; RC3 = 1;} // Cahaya LED kiri yang lain jika (kegembiraan_Y> 800) // Joy bergerak ke Kanan {RC2 = 1; RC3 = 0;} // Glow Right LED lain // Sekiranya tidak digerakkan {RC2 = 0; RC3 = 0;} // Matikan kedua LED
Sekarang kita mempunyai satu perkara terakhir yang perlu dilakukan, kita harus memeriksa suis jika ditekan. Pin suis disambungkan ke RB0 sehingga kita dapat lagi menggunakan loop jika dan memeriksa apakah itu dihidupkan. Sekiranya ditekan, kita akan memutar LED untuk menunjukkan bahawa suis telah ditekan.
if (RB0 == 1) // Sekiranya Joy ditekan RC4 = 1; // LED tengah cahaya lain RC4 = 0; // OFF tengah LED
Paparan Simulasi:
Projek yang lengkap dapat disimulasikan menggunakan perisian Proteus. Sebaik sahaja anda menulis program, kumpulkan kod dan pautkan kod hex simulasi ke litar. Maka anda harus perhatikan lampu LED menyala sesuai dengan kedudukan potensiometer. Simulasi ditunjukkan di bawah:
Perkakasan dan Kerja:
Setelah mengesahkan kod menggunakan Simulasi, kita dapat membina litar di papan roti. Sekiranya anda mengikuti tutorial PIC, anda pasti menyedari bahawa kami menggunakan papan perf yang sama dengan litar PIC dan 7805 yang terpateri padanya. Sekiranya anda juga berminat untuk membuatnya sehingga anda dapat menggunakannya dengan semua projek PIC anda, kemudian pasangkan litar pada papan perf. Atau anda juga boleh membina litar lengkap di papan roti juga. Setelah perkakasan selesai, ia akan menjadi seperti di bawah ini.
Sekarang muat naik kod ke mikrokontroler PIC menggunakan PICkit3. Anda boleh merujuk projek LED Blink untuk panduan. Anda harus melihat lampu kuning semakin tinggi sebaik sahaja program dimuat naik. Sekarang gunakan joystick dan ubah tombol, kerana setiap arah joystick anda akan melihat LED masing-masing tinggi. Apabila suis di tengah ditekan, ia akan mematikan LED di tengah.
Kerja ini hanyalah satu contoh, anda boleh membina banyak projek menarik di atasnya. Penyelesaian projek yang lengkap juga boleh didapati di video yang diberikan di akhir halaman ini.
Harap anda memahami projek ini dan seronok membinanya, sekiranya anda mempunyai masalah untuk melakukannya, sila hantarkannya di bahagian komen di bawah atau tulis di forum untuk mendapatkan bantuan.