Daftar Isi:

Keypad yang Dapat Diprogram: 5 Langkah (dengan Gambar)
Keypad yang Dapat Diprogram: 5 Langkah (dengan Gambar)

Video: Keypad yang Dapat Diprogram: 5 Langkah (dengan Gambar)

Video: Keypad yang Dapat Diprogram: 5 Langkah (dengan Gambar)
Video: 5 Tools AI Bikin Kerjaan 5x Lebih Cepet 2024, November
Anonim
Papan tombol yang dapat diprogram
Papan tombol yang dapat diprogram
Papan tombol yang dapat diprogram
Papan tombol yang dapat diprogram

Dalam proyek ini saya akan menunjukkan cara membuat keypad yang dapat diprogram yang relatif sederhana dan murah untuk memetakan pintasan keyboard, aplikasi, dan lainnya yang paling sering Anda gunakan.

Keypad ini terdeteksi sebagai keyboard di semua OS utama, tidak diperlukan driver tambahan.

Perlengkapan

  • Enkoder putar.
  • Banyak (tergantung kebutuhan Anda) tombol tekan.
  • Arduino Pro Micro, Arduino Leonardo atau papan dev lainnya dengan Atmega32U4 MCU.
  • Kawat, solder, besi solder, dll.
  • (Opsional) Beberapa alas yang berat untuk menjaga agar keypad tidak bergeser, saya menggunakan HDD 3,5" lama

Langkah 1: Sirkuit Listrik

Sirkuit Listrik
Sirkuit Listrik

Saya memilih menggunakan Arduino Pro Micro dev board dengan Atmega32U4 MCU yang memiliki 18 pin digital yang dapat digunakan.

Pin untuk menghubungkan tombol tekan dan rotary encoder dipilih tanpa urutan tertentu, tetapi beberapa hal harus diperhatikan:

  1. Semua pin yang mampu membaca digital memiliki pull-up internal yang memungkinkan untuk mengurangi resistor pull-down eksternal. Tentu saja kode harus diperbarui sesuai, karena mengharapkan status pin berubah dari rendah ke tinggi saat tombol ditekan.
  2. Dalam contoh perpustakaan encoder.h dicatat bahwa kinerja terbaik encoder tercapai ketika kedua pin terhubung ke pin yang mampu mengganggu MCU. Sebagian besar pin analog Atmega32U4 tidak memiliki kemampuan interupsi.
  3. Nilai resistor pull-down yang tepat tidak terlalu menjadi masalah, apa pun dari 1 kΩ hingga 100 kΩ akan berfungsi dengan baik. Nilai resistansi yang lebih besar memungkinkan disipasi daya yang lebih kecil tetapi menghasilkan respons pin yang lebih lambat terhadap perubahan tegangan. Pilih saja resistor nilai apa pun yang paling Anda miliki.
  4. Encoder mekanis bukanlah hal yang paling dapat diandalkan karena kontak yang aus dan memantul. Itu sebabnya solusi debouncing yang baik diperlukan. Nilai kapasitor pilihan saya dan waktu tunda dalam kode mungkin tidak akan memberikan hasil terbaik untuk Anda. Jadi perlu sedikit eksperimen. Atau beralih ke sesuatu seperti encoder optik, tetapi harganya jauh lebih tinggi.

Langkah 2: Perakitan

perakitan
perakitan
perakitan
perakitan
perakitan
perakitan
perakitan
perakitan

Saya ingin membuat keypad sebersih mungkin, jadi saya menyolder semua komponen di bagian belakang papan prototipe. Saya pikir keypad akan lebih ergonomis jika digunakan ditinggikan pada sudut kecil. Itu sebabnya saya menyolder Arduino Pro Micro pada papan terpisah dan menghubungkan semua pin digital dengan kabel untuk menekan tombol. Lebih nyaman untuk menghubungkan kabel USB seperti itu.

Saya menemukan HDD lama 3,5 untuk digunakan sebagai dasar keypad, cukup berat dan mencegah bentuk papan meluncur di atas meja saat beroperasi (bantalan anti-selip juga membantu). Juga memiliki lubang sekrup 3 mm yang nyaman di mana saya memasang standoff kuningan dan memperbaiki papan sedikit miring.

Langkah 3: Pemrograman

Kode ditulis dengan Arduino IDE. Anda perlu menginstal 2 perpustakaan:

  • Encoder oleh Paul Stoffregen
  • Keyboard oleh Arduino

Untuk mengkompilasi untuk Atmega32U4 Anda juga perlu menginstal file board Arduino Pro Micro, Sparkfun memiliki tutorial yang bagus tentang cara melakukannya.

Satu hal yang perlu diperhatikan sebelumnya adalah berhati-hati untuk tidak membiarkan "tombol ditekan" dalam kode Anda. Ini terjadi pada saya dan MCU terus-menerus mengirim spam beberapa kombinasi tekan tombol. Satu-satunya cara saya mengetahui cara memperbaikinya adalah dengan membakar ulang boot-loader ke MCU. Jika Anda akan berakhir seperti saya, Anda dapat mengikuti panduan ini untuk membakar boot-loader, Anda akan memerlukan papan arduino lain untuk digunakan sebagai programmer.

Dalam loop utama MCU pertama-tama membaca setiap status tombol tekan, jika perubahan status dari LOW ke HIGH terdeteksi, fungsi keyboard_shortcut(i) dijalankan. Variabel i adalah id dari tombol yang ditekan, jumlah tombol tekan total ditentukan oleh ALL_BUTTONS (dalam kasus saya 15). Saat dijalankan, keyboard_shortcut(i) mengirimkan CTRL+SHIFT dan kemudian huruf yang dipetakan ke id tombol: 1->A, 2->B, 3->C dll. Beberapa kombinasi seperti CTRL+SHIFT+N dihilangkan karena sudah digunakan di Windows10 secara default (dalam hal ini untuk membuat folder baru). Berikut adalah daftar semua pintasan Windows default. Setelah penundaan singkat MCU mengirimkan sinyal untuk melepaskan semua tombol dan fungsi keluar kembali ke loop utama.

Setelah semua tombol diperiksa, MCU memeriksa apakah posisi rotary encoder berubah dan jika ya, keyboard_shortcut(i) dijalankan dengan id unik.

Tekan tombol encoder membalikkan variabel boolean encoderButtonFlag. Ketika encoder diputar, pintasan yang berbeda dikirim ke PC, tergantung pada arah rotasi dan nilai encoderButtonFlag.

Jika debugFlag disetel ke 1 pesan debug dikirim melalui UART ke monitor serial.

Langkah 4: Mengonfigurasi Pintasan

Mengonfigurasi Pintasan
Mengonfigurasi Pintasan
Mengonfigurasi Pintasan
Mengonfigurasi Pintasan

Apa yang dilakukan setiap pintasan terserah Anda, kita semua memiliki preferensi yang berbeda. Saya akan memberikan pintasan apa yang saya konfigurasikan untuk diri saya sendiri sebagai contoh. Saya menggunakan Linux Mint 19.3 dengan manajer desktop xfce4, jadi contoh saya terutama melibatkan skrip bash, tetapi saya akan menunjukkan beberapa contoh dasar untuk Windows10 juga.

Pada gambar pertama Anda dapat melihat skrip mana yang saya petakan ke pintasan mana. Ini dilakukan dari menu pengaturan xfce, proses untuk ini lurus ke depan. Anda dapat menemukan skrip ini di repositori GitHub saya

6 tombol push yang lebih kecil di bagian bawah adalah untuk memulai aplikasi seperti browser web atau pengelola file, beberapa aplikasi ini dipanggil dari skrip start_only_one_app.sh, yang mendapatkan semua nama aplikasi yang dimulai dan mencari aplikasi yang ingin Anda mulai. Jika jendela aplikasi sudah ada, ia akan fokus, jika tidak, instance aplikasi baru akan dimulai.

Script lainnya:

  • 2nd_display_control.sh - menghidupkan/mematikan monitor kedua.
  • moon_lamp.sh - menyalakan/mematikan Lampu Bulan saya.
  • pc_load.sh - membuat gelembung notifikasi dengan penggunaan dan suhu CPU dan GPU saat ini.
  • shutdown.sh - menginisialisasi shutdown PC dengan penundaan 1 menit dan membuat gelembung pemberitahuan di mana waktu yang tersisa ditampilkan.
  • spec_vpn.sh - terhubung ke server OpenVPN tertentu atau jika koneksi sudah ada, terputus dari server.
  • shortcut_controll.sh - mengambil perintah (plus, minus, tab, close) sebagai argumen, mendeteksi jendela apa yang sekarang difokuskan dan jika aplikasi tertentu ditemukan aktif menjalankan tindakan kontrol. Misalnya untuk membuka tab baru di pintasan default editor teks luhur adalah "CTRL+N" dan di terminal xfce - "CTRL+T", jadi skrip ini memungkinkan untuk membuka tab baru di luhur dan terminal dengan tombol tekan yang sama.

Fungsi pertama dari rotary encoder adalah untuk mengontrol volume, fungsi kedua adalah untuk mengontrol zoom jendela aktif melalui shortcut_controll.sh.

Untuk OS Windows Anda dapat memetakan pintasan ke aplikasi melalui jendela properti program seperti yang ditunjukkan pada gambar kedua. Untuk hal lain Anda akan ingin menggunakan AutoHotkey. Ini bahasa scripting otomatisasi untuk Windows.

Beberapa contoh sederhana sintaks AHK:

;Pengatur suara

^+t::Kirim {Volume_Up}

kembali

^+v:: Kirim {Volume_Down}

kembali

;Tutup jendela aktif

^+h::WinGetTitle, Judul, A

PostMessage, 0x112, 0xF060,,, %Title%

kembali

;Matikan PC

^+b::Jalankan shutdown /s

Langkah 5: Peningkatan

Perbaikan
Perbaikan

Beberapa kemungkinan perbaikan:

  • Tombol tekan berkualitas lebih baik.
  • Prototipe PCB cukup banyak melentur saat tombol ditekan.
  • Pencahayaan RGB untuk mengubah warna tergantung pada fungsi rotary encoder yang diatur.
  • Lebih banyak tombol (gunakan IC expander IO).
  • Rotary encoder yang lebih baik (atau solusi debouncing yang lebih baik).

Direkomendasikan: