Daftar Isi:
- Langkah 1: Perencanaan
- Langkah 2: Prototipe + Kode
- Langkah 3: Casing
- Langkah 4: Hasil dan Kemungkinan Peningkatan
Video: Pengontrol Pintasan Genggam (untuk Photoshop + Lainnya) [Arduino]: 4 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:56
Terakhir kali saya membuat control pad kecil untuk digunakan di Photoshop. Ini bekerja dengan sangat baik, dan saya masih menggunakannya! Tapi itu juga agak terbatas, dengan hanya lima tombol dan tombol ukuran dan opacity yang berguna. Saya masih sering meraih keyboard…
Jadi saya mulai mengerjakan iterasi berikutnya dari panel kontrol, satu dengan lebih banyak tombol dan fungsionalitas. Satu pad kontrol untuk mengatur semuanya.
Ini bukan papan kontrol itu. TAPI di satu sisi mungkin lebih baik.
Bagaimana jika Anda dapat memiliki banyak pintasan, tetapi dalam paket yang sangat pas dan ringan, Anda dapat memegangnya dengan tangan bebas saat menggambar tanpa gangguan? …ok, cukup dengan infomersialnya.
Kontroler ini diprogram sedemikian rupa sehingga, hanya dengan 4 tombol, dapat dipetakan hingga 32 kemungkinan pintasan! Tombol 5 tambahan ada untuk memungkinkan saya menggunakan tombol pengubah dalam kombinasi apa pun, yang berguna untuk banyak program (apakah Anda pernah mencoba kombo Alt-RMB di PS? Jika belum, silakan lakukan. Ini penyelamat). Nanti saya jelaskan sistemnya.
Untuk membuat semua ini, Anda perlu:
- 1 Mikrokontroler (Saya menggunakan Adafruit ItsyBitsy 32u4 tetapi apa pun boleh asalkan memiliki chip atmega32u4)
- 1 adaptor micro-USB (data, bukan hanya daya)
- 5 tombol push (saya menggunakan yang lembut, seperti ini)
- Resistor 10k Ohm (1 per tombol)
- Kabel, papan tempat memotong roti, bahan solder, dll.
- Sesuatu untuk membuat casing dengan (printer 3D, dll.)
Ini adalah proyek Arduino tingkat menengah, dan saya sarankan untuk melihat tutorial saya sebelumnya untuk lebih memahami apa yang sedang terjadi, karena banyak dari ini adalah pengulangan dari hal-hal yang saya jelaskan di sana.
Oke, mari kita mulai!
Langkah 1: Perencanaan
Ini adalah skema dasar yang saya gambar dari pengontrol. Rangkaian ini sangat sederhana jika Anda membandingkannya dengan proyek saya sebelumnya! Tetapi kita akan dapat melakukan lebih banyak lagi dengan beberapa tombol yang dimilikinya, dengan kekuatan penekanan gabungan!
Ide di balik skema kontrol adalah bahwa setiap tombol bisa bebas, ditekan dan dilepaskan, atau ditekan dan ditahan. Menekan dan melepaskan adalah apa yang sebenarnya akan mengaktifkan pintasan, sementara menahan tombol akan memberi kita akses ke pintasan yang berbeda. Jadi jika Anda hanya menekan tombol A, Anda akan mengaktifkan pintasan A, tetapi jika Anda menahan B saat menekan A, Anda akan mendapatkan pintasan yang berbeda. Anda dapat menahan hingga 3 tombol sekaligus saat menekan, jadi ketika Anda menerapkan beberapa kombinatorik dasar, Anda akan melihat berapa banyak kombinasi yang mungkin dengan sistem ini!
Tombol kelima ekstra terasa seperti tambahan alami, mengingat bentuk genggam yang saya buat. Saya memutuskan untuk menggunakannya untuk mengakses kunci pengubah di photoshop. Cara kerjanya sedikit berbeda dari tombol lainnya: setiap kali tombol jempol ditahan, hanya pengubah yang akan digunakan. Ini akan aktif ketika dipegang dan beberapa dapat ditekan. Jadi jika tombol A adalah Shift, dan tombol B adalah Ctrl, ketika Anda menahan A dan B, itu akan seperti menekan Shift dan Ctrl, tetapi hanya selama tombol ibu jari ditahan!
Shell dirancang untuk menjadi ergonomis dan ambidextrous. Saya sangat berhati-hati untuk membuatnya pas sehingga menggunakan jari kelingking tidak terlalu melelahkan, dan itu harus bekerja untuk mereka yang memiliki tangan lebih besar dari saya juga.
Langkah 2: Prototipe + Kode
Ini adalah praktik yang baik untuk menguji tombol pada papan tempat memotong roti. Ini cukup sederhana, cukup sambungkan tombol dan resistor seperti yang ditunjukkan. Anda dapat mengujinya dengan kode di sini (alternatif tautan pastebin):
#termasuk
// gunakan opsi vthisv untuk MacOS:
//char ctrlKey = KEY_LEFT_GUI;
// gunakan opsi vthisv untuk Windows dan Linux:
char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT;
//Tombol Fungsi di sini
char Fn1Key = KEY_F2; char Fn2Key = KEY_F3; char Fn3Key = KEY_F4; char Fn4Key = KEY_F5;
const int pin = {9, 10, 11, 12, 13}; // larik semua pin tombol
//Sensibilitas
const int THRESH_0 = 10; const int THRESH_1 = 20; const int THRESH_2 = 25; const int THRESH_3 = 50; const int THRESH_4 = 100; const int THRESH_5 = 200;
const int BUTTON_NUM = 5;
//Membekukan bingkai
const int DELAY = 0;
enum Serikat { dibebaskan, ditekan, ditahan, dilepaskan };
tombol struktur {
int pin; negara bagian; int waktuDimiliki; }; //jempol, indeks, tengah, cincin, kecil;
tombol tombol[BUTTON_NUM] = {};
tombol initButton(int p) {
tombol b; pinMode(p, INPUT); b.pin = p; b.negara bagian = Serikat::dibebaskan; b.timeHeld = 0; kembali b; }
batalkan pengaturan() {
// letakkan kode setup Anda di sini, untuk dijalankan sekali: Serial.begin(9600); Keyboard.mulai();
while(!Serial){};
//Tombol untuk(int i = 0; i < (BUTTON_NUM); ++i) { Serial.print("set button "); Serial.print(i); Serial.print(" pada pin: "); Serial.println(pin); //buttons.pin = 1; tombol=initButton(pin); Serial.println(tombol.pin); }
}
bool readButton(pin int) {
// periksa dan debounce tombol if (digitalRead(pin) == HIGH) { delay(10); if (digitalRead(pin) == HIGH) { mengembalikan true; } } mengembalikan salah; }
int pintobin(int pin) {
jika (pin==pin[0]) kembali 1; if (pin== pin[1]) mengembalikan 10; if (pin== pin[2]) mengembalikan 100; if (pin== pin[3]) mengembalikan 1000; if (pin== pin[4]) kembalikan 10.000; } tombol buttonStateUpdate(tombol b) {
bool tekan = readButton(b.pin);
switch (b.state) { case States::freed: b.timeHeld=0; if (tekan) b.state=Status::ditekan; merusak; kasus ditekan: b.timeHeld+=1; if (tekan) { if (b.timeHeld>(THRESH_1/(1+DELAY))) { b.state=States::hold; } } else { //if (b.timeHeld
int getButtonStateCode(tombol b)
{ kembalikan b.state*pintobin(b.pin); }
int getCodeByButton(kode int, indeks int) {
int r1, r2, r3, r4, r5; int opStep = BUTTON_NUM - (1+indeks);
//operasi pertama
if (opStep==0) mengembalikan kode/10000; r1 = kode%10000;
jika (opLangkah==1)
kembali r1/1000; r2 = r1%1000; if (opStep==2) mengembalikan r2/100; r3 = r2%100; if (opStep==3) kembalikan r3/10; r4 = r3%10; if (opStep==4) kembalikan r4/1; r5 = r4%1; }
void completeTekan(int pin) {
// Serial.print("masukan"); // Serial.println(pin); tunda(THRESH_3); Keyboard.releaseAll(); }
void doAction(kode int) {
//Pengubah if (getCodeByButton(code, 0)==2) { // Serial.println("---modifiers----"); if (getCodeByButton(code, 1)>0) { Keyboard.press(altKey); // Serial.println("-------alt---------"); } else Keyboard.release(altKey); if (getCodeByButton(code, 2)>0) { Keyboard.press(ctrlKey); // Serial.println("--------ctrl----------"); } else Keyboard.release(ctrlKey); if (getCodeByButton(code, 3)>0) { Keyboard.press(' '); } else Keyboard.release(' '); if (getCodeByButton(code, 4)>0) { Keyboard.press(shiftKey); // Serial.println("------shift------"); } else Keyboard.release(shiftKey); } lain {
// melakukan tugas
switch (kode) { kasus 30: //---| Kuas Keyboard.tekan (shiftKey); Keyboard.print('b'); selesaiTekan(kode); merusak; kasus 300: //---| Keyboard Penghapus.tekan (shiftKey); Keyboard.print('e'); selesaiTekan(kode); merusak; kasus 3000: //---| Bucket Keyboard.tekan (shiftKey); Keyboard.print('g'); selesaiTekan(kode); merusak; kasus 30000: //---| Lasso Keyboard.tekan (shiftKey); Keyboard.print('l'); selesaiTekan(kode); merusak; case 320: //--|o Undo Keyboard.press(ctrlKey); Keyboard.print('z'); selesaiTekan(kode); merusak; kasus 3020: //-|-o Ulangi Keyboard.tekan(ctrlKey); Keyboard.print('y'); selesaiTekan(kode); merusak; case 30020: //|--o History Keyboard.press(shiftKey); Keyboard.print('y'); selesaiTekan(kode); merusak; kasus 230: //--o| Simpan Keyboard.tekan(ctrlKey); Keyboard.print('s'); selesaiTekan(kode); merusak; case 3200: //-|o- Keyboard-p.webp
int kode tombol=0;
for(int i = 0; i < BUTTON_NUM; ++i) { keys=buttonStateUpdate(buttons); buttonCode+=getButtonStateCode(buttons); }
if(Kode tombol!=0) {
Serial.print("kode tombol: "); Serial.println(Kode tombol); }
doAction(Kode tombol);
// letakkan kode utama Anda di sini, untuk dijalankan berulang kali: // for(int i = keys[0]; i < sizeof(buttons)/sizeof(buttons[0])+buttons[0]; ++i) { / / // if (readButton(i)) { // lakukanAction(i); // } // }
jika (getCodeByButton(buttonCode, 0)!=2)
Keyboard.releaseAll();
penundaan (DELAY);
}
Tidak banyak yang bisa dikatakan tentang logikanya karena mirip dengan pengontrol terakhir saya, dengan dua perbedaan penting:
- Tombol-tombolnya adalah struct dengan mesin statusnya sendiri
- Status dijumlahkan untuk membuat kode yang menentukan tindakan
Prinsipnya mirip dengan bit-shifting, tetapi karena tombol memiliki banyak status dan tidak dapat direpresentasikan dengan biner, tombol tersebut dikalikan dengan pangkat sepuluh. Saya kemudian menambahkan semua status tombol menjadi satu nomor, dan meneruskannya ke pernyataan sakelar doAction(), di mana saya meletakkan semua kode pintasan.
Seperti yang Anda lihat, saya tidak memetakan setiap kemungkinan kombinasi. Saya hanya menambahkan beberapa pintasan favorit saya, saya serahkan kepada Anda untuk mengisi sisanya sesuai keinginan Anda;)
Langkah 3: Casing
Saya menggunakan printer 3D untuk casingnya. Seperti yang Anda lihat, desainnya memiliki beberapa kekurangan dan saya harus menggunakan MacGyver untuk menutupnya. Jadi saya tidak akan memposting file model dulu.
Tombol-tombolnya direkatkan ke "bangku" sehingga tutupnya tetap di tempatnya. Tombol-tombol lembut sangat bagus dalam hal itu, jadi pastikan untuk mendapatkannya jika Anda berencana membuat kasing yang mirip dengan saya.
Juga, saya sarankan menambahkan sedikit bobot di dalam kasing, karena sangat ringan. Gram ekstra akan membuatnya terasa lebih alami.
Solder semuanya seperti yang ditunjukkan dan sambungkan kabel usb, dan semuanya harus pas (dengan bantuan lem)!
Langkah 4: Hasil dan Kemungkinan Peningkatan
Di sana Anda memilikinya! Pengontrol genggam yang dapat Anda gunakan untuk mengakses semua pintasan penting Anda hanya dengan satu tangan!
Dibutuhkan beberapa otot-memori untuk digunakan, tapi itu benar-benar serbaguna!
Tentu saja itu tidak sempurna, dan saat ini saya sedang memikirkan beberapa cara untuk memperbaikinya. Selain memperbaiki casing dan menambahkan pintasan, saya pikir saya akan menarik untuk mendukung banyak aplikasi dengan pintasan yang berbeda. Saya sedang berpikir untuk memiliki kombinasi tombol untuk beralih di antara skema kontrol, seperti menekan 4 tombol pada saat yang sama untuk beralih antara perpustakaan pintasan Photoshop ke satu-penjahit yang dibuat untuk Maya.
Hanya beberapa ide.
Terima kasih telah membaca, sampai jumpa lagi!
Direkomendasikan:
Perisai WiFi ESP8266 Lebih Murah untuk Arduino dan Mikro Lainnya: 6 Langkah (dengan Gambar)
Perisai WiFi ESP8266 yang Lebih Murah untuk Arduino dan Mikro Lainnya: Pembaruan: 29 Oktober 2020Diuji dengan perpustakaan papan ESP8266 V2.7.4 – berfungsi Pembaruan: 23 September 2016Jangan gunakan perpustakaan papan Arduino ESP V2.3.0 untuk proyek ini. V2.2.0 worksUpdate: 19 Mei 2016Rev 14 dari proyek ini merevisi perpustakaan dan kode untuk bekerja dengan
CovBot - Chatbot Berbasis WhatsApp untuk Info COVID 19 & Lainnya: 7 Langkah
CovBot - Chatbot Berbasis WhatsApp untuk Info COVID 19 & Lainnya: CoVbot adalah chatbot berbasis Whatsapp yang sederhana dan intuitif. Fitur utama bot adalah: Dapat memberi Anda status terbaru COVID-19 di negara pilihan dengan cara yang sederhana dan intuitif. Selain itu, bot dapat menyarankan aktivitas menyenangkan untuk dilakukan di
Pengontrol Game DIY Berbasis Arduino - Pengontrol Permainan Arduino PS2 - Bermain Tekken Dengan Gamepad Arduino DIY: 7 Langkah
Pengontrol Game DIY Berbasis Arduino | Pengontrol Permainan Arduino PS2 | Bermain Tekken Dengan Gamepad Arduino DIY: Halo teman-teman, bermain game selalu menyenangkan tetapi bermain dengan Kontroler game kustom DIY Anda sendiri lebih menyenangkan. Jadi kami akan membuat Pengontrol game menggunakan arduino pro micro dalam instruksi ini
YABC - Pengontrol Blynk Lain - Pengontrol Suhu dan Kelembaban IoT Cloud, ESP8266: 4 Langkah
YABC - Pengontrol Blynk Lain - Pengontrol Suhu dan Kelembaban IoT Cloud, ESP8266: Hai Pembuat,Saya baru-baru ini mulai menanam jamur di rumah, jamur tiram, tetapi saya sudah 3x pengontrol ini di rumah untuk kontrol Suhu Fermentor untuk minuman rumah saya, istri juga melakukan hal Kombucha ini sekarang, dan sebagai Termostat untuk Panas
Bangun Arduino Menjadi Nissan Qashqai untuk Mengotomatiskan Lipat Cermin Sayap atau Lainnya: 9 Langkah (dengan Gambar)
Bangun Arduino Menjadi Nissan Qashqai untuk Mengotomatiskan Lipat Cermin Sayap atau Apa Pun: Nissan Qashqai J10 memiliki beberapa hal kecil yang mengganggu tentang kontrol yang dapat dengan mudah menjadi lebih baik. Salah satunya adalah harus ingat untuk menekan tombol buka/tutup kaca spion sebelum melepas kunci kontak. Lainnya adalah konfigurasi kecil