- Material Diperlukan
- Memahami Modul Joystick:
- Diagram Sirkuit:
- Pemrograman untuk Menghubungkan Joystick:
- Tampilan Simulasi:
- Perangkat Keras dan Bekerja:
Perangkat input memainkan peran penting dalam proyek elektronik apa pun. Perangkat input ini membantu pengguna untuk berinteraksi dengan dunia digital. Perangkat input bisa sesederhana menekan tombol atau serumit layar sentuh; itu bervariasi berdasarkan kebutuhan proyek. Dalam tutorial ini kita akan belajar bagaimana menghubungkan joystick dengan mikrokontroler PIC kita, joystick adalah cara yang keren untuk berinteraksi dengan dunia digital dan hampir semua orang akan menggunakannya untuk bermain video game di usia remaja mereka.
Joystick mungkin tampak seperti perangkat yang canggih, tetapi sebenarnya ini hanya kombinasi dari dua Potensiometer dan tombol tekan. Oleh karena itu, sangat mudah untuk berinteraksi dengan MCU mana pun asalkan kami tahu cara menggunakan fitur ADC dari MCU itu. Kami telah belajar bagaimana menggunakan ADC dengan PIC, oleh karena itu ini hanya akan menjadi solusi untuk menghubungkan Joystick. Bagi orang yang baru mengenal pickit disarankan untuk mempelajari project ADC diatas serta LED Blinking Sequence Project agar lebih mudah dalam memahami project tersebut.
Material Diperlukan
- PicKit 3 untuk pemrograman
- Modul Joy Stick
- IC PIC16F877A
- 40 - Pin IC pemegang
- Papan kinerja
- 20 MHz Crystal OSC
- Pin bergstik
- Resistor 220ohm
- 5-LED warna apapun
- 1 Kit solder
- IC 7805
- Adaptor 12V
- Menghubungkan kabel
- Papan tempat memotong roti
Memahami Modul Joystick:
Joystick tersedia dalam berbagai bentuk dan ukuran. Modul Joystick tipikal ditunjukkan pada gambar di bawah ini. Joystick tidak lebih dari sepasang potensiometer dan tombol tekan yang dipasang di atas pengaturan mekanis yang cerdas. Potensiometer digunakan untuk melacak pergerakan X dan Y joystick dan tombol digunakan untuk mendeteksi jika joystick ditekan. Kedua Potensiometer mengeluarkan tegangan analog yang bergantung pada posisi joystick. Dan kita bisa mendapatkan arah pergerakan dengan menginterpretasikan perubahan tegangan tersebut menggunakan beberapa mikrokontroler. Sebelumnya kami menghubungkan Joystick dengan AVR, Joystick dengan Arduino dan Raspberry Pi.
Sebelum menghubungkan sensor atau modul apa pun dengan mikrokontroler, penting untuk mengetahui bagaimana fungsinya. Di sini joystick kami memiliki 5 pin keluaran di mana dua untuk daya dan tiga untuk data. Modul harus diberi daya dengan + 5V. Pin data diberi nama sebagai VRX, VRY dan SW.
Istilah "VRX" adalah singkatan dari Variable voltage pada sumbu X dan istilah "VRY" adalah singkatan dari Variable voltage pada sumbu Y dan "SW" adalah singkatan dari switch.
Jadi ketika kita menggerakkan joystick ke kiri atau ke kanan nilai tegangan pada VRX akan bervariasi dan saat kita memvariasikannya naik atau turun VRY akan bervariasi. Demikian pula ketika kita memindahkannya secara diagonal, kita baik VRX dan VRY akan berbeda. Saat kita menekan saklar maka pin SW akan terhubung ke ground. Gambar di bawah ini akan membantu Anda memahami nilai Output dengan lebih baik
Diagram Sirkuit:
Sekarang setelah kita mengetahui cara kerja Joystick, kita dapat sampai pada kesimpulan bahwa kita membutuhkan dua pin ADC dan satu pin input digital untuk membaca ketiga pin data modul Joystick. Diagram rangkaian lengkapnya terlihat pada gambar di bawah ini
Seperti yang Anda lihat pada diagram rangkaian, alih-alih joystick, kami telah menggunakan dua potensiometer RV1 dan RV3 sebagai input tegangan analog dan input logika untuk sakelar. Anda dapat mengikuti label yang ditulis dengan warna ungu untuk mencocokkan nama pin dan membuat koneksi yang sesuai.
Perhatikan bahwa pin Analog terhubung ke saluran A0 dan A1 dan sakelar digital terhubung ke RB0. Kami juga akan memiliki 5 lampu LED yang dihubungkan sebagai output, sehingga kami dapat menyalakannya berdasarkan arah gerakan joystick. Jadi pin keluaran ini dihubungkan ke PORT C dari RC0 ke RC4. Setelah kita menggeser diagram rangkaian kita, kita dapat melanjutkan dengan pemrograman, kemudian mensimulasikan program pada sirkuit ini kemudian membangun sirkuit pada papan tempat memotong roti dan kemudian mengunggah program ke perangkat keras. Untuk memberi Anda gambaran tentang perangkat keras saya setelah membuat koneksi di atas, ditunjukkan di bawah ini
Pemrograman untuk Menghubungkan Joystick:
The program untuk antarmuka joystick dengan PIC sederhana dan lurus ke depan. Kita sudah tahu pin mana yang terhubung ke Joystick dan apa fungsinya, jadi kita hanya perlu membaca tegangan analog dari pin dan mengontrol LED output yang sesuai.
Program lengkap untuk melakukan ini diberikan di akhir dokumen ini, tetapi untuk menjelaskan hal-hal saya memecah kode menjadi cuplikan kecil yang berarti di bawah ini.
Seperti biasa program dimulai dengan mengatur bit konfigurasi, kita tidak akan banyak membahas tentang pengaturan bit konfigurasi karena kita telah mempelajarinya di proyek LED Blinking dan itu sama untuk proyek ini juga. Setelah bit konfigurasi diatur, kita harus menentukan fungsi ADC untuk menggunakan modul ADC di PIC kita. Fungsi ini juga dipelajari dalam tutorial cara menggunakan ADC dengan PIC. Setelah itu, kita harus mendeklarasikan pin mana yang merupakan input dan pin output. Disini LED dihubungkan ke PORTC jadi pin output dan pin Switch Joystick adalah pin input digital. Jadi kami menggunakan baris berikut untuk menyatakan hal yang sama:
// ***** Konfigurasi I / O **** // TRISC = 0X00; // PORT C digunakan sebagai port keluaran PORTC = 0X00; // Jaga semua pin rendah TRISB0 = 1; // RB0 digunakan sebagai input // *** Akhir dari konfigurasi I / O ** ///
The pin ADC tidak perlu didefinisikan sebagai masukan pin karena mereka saat menggunakan fungsi ADC akan ditugaskan sebagai masukan pin. Setelah pin ditentukan, kita dapat memanggil fungsi ADC_initialize yang telah kita definisikan sebelumnya. Fungsi ini akan mengatur register ADC yang diperlukan dan menyiapkan modul ADC.
ADC_Initialize (); // Konfigurasi modul ADC
Sekarang, kita masuk ke loop sementara tak terbatas. Di dalam loop ini kita harus memantau nilai VRX, VRY dan SW dan berdasarkan nilai tersebut kita harus mengontrol output led. Kita dapat memulai proses pemantauan dengan membaca tegangan analog VRX dan VRY dengan menggunakan baris di bawah ini
int joy_X = (ADC_Read (0)); // Baca X-Axis dari joystick int joy_Y = (ADC_Read (1)); // Baca Y-Axis Joystick
Baris ini akan menyimpan nilai VRX dan VRY masing-masing di variabel joy_X dan joy_Y . Fungsi ADC_Read (0) artinya kita membaca nilai ADC dari channel 0 yaitu pin A0. Kami telah menghubungkan VRX dan VRY ke pin A0 dan A1 sehingga kami membaca dari 0 dan 1.
Jika Anda ingat dari tutorial ADC kami, kami tahu bahwa kami membaca Tegangan Analog PIC menjadi perangkat digital akan membacanya dari 0 hingga 1023. Nilai ini tergantung pada posisi modul joystick. Anda dapat menggunakan diagram label di atas untuk mengetahui nilai apa yang dapat Anda harapkan untuk setiap posisi joystick.
Di sini saya telah menggunakan nilai batas 200 sebagai batas bawah dan nilai 800 sebagai batas atas. Anda dapat menggunakan apapun yang Anda inginkan. Jadi mari kita gunakan nilai-nilai ini dan mulai menyalakan LED yang sesuai. Untuk melakukan ini kita harus membandingkan nilai joy_X dengan nilai yang telah ditentukan menggunakan loop IF dan membuat pin LED tinggi atau rendah seperti yang ditunjukkan di bawah ini. Baris komentar akan membantu Anda untuk lebih memahami
if (joy_X <200) // Joy naik {RC0 = 0; RC1 = 1;} // Menyalakan LED atas lain jika (joy_X> 800) // Joy bergerak ke bawah {RC0 = 1; RC1 = 0;} // Glow Lower LED else // Jika tidak dipindahkan {RC0 = 0; RC1 = 0;} // Matikan kedua led
Kita juga bisa melakukan hal yang sama untuk nilai sumbu Y. Kita hanya perlu mengganti variabel joy_X dengan joy_Y dan juga mengontrol dua pin LED berikutnya seperti gambar di bawah ini. Perhatikan bahwa saat joystick tidak digerakkan, kami mematikan kedua lampu LED.
if (joy_Y <200) // Joy pindah ke Kiri {RC2 = 0; RC3 = 1;} // Menyala kiri LED lain if (joy_Y> 800) // Joy pindah Kanan {RC2 = 1; RC3 = 0;} // Glow Right LED lain // Jika tidak dipindahkan {RC2 = 0; RC3 = 0;} // Matikan kedua LED
Sekarang kita memiliki satu hal terakhir yang harus dilakukan, kita harus memeriksa sakelar jika ditekan. Pin sakelar terhubung ke RB0 sehingga kami dapat kembali menggunakan if loop dan memeriksa apakah sudah aktif. Jika sudah ditekan kita akan mematikan LED yang menandakan bahwa saklar sudah ditekan.
if (RB0 == 1) // Jika Joy ditekan RC4 = 1; // Bersinar LED tengah lain RC4 = 0; // MATI LED tengah
Tampilan Simulasi:
Proyek lengkap dapat disimulasikan menggunakan perangkat lunak Proteus. Setelah Anda menulis program, kompilasi kode dan tautkan kode hex dari simulasi ke rangkaian. Maka Anda harus memperhatikan lampu LED menyala sesuai dengan posisi potensiometer. Simulasi ditunjukkan di bawah ini:
Perangkat Keras dan Bekerja:
Setelah memverifikasi kode menggunakan Simulasi, kita dapat membangun sirkuit di papan roti. Jika Anda telah mengikuti tutorial PIC, Anda akan memperhatikan bahwa kami menggunakan papan perf yang sama yang memiliki PIC dan sirkuit 7805 yang disolder padanya. Jika Anda juga tertarik untuk membuatnya sehingga Anda menggunakannya dengan semua proyek PIC Anda, solder sirkuit tersebut pada papan perf. Atau Anda juga bisa membangun sirkuit lengkap di papan tempat memotong roti juga. Setelah perangkat keras selesai, itu akan menjadi seperti ini di bawah ini.
Sekarang unggah kode ke mikrokontroler PIC menggunakan PICkit3. Anda dapat merujuk proyek LED Blink untuk panduan. Anda akan melihat lampu kuning menyala segera setelah program diunggah. Sekarang gunakan joystick dan variasikan kenopnya, untuk setiap arah joystick Anda akan melihat masing-masing LED menjadi tinggi. Saat tombol di tengah ditekan, maka LED di tengah akan mati.
Pekerjaan ini hanyalah sebuah contoh, Anda dapat membangun banyak proyek menarik di atasnya. Pekerjaan lengkap proyek juga dapat ditemukan di video yang diberikan di akhir halaman ini.
Harap Anda memahami proyek ini dan menikmati membangunnya, jika Anda memiliki masalah dalam melakukannya, silakan posting di bagian komentar di bawah atau tulis di forum untuk mendapatkan bantuan.