Isi kandungan:

Osu! Papan Kekunci: 8 Langkah (dengan Gambar)
Osu! Papan Kekunci: 8 Langkah (dengan Gambar)

Video: Osu! Papan Kekunci: 8 Langkah (dengan Gambar)

Video: Osu! Papan Kekunci: 8 Langkah (dengan Gambar)
Video: Salah Satu Keyboard Laptop Mu Ada yg Bermasalah & Ga bisa di Ketik? Jangan Panik, Lakukan Cara Ini! 2024, Julai
Anonim
Osu! Papan Kekunci
Osu! Papan Kekunci

Saya baru-baru ini mula bermain permainan irama yang dipanggil osu! dan setelah melihat video papan kekunci mini komersial, saya fikir akan menjadi projek yang menyeronokkan untuk merancang sendiri. Tidak lama selepas itu saya memutuskan akan menjadi idea yang baik untuk meletakkannya pada instruksional sebagai projek pertama saya.

Sekiranya anda ingin meniru projek ini tepat kepada arahan terakhir maka jadilah tetamu saya, tetapi beberapa keputusan yang saya buat tidak berdasarkan pada harga terendah atau kualiti terbaik. Beberapa komponen dipilih hampir semata-mata kerana saya meletakkannya di sekitar. Sekiranya anda dapat mengatasinya, saya akan mendorong anda untuk menyesuaikan projek anda.

Catatan 1: Komponen SMD (elektronik kecil) digunakan jadi jika anda meniru projek ini, kemahiran pematerian diperlukan. mungkin versi yang mudah disolder akan ditambah tetapi led ini tidak terdapat dalam bungkusan lubang

Catatan 2: Saya telah mengemas kini kod beberapa kali dan menggunakan versi 3ish sekarang. Saya akan meninggalkan semua kod dalam talian tetapi saya cadangkan anda menggunakan versi terakhir. Pada masa ini tidak mempunyai fungsi yang dipimpin tetapi ia harus menjadi yang terbaik.

Langkah 1: Bahan dan Penjelasan

Bahan dan Penjelasan
Bahan dan Penjelasan

Bergantung pada bagaimana anda membuat projek, anda mungkin memerlukan komponen yang berbeza, tetapi komponen ini adalah komponen yang saya gunakan. Sekiranya anda mempunyai masa dan ingin menjimatkan wang, pesan borang aliexpress dan jangan memesan PCB.

1 Kabel mikro + USB Arduino pro

3 suis merah Kailh BOX

3 perintang 10k (0805 SMD)

3 kapasitor 100nF (0805 SMD)

4 APA102 rgb LED (5050 SMD)

3 Kekunci Kekunci

1 Papan litar bercetak (PCB) disediakan dalam projek ini

1 cetakan 3D yang disediakan dalam projek ini

Mengapa saya menggunakan mikro Arduino pro?

Sebilangan besar papan arduino seperti Uno (Atmega328) tidak mempunyai sokongan asli untuk komunikasi USB. Ya, anda boleh memprogramkannya melalui USB dengan sangat mudah dan saya rasa ada jalan keluarnya, tetapi saya ingin mempermudahnya dalam komunikasi USB dan saya tidak tahu apakah penyelesaiannya begitu responsif. Papan tersebut menggunakan cip luaran untuk membuat komunikasi USB dapat dilakukan sedangkan Arduino pro mikro (Atmega32U4) telah dibina.

Suis

Terdapat banyak suis mekanikal yang boleh anda gunakan. Linear, taktil atau klik dari Kailh atau Cherry MX. Pilih mana yang anda suka. Saya menggunakan suis Kailh kerana ia murah di Ailexpress. Sekiranya anda memilih untuk menggunakan PCB, anda memerlukan suis Kailh BOX. Warna menentukan perasaan.

Komponen elektronik

Tidak banyak yang dapat dijelaskan mengenai perkara ini dalam bab ini, tetapi jika anda tidak menggunakan PCB, saya akan mengesyorkan hanya komponen lubang melalui normal untuk kemudahan pematerian. Sayangnya led yang digunakan tidak terdapat dalam bungkusan lubang melalui. Saya juga tidak mengesyorkan untuk menggunakan wayar pada pakej SMD melainkan anda sangat yakin dengan kemahiran menyolder anda. Malah untuk SMD pada kemahiran pematerian "maju" PCB diperlukan.

Perumahan

Saya memang menyediakan perumahan dalam projek ini, tetapi pada masa ini cacat. Modifikasi diperlukan untuk memasang bolt, bukaan untuk led tidak optimum, arduino terdedah dan bahagiannya perlu dipotong agar USB tidak sesuai. Di masa depan perumahan baru mungkin ditambah. Sekiranya anda mempunyai pencetak 3D, cetaklah, tetapi jangan sesekali mencetak kes cacat ini jika anda tidak menggunakan kotak projek.

Langkah 2: Skematik

Skema
Skema

Skema untuk projek ini agak mudah, tetapi saya ingin menerangkan komponen untuk orang yang berminat dan tidak mengetahui pelaksanaannya.

Tukar sambungan ke Arduino

Suis disambungkan ke pin Arduino 0, 2 dan 3 kerana pin tersebut boleh digunakan sebagai gangguan luaran. Ini dijelaskan lebih lanjut di bahagian kod.

Litar debounce

Di sebelah kiri skema adalah litar yang disalin sebanyak 3 kali. Litar ini digunakan untuk melepaskan suis. Untuk mengetahui debouncing apa yang anda perlukan untuk memahami beralih memantul dan tidak sukar untuk difahami.

Lihat dahulu simulasi ini untuk melukis gambar pertama (klik suis dengan pantas dan lihat isyarat di bawah)

Apabila anda menekan atau melepaskan suis ia melambung dan isyarat anda bergantian antara tinggi dan rendah beberapa kali selama beberapa milisaat. Arduino sangat pantas dan membaca setiap tinggi dan rendah dalam masa yang singkat ini. Program ini akan menghantar tekan atau melepaskan setiap kali bacaan tinggi atau rendah dibaca sehingga setiap tekan komputer anda akan menerima beberapa penekanan kekunci. Tidak sesuai untuk permainan irama.

Litar debounce ini akan melambatkan pinggir isyarat yang jatuh. Isyarat ke Arduino tidak akan dapat berubah secepat melantun berlaku sehingga akan dibaca sebagai satu tekan. Jangan bimbang bahawa ia akan menjadi lambat untuk akhbar sebenar seterusnya kerana ia akan berlaku.

Lanjutan:

Atmaga32U4 membaca rendah digital pada 0.2Vcc - 0.1V = 0.9 volt. Voltan kapasitor pada bila-bila masa dalam pelepasannya adalah Vcc * e ^ (- t / RC). Sekiranya anda mengukur masa penurunan yang berbeza pada suis anda, anda boleh mengira nilai perintang dan kapasitor anda.

borang formula

LED

LED rgb adalah LED APA102 yang boleh dialamatkan secara individu menggunakan jam dan garis data. Tidak ada komponen luaran yang diperlukan untuk membuatnya berfungsi. Untuk banyak LED, anda harus menggunakan kapasitor selari dengan 5 volt dan tanah tetapi dengan hanya 4 LED anda tidak memerlukannya.

Langkah 3: Reka Bentuk Papan

Reka Bentuk Papan
Reka Bentuk Papan

PCB dirancang dalam JLCPCB. Saya tidak ditaja oleh mereka tetapi untuk prototaip murah mereka membuat PCB yang sangat baik. Untuk 2 dolar, anda mendapat 10 papan yang sama, tetapi penghantaran adalah sekitar 11 dolar untuk saya. Sekiranya anda tidak memerlukan pencahayaan rgb dan merancang untuk membuatnya, anda harus mempertimbangkan untuk membuat papan kekunci anda tanpa PCB.

Reka bentuk papan itu agak lurus ke hadapan. Saya hanya perlu menambahkan komponen untuk suis, tetapi setelah menonton beberapa video, saya mendapat perhatian. Satu-satunya kelemahan yang saya sedar ialah penempatan lubang terlalu dekat dengan suis.

Untuk memesan PCB, pergi ke https://jlcpcb.com/ dan pilih pilihan berlapis 2. Ia akan meminta fail Gerber kepada anda. muat turun fail ".zip" dan seret ke tetingkap. Anda tidak perlu menyahzipnya. Tetapan harus baik dan anda boleh meneruskan dan menyelesaikan pesanan.

Langkah 4: Reka Bentuk Kes dan Petua Pemasangan

Petua Reka Bentuk Kes dan Pemasangan
Petua Reka Bentuk Kes dan Pemasangan
Petua Reka Bentuk Kes dan Pemasangan
Petua Reka Bentuk Kes dan Pemasangan
Petua Reka Bentuk Kes dan Pemasangan
Petua Reka Bentuk Kes dan Pemasangan
Petua Reka Bentuk Kes dan Pemasangan
Petua Reka Bentuk Kes dan Pemasangan

Reka bentuk

Seperti yang disebutkan sebelumnya, reka bentuk saya cacat tetapi anda masih boleh mencetaknya jika anda mahu. reka bentuknya dibuat di Fusion 360. Ini adalah perisian pemodelan 3D percuma dan dengan pengalaman saya dari pencipta dan kerja padu ia cukup mudah untuk digunakan. Lingkaran di sudut casing adalah untuk mengelakkan pengelupasan dari cetakan.

Sekiranya anda membuat kes anda sendiri, hanya satu perkara yang sangat penting. Suis anda mesti diletakkan dengan kuat dan tidak dapat bergerak. Saya telah memberikan gambar potongan persegi dengan dimensi supaya anda dapat menggunakannya untuk reka bentuk anda sendiri dengan andaian anda menggunakan suis Kailh BOX.

perhimpunan

Sekarang anda mempunyai semua komponen yang diperlukan untuk dipasang. Terdapat perintah untuk memasang versi pertama ini kerana suisnya disolder.

1. Memateri komponen SMD. ini adalah perintang, kapasitor dan LED.

2. Solder mikro pro Arduino.

3. Letakkan 3 suis di pelindung penutup bercetak 3D sebelum pematerian. Pelindung penutup tidak dapat dilepaskan setelah menyolder suis. Pemutus suis tidak disarankan dan boleh memusnahkannya.

4. Sekarang pasangkan suis di tempatnya. Lakukan ini secepat mungkin kerana suis plastik boleh mencair dan merosakkannya atau mengurangkan jumlah klik mereka secara drastik.

5. Letakkan pelindung penutup yang dipasang dalam bekas bercetak 3D dan selamatkan dengan pita atau gunakan selak jika tidak mengganggu papan kekunci.

6. Letakkan keyCaps pada suis dan anda sudah selesai.

Pengesyoran

Turunkan atau tutupi LED di arduino setelah memuat naik kod anda. LED bagus jika kod anda tidak memuat naik tetapi tidak bagus untuk dilihat sebagai produk siap. Kemahiran dan pinset runcing diperlukan.

Beberapa kaki cengkaman di bahagian bawahnya bagus untuk anti slip dan membiarkan cahaya rgb menyala.

Langkah 5: Kod V1 (Penolakan perkakasan)

Kod V1 (Penolakan perkakasan)
Kod V1 (Penolakan perkakasan)
Kod V1 (Penolakan perkakasan)
Kod V1 (Penolakan perkakasan)

Kod untuk projek ini tidak mesra pemula jadi jika anda baru memulakan program di arduino maka kod ini mungkin sedikit menakutkan anda. Namun saya akan cuba menerangkan apa yang berlaku dengan sebaik mungkin. Beberapa perkara dijelaskan kemudian di tex ini, jadi jika anda mempunyai pertanyaan, sila baca keseluruhannya terlebih dahulu.

Memuat naik kod

Pertama-tama muat turun semua 3 ".ino" fail dan masukkan ke dalam satu folder. Sekiranya anda tidak mempunyai IDE Arduino, muat turun secara percuma di laman web rasmi arduino.

Sambungkan Arduino ke PC anda dan buka "OSU_Keyboard_code_V1.ino". Di Papan Alat pilih "Arduino / Genuino Micro". Juga di Alat pilih port COM yang betul. Ini kadang-kadang boleh berubah. Untuk memuat naik kod ke Arduino anda, klik pada anak panah di kiri atas skrin dan tunggu sehingga ia memberitahu anda selesai di sebelah kiri bawah.

OSU_Keyboard_code_V1

Termasuk dan menentukan

Mula-mula anda perlu memasukkan pustaka Papan Kekunci. Ini memungkinkan untuk menggunakan Arduino sebagai papan kekunci.

Seterusnya saya menentukan beberapa nilai. Tentukan sama seperti pemboleh ubah tetapi mereka tidak dapat berubah semasa program dijalankan. 9 yang pertama adalah untuk watak papan kekunci, nombor pin arduino dan bit port.

Kemudian bit data dan jam LED.

Juga bilangan led ditentukan dan pemboleh ubah untuk sudut roda warna.

Persediaan

Bahagian kod ini hanya akan dilaksanakan sekali apabila arduino dipasang.

Mula-mula jam dan pin data LED ditetapkan sebagai output dan pin suis sebagai input. Ini adalah versi lanjutan pinMode (). Sekiranya anda berminat cari "manipulasi port langsung".

Keyboard.begin () hanya memulakan sambungan usb sebagai papan kekunci.

3 gangguan seterusnya dihubungkan ke pin suis. Setiap kali perubahan dikesan pada pin suis, program kecil akan dijalankan. Program kecil ini akan dibuat lebih jauh lagi.

Gelung

Bahagian ini akan terus berulang semasa arduino dihidupkan.

Saya hanya menggunakannya untuk menukar dan mengemas kini warna LED.

Mengganggu

Di sini program kecil, yang hanya akan dilaksanakan apabila perubahan dikesan pada pin suis, dibuat. Mereka sama kecuali pin mana mereka bertindak balas.

Mula-mula ia memeriksa apakah butang ditekan atau dilepaskan dan mengirimkan arahan papan kekunci yang betul.

LED (dijelaskan dalam urutan yang berbeza)

Sekiranya anda ingin tahu bagaimana LED dikendalikan, anda harus melihat lembaran data APA102.

OneBit

Ini sekali lagi merupakan versi manipulasi port langsung dari penulisan digital.

Mula-mula ia memeriksa sama ada ia harus menghantar 0 atau 1 dan masing-masing menarik pin data rendah atau tinggi. Kemudian ia menulis pin jam tinggi sangat pendek dan menulisnya rendah lagi.

OneByte

Ini berulang satuBit 8 kali dengan gelung "untuk". Ia membaca bit pertama dalam bait dan meneruskan nilainya ke fungsi oneBit dan melakukan perkara yang sama untuk 7 bit seterusnya.

LedData

Ini mengulangi oneByte 4 kali untuk menyediakan data yang diperlukan untuk satu led. Byte pertama bermula dengan 111xxxxx dan nilai kecerahan 5 bit di tempat xxxxx. Kecerahan dapat diatur dari 0 hingga 31 (2 ^ 5 = 32 tahap).

3 bait seterusnya adalah untuk nilai biru, hijau dan merah. Satu bait untuk setiap warna.

ColorWheelThisLed

Fungsi ini memanggil ledData memberikan warna rgb bergantung pada sudut pada roda warna.

Nilai 16 bit adalah dividen dalam 6 bahagian yang sama jaraknya 60 darjah. Melihat gambar mungkin dapat membantu anda memahami dengan lebih baik.

(versi 8 bit juga disediakan tetapi dikomentari kerana terlalu berkelip-kelip)

StartEndFrame

Rangka permulaan perlu digunakan setiap kali anda ingin menghantar warna baru ke led dan ingin mengemas kini warna led yang sebenarnya

Saya hanya menggunakan bingkai permulaan kerana kerangka akhir tidak diperlukan. Rangka permulaan ialah 4 bait 0. Bingkai akhir ialah 4 bait 255 (11111111).

Langkah 6: Kod V2 (perisian Menurunkan Masa Dengan Pemasa)

Kod V2 (perisian Menyahtinjal Dengan Pemasa)
Kod V2 (perisian Menyahtinjal Dengan Pemasa)

Setelah beberapa ketika bermain, saya dapati ada masalah mengetuk dua kali dengan penurunan perkakasan. Ini boleh diperbaiki dengan beberapa perintang nilai atau kapasitor yang lain, tetapi kerana butang dan penutupnya tidak dapat ditanggalkan, saya fikir perisian yang dilancarkan akan menjadi penyelesaian yang baik. Penolakan perisian harus berfungsi sama ada penolakan perkakasan dilaksanakan atau tidak. Dalam persediaan semasa saya tidak melepaskan penutup jadi saya membiarkan perintang dan kapasitor di tempatnya.

Saya tidak akan menerangkan kodnya secara meluas seperti versi sebelumnya kerana agak sukar untuk dijelaskan.

Pada dasarnya kebanyakan kod berfungsi sama dan kod led tidak tersentuh. apa yang berubah ialah gangguan luaran tidak lagi menggunakan fungsi arduino. Sekarang ia berfungsi dalam kod C tulen. Dan sekarang yang ditambahkan adalah gangguan perisian. Untuk ini saya menggunakan pemasa AVR untuk menunggu sejumlah masa sehingga pantulan berhenti. Kerana pemasa terganggu berdasarkan waktu penolakan tidak dipengaruhi oleh apa-apa yang berlaku dalam gelung.

Satu-satunya kelemahan yang dapat saya hadapi ialah fungsi penundaan arduino tidak dapat digunakan lagi. Kerana fungsi kelewatan menggunakan Pemasa 0 dan program ini menggunakan Pemasa 0 untuk menolak.

Dalam gambar anda dapat melihat bagaimana kodnya berfungsi secara kasar. Mem bit menunjukkan jika pemasa sedang berjalan. Apa yang tidak digambarkan adalah bahawa pada akhir butang tekan inputnya rendah. Dalam kes ini, hanya tekan tombol yang akan dihantar semasa butang sudah dilepaskan. Yang bermaksud kuncinya akan diturunkan sejauh komputer berkenaan. Untuk pengecualian yang jarang berlaku ini, cek akan dibuat sebelum pemasa tamat. Sekiranya pada akhir pemasa butang tidak ditekan, arahan pelepasan kekunci akan dihantar.

Langkah 7: Kod V3 (perisian Menolak Dengan Kaunter Vertikal) (disyorkan) (tanpa LED)

Kod V3 (perisian Menolak Dengan Kaunter Vertikal) (disyorkan) (tanpa LED)
Kod V3 (perisian Menolak Dengan Kaunter Vertikal) (disyorkan) (tanpa LED)

Kod ini JUGA mempunyai versi di mana anda tidak memerlukan perintang penarik ke bawah. Pastikan anda menyambungkan setiap butang ke input dan GROUND! Penarikan binaan digunakan

Saya juga mengalami beberapa tekanan yang tidak didaftarkan dalam kod V2. Saya rasa kodnya menjadi terlalu rumit dengan pemasa dan gangguan luarannya dan saya mungkin terlepas beberapa pengecualian. Atas sebab ini, saya mula dari awal dengan mencari di internet untuk kaedah penyingkiran perisian.

(Sejujurnya, sekurang-kurangnya separuh daripada projek ini telah menjadi butang yang tidak berfungsi pada ketika ini)

Selepas beberapa carian saya menjumpai catatan ini:

www.compuphase.com/electronics/debouncing….

Sejujurnya, saya memerlukan sedikit masa untuk memahami sepenuhnya bagaimana ia berfungsi. Ini melibatkan beberapa manipulasi bit yang agak rumit, tetapi saya akan berusaha membuatnya semudah mungkin. Walau bagaimanapun, penjelasan saya hanya akan menjadi tambahan kepada siaran, jadi sekurang-kurangnya anda harus membaca "pembilang menegak", "pelaksanaan yang diberi penjelasan" dan "pengurangan latensi".

Penjelasan saya

Gambarajah masa (dibuat dalam WaveDrom) yang saya tambah semestinya menjadikan sedikit matematik bit yang sukar difahami ini sedikit sebanyak dapat difahami. Perhatikan bahawa gambar mempunyai 2 bit pembilang, tetapi kod saya mempunyai 3. Ini bermaksud masa pengumuman yang lebih lama.

Satu bit setiap nilai

Dengan pelaksanaan pembilang menegak adalah mungkin untuk melepaskan beberapa butang pada masa yang sama, secara selari. Semua nilai adalah jenis Byte (uint8_t) dan terdiri daripada 8 bit. kami tidak mementingkan nilai apa yang terdapat dalam bait ini, melainkan kami berminat dengan bit itu sendiri. Setiap buton yang akan diumumkan hanya menggunakan satu bit setiap bait. Butang pertama hanya menggunakan bit pertama setiap bait, butang kedua menggunakan bit kedua dll.

Semua pada masa yang sama

Dengan menggunakan bit math adalah mungkin untuk melaksanakan pin debounces secara selari. Dan, walaupun sedikit matematik agak rumit, ia sangat berkesan untuk pemprosesnya.

Dengan jenis data 8 bit, anda boleh melakukannya dengan 8 butang. Menggunakan jenis data yang lebih besar membolehkan lebih banyak penolakan sekaligus.

Penolakan

Rutin debounce dilaksanakan setiap 1 milisaat dengan gangguan pemasa.

apabila butang ditekan butangNegara, yang merupakan keadaan tidak aktif, akan turun dengan rendah, menunjukkan tekan butang. Untuk mengesan pelepasan butang harus cukup lama, menunjukkan bahawa ia tidak melambung untuk waktu tertentu. Toggle digunakan untuk menunjukkan perubahan butang. Bit kaunter digunakan untuk…. mengira berapa lama belum ada lonjakan.

Delta menunjukkan perbezaan antara input dan keadaan yang diturunkan. Hanya apabila ada perbezaan, kaunter akan dikira. pembilang akan diset semula apabila pantulan dikesan (delta adalah 0).

Langkah 8: Hasilnya

Image
Image

Sekiranya semuanya berjalan lancar, anda seharusnya mempunyai papan kekunci yang berfungsi untuk memainkan Osu! pada. Saya secara peribadi tidak menyedari sebarang kependaman sama sekali. Sekiranya anda, sila beritahu saya. Juga jika ada pertanyaan jangan ragu untuk bertanya apa-apa.

Penyebutan sebelumnya tentang V2 tidak dimaksudkan sebagai janji jadi jangan menangguhkan projek ini kerana anda ingin menunggu V2.

Saya harap anda menikmati papan kekunci anda!

Osu! nama: Thomazzz3

Penyelesaian masalah

Sekiranya anda merasakan anda menghadapi masalah dengan papan kekunci anda, buka penyunting teks terlebih dahulu dan tekan setiap kekunci sekali untuk waktu yang singkat.

Adakah satu atau beberapa kunci tidak berfungsi?

Ada kemungkinan anda menghancurkan suis secara dalaman semasa menyolder. Sekiranya anda mempunyai multimeter, sambungkan terus / berbunyi, letakkan selari dengan suis semasa Arduino tidak bersambung dan tekan kekunci. Ia mesti berbunyi.

Adakah watak yang baru anda taip sesuai dengan kekunci yang anda konfigurasikan di Osu! ?

Tukar watak dalam kod arduino dalam 3 #Defines pertama ('' tidak perlu!).

Atau menukar Osu anda! tetapan untuk menggunakan kekunci yang dikonfigurasikan.

Adakah satu atau beberapa kekunci diulang beberapa kali?

Litar debounce tidak berfungsi untuk suis anda atau tidak disolder dengan betul. Periksa sambungan pateri anda. Sekiranya masih berlaku, cuba nilai kapasitor 1uF. Ini akan sangat sukar bagi pengguna PCB.

Sekiranya anda menghadapi masalah dengan LED anda

Adakah LED berkelip?

Sambungan pateri mungkin terputus. Sekiranya anda menggunakan PCB, pastikan timah pematerian benar-benar mengalir di pad yang dicetak.

Adakah LED tidak berfungsi atau dari sebilangan LED berhenti berfungsi?

Periksa seluar pendek antara sambungan LED pertama (ikuti trek) dan periksa timah yang disambungkan dengan baik pada output Arduino dan sekali lagi LED pertama. Sekiranya disahkan betul dan masih cacat, anda mungkin perlu mengganti LED pertama.

Sekiranya ini diperbaiki, ulangi untuk LED seterusnya jika diperlukan.

Disyorkan: