Isi kandungan:

Pad Kawalan Mini untuk Photoshop (Arduino): 6 Langkah
Pad Kawalan Mini untuk Photoshop (Arduino): 6 Langkah

Video: Pad Kawalan Mini untuk Photoshop (Arduino): 6 Langkah

Video: Pad Kawalan Mini untuk Photoshop (Arduino): 6 Langkah
Video: Belajar Arduino Dasar - 6. Variabel 2024, November
Anonim
Pad Kawalan Mini untuk Photoshop (Arduino)
Pad Kawalan Mini untuk Photoshop (Arduino)

Inilah saya akan menunjukkan kepada anda cara membuat alat kecil untuk membantu anda bekerja di Photoshop dengan lebih pantas!

Papan kekunci yang dibuat khusus untuk PS bukanlah sesuatu yang baru, tetapi tidak menawarkan apa yang saya perlukan. Sebagai pelukis, banyak masa saya di Photoshop dihabiskan untuk menyesuaikan tetapan berus, dan saya berpendapat bahawa butang pintasan ringkas tidak memberi saya kawalan untuk menyesuaikan dengan aliran kerja saya. Oleh itu, saya memutuskan untuk membuat papan kekunci saya sendiri, yang kecil, tidak mengganggu, dan mempunyai dail untuk memberi saya interaksi analog yang selalu saya mahukan.

Cara kerjanya mudah: untuk menjadikan mikrokontroler berinteraksi dengan Photoshop, kami memanfaatkan pintasan lalai. Dengan papan yang dapat dibaca oleh komputer sebagai papan kekunci / tetikus, yang harus kita lakukan hanyalah menggunakan beberapa baris kod yang mudah untuk memberitahu komputer untuk membaca setiap input sebagai kombinasi penekanan kekunci. Sekarang butang buat asal hanya butang tekan sahaja!

Mari kita mulakan! Untuk projek ini, anda memerlukan:

  • 1 Sparkfun ProMicro (atau Arduino Leonardo, tidak digalakkan)
  • 1 penyesuai mikro-USB
  • 6 butang tekan (atau nombor apa pun yang anda suka)
  • Perintang Ohk 10k (1 untuk setiap butang)
  • 1 potensiometer
  • 1 pengekod putar
  • wayar, papan roti, papan wangi, solder, pin header, dll.

Anda boleh menggunakan Arduino Leonardo untuk projek ini, tetapi ProMicro adalah alternatif yang jauh lebih murah yang menggunakan cip atmega32u4 yang sama, mempunyai lebih banyak pin dan terdapat dalam bentuk yang jauh lebih kecil, menjadikannya sempurna untuk papan kekunci.

Untuk memprogram ProMicro di Arduino IDE, anda mungkin perlu menetapkan beberapa perkara terlebih dahulu. Anda boleh membacanya lebih lanjut dalam panduan SparkFun:

Sekiranya komputer anda menghadapi masalah dalam mencari peranti, pastikan USB mikro yang anda gunakan tidak menggunakan kuasa sahaja dan menyokong pemindahan data.

Ini adalah projek Arduino pertama saya, dan sesuai untuk pemula.

Langkah 1: Memprotaip Pad Kawalan

Memprotaip Pad Kawalan
Memprotaip Pad Kawalan

Saya cadangkan anda menguji program anda di papan roti terlebih dahulu sebelum anda mula menyolder.

Di sini anda dapat melihat skema saya.

Butang 1 dan 2 adalah Undo dan Redo, 3 hingga 5 adalah untuk alat Brush, Eraser dan Lasso, butang 6 adalah butang Save cepat. Pengekod dan potmeter mengawal Saiz dan Kelegapan masing-masing.

Perhatikan bahawa saya kidal dan merancang susun atur dengan cara yang paling selesa untuk saya gunakan. Lihat saat anda menggunakan papan roti anda sebagai peluang untuk memikirkan fungsi apa yang anda mahukan pengawal anda, apa yang paling sesuai untuk anda dan akhirnya jika anda memerlukan bahagian tambahan untuk membuatnya.

Langkah 2: Butang Tekan

Butang Tekan
Butang Tekan

Butang adalah yang paling mudah untuk dilaksanakan. Mari lihat kodnya:

#sertakan

butang const int = {2, 3, 4, 5, 6, 7, 8, 9}; // array semua pin butang char ctrlKey = KEY_LEFT_GUI; // gunakan pilihan ini untuk Windows dan Linux: // char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT; batal persediaan () {// letakkan kod persediaan anda di sini, untuk dijalankan sekali: Serial.begin (9600); Papan Kekunci.begin (); // Butang - gelung melalui array dan periksa tekan untuk (int i = butang [0]; i <(sizeof (butang) / sizeof (butang [0])) + butang [0]; ++ i) { pinMode (i, INPUT); }} boolean readButton (pin int) {// butang semak dan tolak jika (digitalRead (pin) == TINGGI) {kelewatan (10); if (digitalRead (pin) == TINGGI) {return true; }} kembali palsu; } void doAction (int pin) {// laksanakan task switch (pin) {// ---- Pintasan ---- // Urungkan kes 4: Keyboard.press (ctrlKey); Papan kekunci.print ('z'); Serial.print ("input"); Serial.println (pin); kelewatan (200); Papan Kekunci.releaseAll (); rehat; // Buat semula kes 5: Keyboard.press (ctrlKey); Papan kekunci.print ('y'); Serial.print ("input"); Serial.println (pin); kelewatan (200); Papan Kekunci.releaseAll (); rehat; // Sarung berus 6: Keyboard.press ('b'); Serial.print ("input"); Serial.println (pin); kelewatan (200); Papan Kekunci.releaseAll (); rehat; // Kes pemadam 7: Keyboard.press ('e'); Serial.print ("input"); Serial.println (pin); kelewatan (200); Papan Kekunci.releaseAll (); rehat; // Kes Lasso 8: Keyboard.press ('l'); Serial.print ("input"); Serial.println (pin); kelewatan (200); Papan Kekunci.releaseAll (); rehat; // Simpan kes 9: Keyboard.press (ctrlKey); Papan kekunci.cetak ('s'); Serial.print ("input"); Serial.println (pin); kelewatan (200); Papan Kekunci.releaseAll (); rehat; lalai: Keyboard.releaseAll (); rehat; }}

gelung kosong () {

// letakkan kod utama anda di sini, untuk dijalankan berulang kali:

untuk (int i = butang [0]; i <sizeof (butang) / sizeof (butang [0]) + butang [0]; ++ i) {if (readButton (i)) {doAction (i); }} // Tetapkan semula pengubah Keyboard.releaseAll ();

}

Mereka cukup berterus terang. Untuk membuat komputer mengenali butang tekan sebagai tekan kekunci, kita hanya menggunakan fungsi Keyboard.press (). Oleh itu, untuk mengaktifkan pintasan Undo (ctrl + z), kami hanya menggunakan Keyboard.press (ctrlKey) dan kemudian Keyboard.press ('z'). Ingat, anda perlu memasukkan Keyboard.h, dan menginisialisasi papan kekunci untuk mengakses fungsi-fungsi ini.

Pin input disimpan dalam array, jadi anda dapat melengkapkan semuanya dengan mudah dalam fungsi loop (). Satu cara mudah untuk mengakses dan panjang array dalam c ++ dengan membahagikan ukuran keseluruhan array dengan elemen array, ditambah satu elemen. Kami melihat semua butang untuk memeriksa apakah ada yang ditekan.

Untuk memastikan semuanya teratur, saya menyimpan semua tindakan butang saya dalam pernyataan beralih fungsi yang menjadikan nombor pin sebagai argumen.

Sekiranya anda mahu butang anda melakukan perkara yang berbeza, atau ingin menambah lebih banyak butang, cukup edit kandungan fungsi doAction!

Kerana cara butang fizikal berfungsi, kita perlu melepaskannya. Ini untuk mengelakkan program membaca penekanan yang tidak diingini yang disebabkan oleh kenyal tekan butang. Terdapat banyak cara untuk melakukan ini, tetapi saya menambahkan fungsi readButton () sederhana yang mengurusnya.

Cukup pasangkan butang anda dengan beberapa perintang 10k, dan anda mesti berwarna emas!

Langkah 3: Potensiometer

Potensiometer
Potensiometer

Sekarang ke potmeter:

#sertakan

int dail0 = 0; batal persediaan () {// letakkan kod persediaan anda di sini, untuk dijalankan sekali: Serial.begin (9600); Papan kekunci.begin (); // Dail dial0 = analogRead (0); dial0 = peta (dail0, 0, 1023, 1, 20); } void dialAction (int dial, int newVal, int lastVal) {switch (dial) {// Kes Opacity 0: kelewatan (200); jika (newVal! = lastVal) {int decim = ((newVal * 5) / 10); int unit = ((newVal * 5)% 10); jika (newVal == 20) {Keyboard.write (48 + 0); Keyboard.write (48 + 0); Serial.println ("dail maksimum 1"); } lain {decim = constrain (decim, 0, 9); unit = had (unit, 0, 9); Serial.println (newVal * 2); Keyboard.write (48 + decim); Keyboard.write (48 + unit); }} dial0 = newVal; rehat; lalai: rehat; }} // ------------------ LOOP UTAMA ------------------------- tidak sah gelung () {// letakkan kod utama anda di sini, untuk dijalankan berulang kali: // Opacity // delay (500); int val0 = analogRead (0); val0 = peta (val0, 0, 1023, 1, 20); //Serial.print ("dial0:"); //Serial.println(val0); if (val0! = dial0) {// Lakukan sesuatu dialAction (0, val0, dial0); }}

Potmeter mengikuti logik yang sama, tetapi agak rumit.

Pertama mari kita lihat bagaimana kita mahu ia berfungsi: Photoshop mempunyai beberapa jalan pintas yang berguna untuk mengubah kelegapan berus. Sekiranya anda menekan mana-mana nombor, kelegapan akan sama dengan nombor itu * 10. Tetapi jika anda menekan dua nombor, ia akan membaca nombor kedua sebagai satu unit, memberikan anda kawalan yang lebih tepat.

Oleh itu, kami mahu pemeter kami memetakan putarannya kepada peratusan, tetapi kami tidak mahu melakukannya sepanjang masa kerana itu akan menjadi konyol. Kami hanya mahu mengubah kelegapan ketika potmeter dipusingkan. Oleh itu, kami menyimpan nilai tambahan yang kami bandingkan dengan nilai analogRead () dan hanya menjalankan skrip tindakan apabila terdapat perbezaan.

Isu lain yang akan kita hadapi adalah bagaimana kita mengubah int kembali analogRead sebagai input. Oleh kerana tidak ada cara mudah untuk mengubah int menjadi rentetan, kita harus menggunakan int itu sendiri. Walau bagaimanapun, jika anda hanya menulis Keyboard.press (int) anda akan melihat bahawa input tidak akan seperti yang anda mahukan, dan sebaliknya kekunci lain akan ditekan.

Ini kerana kekunci papan kekunci anda semua dikodkan sebagai bilangan bulat, setiap kekunci mempunyai indeksnya sendiri. Untuk menggunakan kunci angka dengan betul, anda perlu mencari indeksnya dalam jadual ASCII:

Seperti yang anda lihat, butang angka bermula pada indeks 48. Oleh itu, untuk menekan kekunci yang betul, yang perlu kita lakukan hanyalah menambahkan nilai dail ke 48. Nilai perpuluhan dan unit adalah penekanan berasingan.

Akhirnya, kita memerlukan kaedah untuk menjaga nilai agar tidak berulang-ulang. Kerana jika anda cuba menggunakan dail dengan peta (val0, 0, 1023, 0, 100), anda akan mendapati hasilnya sangat gelisah. Begitu juga dengan cara kita melepaskan butang, kita akan memperbaikinya dengan mengorbankan beberapa ketepatan. Saya mendapati bahawa memetakannya menjadi 1-20 dan kemudian mengalikan nilai argumen dengan 5 menjadi kompromi yang boleh diterima.

Untuk menyambungkan potensiometer, sambungkan hanya wayar 5V, wayar arde dan wayar input analog dan seharusnya tidak ada masalah.

Fakta menarik: jika anda menggunakan jalan pintas ini semasa alat seperti Lasso dipilih, ia akan mengubah kelegapan Lapisan. Sesuatu yang perlu diberi perhatian.

Langkah 4: Pengekod Rotary

Pengekod Rotary
Pengekod Rotary

Pengekod putar sedikit seperti potensiometer, tetapi tanpa had berapa banyak mereka boleh berpusing. Daripada nilai analog, kita akan melihat arah putaran pengekod secara digital. Saya tidak akan membahas dengan terperinci bagaimana ini berfungsi, tetapi yang perlu anda ketahui ialah ia menggunakan dua pin input di arduino untuk memberitahu ke arah mana ia dipusingkan. Pengekod putar boleh menjadi lebih sukar untuk digunakan, pengekod yang berbeza mungkin memerlukan persediaan yang berbeza. Untuk mempermudah, saya membelinya dengan PCB, yang siap disambungkan dengan pin wanita. Sekarang, kodnya:

#sertakan

// Pengekod putar #menentukan outputA 15 #menentukan outputB 14 int pembilang = 0; int aState; int aLastState; batal persediaan () {// letakkan kod persediaan anda di sini, untuk dijalankan sekali: // Rotary pinMode (outputA, INPUT); pinMode (outputB, INPUT); // Membaca keadaan awal outputA aLastState = digitalRead (outputA); } void rotaryAction (int dir) {if (dir> 0) {Keyboard.press (']'); } lain {Keyboard.press ('['); } Papan Kekunci.releaseAll (); } // ------------------ LOOP UTAMA ------------------------- gelung kosong () {// letakkan kod utama anda di sini, untuk dijalankan berulang kali: // Size aState = digitalRead (outputA); if (aState! = aLastState) {if (digitalRead (outputB)! = aState) {// kaunter ++; putaranAction (1); } lain {// kaunter -; putaranAction (-1); } //Serial.print("Position: "); //Serial.println(counter); } aLastState = aState; }

Secara lalai, jalan pintas Photoshop] dan [menambah dan mengurangkan saiz berus. Sama seperti sebelumnya, kami ingin memasukkannya sebagai penekanan utama. Pengekod menghantar sejumlah input per giliran (yang bergantung pada model), dan kami ingin menambah / menurunkan ukuran kuas untuk setiap input ini, sehingga Anda dapat memutar dail ke atas atau ke bawah dengan sangat cepat, tetapi juga dapat kawal perlahan dengan tepat.

Sama seperti potmeter, kita hanya mahu menjalankan tindakan ketika dail dipusingkan. Tidak seperti potmeter, seperti yang saya jelaskan sebelumnya, pengekod putar mempunyai dua input bergantian. Kami melihat yang mana yang telah berubah untuk menentukan arah dail dipusingkan.

Kemudian bergantung pada arah, kami menekan kekunci yang betul.

Selagi anda tidak mempunyai masalah hubungan, ia mesti berfungsi.

Langkah 5: Menggabungkan Semuanya

Menggabungkan Semuanya
Menggabungkan Semuanya
Menggabungkan Semuanya
Menggabungkan Semuanya
Menggabungkan Semuanya
Menggabungkan Semuanya

Sekarang ke pematerian. Pertama, kita menggerudi dua lubang ke dalam papan wangi agar sesuai dengan kedua dail. kami memateri butang dan perintang masing-masing. Saya menggerudi dua lubang kecil tambahan untuk membiarkan wayar input melintas di atas untuk menjimatkan ruang di bawahnya, tetapi ini tidak diperlukan. Tidak ada banyak wayar input sehingga wayar GND dan 5V berjalan selari, tetapi jika anda merasa licik, anda mungkin ingin membuat matriks. Saya menyisipkan mikrokontroler ke papan serpihan lain yang lebih kecil, yang sesuai di bawahnya bersama pengekod dan pengukur jarak. Sekarang saya memasangkan semua wayar ke ProMicro. Tidak perlu kreatif, saya hanya perlu mengikuti skema yang sama dengan yang ada di papan roti, tetapi menyolder di tempat kecil seperti itu dapat membosankan. Jangan seperti saya, gunakan pelucut wayar dan solder yang bagus!

Akhirnya, anda mungkin ingin membuat kes yang baik untuk rakan Photoshop baru anda. Paling baik dari saya, sekurang-kurangnya!

Tetapi jika anda ingin mencubanya, gunakan kadbod dan pita dan pasang mikro-USB anda.

Langkah 6: Kod + Demonstrasi

Image
Image

Pastikan untuk menguji program pad kawalan semasa anda bergerak dalam projek untuk mengelakkan kejutan!

Inilah kod lengkapnya:

Terima kasih banyak kerana membaca!

Disyorkan: