Sadržaj:

Mini kontrolni jastučić za Photoshop (Arduino): 6 koraka
Mini kontrolni jastučić za Photoshop (Arduino): 6 koraka

Video: Mini kontrolni jastučić za Photoshop (Arduino): 6 koraka

Video: Mini kontrolni jastučić za Photoshop (Arduino): 6 koraka
Video: Leap Motion SDK 2024, Srpanj
Anonim
Mini kontrolni jastučić za Photoshop (Arduino)
Mini kontrolni jastučić za Photoshop (Arduino)

Evo pokazat ću vam kako napraviti mali alat koji će vam pomoći da brže radite u Photoshopu!

Tipkovnice posebno izrađene za PS nisu nove, ali ne nude baš ono što mi treba. Kao slikar, većinu svog vremena u Photoshopu provodim prilagođavajući postavke četke, i mislim da mi jednostavni gumbi za prečace ne daju kontrolu u skladu s mojim tijekom rada. Stoga sam odlučio napraviti svoju tipkovnicu, onu malu, nenametljivu i s brojčanicima koji mi daju onu analognu interakciju koju sam oduvijek želio.

Način rada je jednostavan: kako bismo omogućili interakciju mikrokontrolera s Photoshopom, koristimo zadane prečace. S pločom koju računalo može čitati kao tipkovnica/miš, sve što moramo učiniti je koristiti neke jednostavne redove koda kako bismo rekli računalu da čita svaki unos kao kombinaciju pritiska tipki. Sada je gumb za poništavanje samo jedno pritiskanje!

Započnimo! Za ovaj projekt trebat će vam:

  • 1 Sparkfun ProMicro (ili Arduino Leonardo, ne preporučuje se)
  • 1 mikro-USB adapter
  • 6 tipki (ili bilo koji broj koji želite)
  • 10k Ohm otpornici (1 za svaki gumb)
  • 1 potenciometar
  • 1 rotacijski davač
  • žice, matična ploča, ploča za lemljenje, lemljenje, igle zaglavlja itd.

Za ovaj projekt možete koristiti Arduino Leonardo, ali ProMicro je mnogo jeftinija alternativa koja koristi isti čip atmega32u4, ima više pinova i dolazi u mnogo manjem obliku, što ga čini savršenim za tipkovnicu.

Da biste programirali ProMicro u Arduino IDE -u, možda ćete morati prvo postaviti neke stvari. Više o tome možete pročitati u SparkFunovom vodiču:

Ako vaše računalo ima problema s pronalaženjem uređaja, provjerite da mikro-USB koji koristite nije samo za napajanje i podržava prijenos podataka.

Ovo je moj prvi Arduino projekt i prikladan je za početnike.

Korak 1: Prototipiranje upravljačke pločice

Prototipiranje kontrolne pločice
Prototipiranje kontrolne pločice

Preporučujem da prije početka lemljenja isprobate svoj program na ploči.

Ovdje možete vidjeti moju shemu.

Gumbi 1 i 2 bit će poništeni i ponovni, 3 do 5 su za alate Četka, Gumica i Lasso, gumb 6 je gumb za brzo spremanje. Enkoder i potmetar kontroliraju veličinu i neprozirnost.

Imajte na umu da sam ljevoruk i oblikovao sam izgled na način koji mi je najudobniji za korištenje. Pogledajte trenutak u kojem svoju ploču koristite kao priliku za razmišljanje o tome koje biste funkcije htjeli da vaš kontroler ima, što vam najbolje odgovara i na kraju ako vam za izradu budu potrebni dodatni dijelovi.

Korak 2: Pritisnite gumbe

Pritisnuti gumbe
Pritisnuti gumbe

Gumbi su najjednostavniji za implementaciju. Pogledajmo kod:

#uključi

const int gumbi = {2, 3, 4, 5, 6, 7, 8, 9}; // niz svih pinova gumba char ctrlKey = KEY_LEFT_GUI; // koristite ovu opciju za Windows i Linux: // char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT; void setup () {// ovdje postavite svoj kod za postavljanje, da biste ga jednom pokrenuli: Serial.begin (9600); Keyboard.begin (); // Gumbi - prođite kroz niz i provjerite ima li pritisnutih tipki (int i = gumbi [0]; i <(veličinaof (gumbi)/veličinaof (gumbi [0]))+tipke [0]; ++ i) { pinMode (i, INPUT); }} boolean readButton (int pin) {// tipke za provjeru i debounce if (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {return true; }} return false; } void doAction (int pin) {// izvršava zadatke switch (pin) {// ---- Prečaci ---- // Poništi velika slova 4: Keyboard.press (ctrlKey); Keyboard.print ('z'); Serial.print ("ulaz"); Serial.println (pin); kašnjenje (200); Keyboard.releaseAll (); pauza; // Ponovi kućište 5: Keyboard.press (ctrlKey); Keyboard.print ('y'); Serial.print ("ulaz"); Serial.println (pin); kašnjenje (200); Keyboard.releaseAll (); pauza; // Slučaj četke 6: Keyboard.press ('b'); Serial.print ("ulaz"); Serial.println (pin); kašnjenje (200); Keyboard.releaseAll (); pauza; // Gumica za brisanje 7: Keyboard.press ('e'); Serial.print ("ulaz"); Serial.println (pin); kašnjenje (200); Keyboard.releaseAll (); pauza; // Lasso case 8: Keyboard.press ('l'); Serial.print ("ulaz"); Serial.println (pin); kašnjenje (200); Keyboard.releaseAll (); pauza; // Spremi slučaj 9: Keyboard.press (ctrlKey); Keyboard.print ('s'); Serial.print ("ulaz"); Serial.println (pin); kašnjenje (200); Keyboard.releaseAll (); pauza; zadano: Keyboard.releaseAll (); pauza; }}

void loop () {{100} {101}

// ovdje unesite svoj glavni kôd, za ponavljanje:

for (int i = gumbi [0]; i <sizeof (gumbi)/sizeof (gumbi [0])+gumbi [0]; ++ i) {if (readButton (i)) {doAction (i); }} // Poništi modifikatore Keyboard.releaseAll ();

}

Prilično su jednostavni. Kako bi računalo prepoznalo pritisak tipke kao pritisak tipke, jednostavno koristimo funkciju Keyboard.press (). Dakle, za aktiviranje prečaca Undo (ctrl+z), jednostavno koristimo Keyboard.press (ctrlKey), a zatim Keyboard.press ('z'). Zapamtite da ćete za pristup tim funkcijama morati uključiti Keyboard.h i inicijalizirati tipkovnicu.

Ulazni pinovi pohranjeni su u nizu, pa ih možete lako proći kroz funkciju loop (). Jedan jednostavan način pristupa i duljine niza u c ++ dijeljenjem veličine cijelog niza na element niza, plus jedan element. Prolazimo kroz sve tipke kako bismo provjerili je li pritisnuta.

Da bi stvari bile organizirane, pohranio sam sve radnje gumba u naredbu switch funkcije koja uzima pin broj kao argument.

Ako želite da vaši gumbi rade različite stvari, ili želite dodati još gumba, jednostavno uredite sadržaj funkcije doAction!

Zbog načina na koji funkcioniraju fizički gumbi, morat ćemo ih otkloniti. Time se sprječava da program pročita sve neželjene pritiske uzrokovane gipkošću tipki. Postoji mnogo načina za to, ali dodao sam jednostavnu funkciju readButton () koja se brine za to.

Samo povežite gumbe s 10k otpornika i trebali biste biti zlatni!

Korak 3: Potenciometar

Potenciometar
Potenciometar

A sada na mjerač kilometara:

#uključi

int biranje0 = 0; void setup () {// ovdje postavite svoj kod za postavljanje, da biste ga jednom pokrenuli: Serial.begin (9600); Keyboard.begin (); // Biranje biranje0 = analogRead (0); biranje0 = karta (biranje0, 0, 1023, 1, 20); } void dialAction (int biranje, int newVal, int lastVal) {switch (biranje) {// Slučaj neprozirnosti 0: kašnjenje (200); if (newVal! = lastVal) {int decim = ((newVal*5)/10); int jedinica = ((newVal *5)% 10); if (newVal == 20) {Keyboard.write (48+0); Keyboard.write (48+0); Serial.println ("max biranje 1"); } else {decim = constrain (decim, 0, 9); jedinica = ograničenje (jedinica, 0, 9); Serial.println (newVal*2); Keyboard.write (48+decim); Keyboard.write (48+jedinica); }} biraj0 = newVal; pauza; zadano: break; }} // ------------------ GLAVNA PETLJA ------------------------- praznina loop () {// ovdje unesite svoj glavni kod, za ponavljanje izvođenja: // Opacity // delay (500); int val0 = analogRead (0); val0 = karta (val0, 0, 1023, 1, 20); //Serial.print ("biranje0:"); //Serial.println(val0); if (val0! = dial0) {// Učinite nešto dialAction (0, val0, biranje0); }}

Potmetar slijedi istu logiku, ali je malo zeznutiji.

Prvo pogledajmo kako želimo da funkcionira: Photoshop ima nekoliko zgodnih prečaca za promjenu neprozirnosti četke. Ako pritisnete bilo koju tipku num, neprozirnost će biti jednaka tom broju*10. Ali ako pritisnete dva broja, drugi broj će se pročitati kao jedinica, što vam daje precizniju kontrolu.

Stoga želimo da naš mjerač puta preslikava rotaciju na postotak, ali ne želimo to činiti cijelo vrijeme jer bi to bilo glupo. Želimo promijeniti neprozirnost samo kad okrećemo mjerač. Dakle, spremamo dodatnu vrijednost koju uspoređujemo s vrijednosti analogRead () i pokrećemo skriptu akcije samo kad postoji razlika.

Još jedno pitanje na koje ćemo naići je kako pretvaramo povratni int analognogReada kao ulaz. Kako ne postoji jednostavan način pretvaranja int u niz, morat ćemo koristiti sam int. Međutim, ako jednostavno napišete Keyboard.press (int) primijetit ćete da unos neće biti ono što ste htjeli, a umjesto toga će se pritisnuti druga tipka.

To je zato što su svi ključevi na tipkovnici kodirani kao cijeli brojevi, a svaki ključ ima svoj indeks. Za ispravnu uporabu ključa num morat ćete potražiti njihov indeks u ASCII tablici:

Kao što vidite, numeričke tipke počinju s indeksom 48. Dakle, da bismo pritisnuli ispravnu tipku, sve što moramo učiniti je dodati vrijednost brojčanika na 48. Vrijednosti decimalnog broja i jedinice su zasebni pritisci.

Konačno, potreban nam je način da spriječimo da vrijednost skače naprijed -natrag. Jer ako pokušate koristiti brojčanik s kartom (val0, 0, 1023, 0, 100), rezultati će vam biti vrlo nervozni. Slično onome kako smo uklonili gumbe, popravit ćemo to žrtvovanjem neke točnosti. Otkrio sam da je preslikavanje na 1-20, a zatim množenje vrijednosti argumenata s 5 prihvatljiv kompromis.

Za povezivanje potenciometra samo spojite žicu od 5 V, žicu za uzemljenje i žicu za analogni ulaz i ne bi trebalo biti problema.

Zabavna činjenica: ako koristite ovaj prečac dok je odabran alat poput Lassa, umjesto toga će se promijeniti neprozirnost sloja. Nešto na što treba obratiti pažnju.

Korak 4: Rotacijski davač

Rotacijski koder
Rotacijski koder

Rotacijski koderi pomalo su poput potenciometara, ali bez ograničenja koliko se mogu okretati. Umjesto analogne vrijednosti, digitalno ćemo gledati smjer okretanja davača. Neću ulaziti u detalje o tome kako oni rade, ali ono što trebate znati je da koristi dva ulazna pina na arduinu kako bi rekao u kojem smjeru se okreće. S rotacijskim davačem može biti teže raditi, različiti davači mogu zahtijevati različite postavke. Da bih olakšao stvari, kupio sam jedan s PCB -om, koji je spreman za pričvršćivanje ženskim iglama. Sada kod:

#uključi

// Rotacijski davač #define outputA 15 #define outputB 14 int counter = 0; int aState; int aLastState; void setup () {// ovdje postavite svoj kod za postavljanje, da biste ga jednom pokrenuli: // Rotary pinMode (outputA, INPUT); pinMode (outputB, INPUT); // Čita početno stanje outputA aLastState = digitalRead (outputA); } void rotaryAction (int dir) {if (dir> 0) {Keyboard.press (']'); } else {Keyboard.press ('['); } Keyboard.releaseAll (); } // ------------------ MAIN LOOP ------------------------- void petlja () {// ovdje unesite svoj glavni kôd za višekratno pokretanje: // Veličina aState = digitalRead (outputA); if (aState! = aLastState) {if (digitalRead (outputB)! = aState) {// brojač ++; rotaryAction (1); } else {// brojač -; rotaryAction (-1); } //Serial.print("Polition: "); //Serial.println(brojač); } aLastState = aState; }

Prema zadanim postavkama, Photoshop -ovi] i [prečaci povećavaju i smanjuju veličinu četke. Baš kao i prije, želimo ih unijeti kao pritiske tipki. Enkoder šalje broj ulaza po zavoju (što ovisi o modelu), a mi želimo povećati/smanjiti veličinu četke za svaki od ovih ulaza, tako da možete okrenuti brojčanik gore ili dolje jako brzo, ali i moći polako kontrolirajte s velikom preciznošću.

Baš kao i kod mjerača udaljenosti, akciju želimo pokrenuti samo kad je brojčanik okrenut. Za razliku od mjerača udaljenosti, kao što sam već objasnio, rotacijski davač ima dva izmjenična ulaza. Gledamo što se od ovoga promijenilo kako bismo utvrdili smjer u kojem se okreće brojčanik.

Zatim, ovisno o smjeru, pritisnemo ispravnu tipku.

Sve dok nemate problema s kontaktom, to bi trebalo funkcionirati.

Korak 5: Sve spojite

Spajajući sve zajedno
Spajajući sve zajedno
Spajajući sve zajedno
Spajajući sve zajedno
Spajajući sve zajedno
Spajajući sve zajedno

Sada na lemljenje. Prvo izbušimo dvije rupe u ploči za pričvršćivanje kako bi se uklopile dvije brojčanice. lemimo gumbe i njihove otpornike. Izbušio sam dvije dodatne male rupice da propustim ulazne žice na vrhu kako bih uštedio prostor ispod, ali to nije potrebno. Nema mnogo ulaznih žica pa žice GND i 5V idu paralelno, ali ako se osjećate lukavo, možda biste htjeli napraviti matricu. Lemio sam mikrokontroler na drugu, manju ploču koja je stajala ispod kodera i mjerača udaljenosti. Sada sam lemio sve žice na ProMicro. Nema potrebe za kreativnošću, samo sam morao slijediti istu shemu kao onu na ploči, ali lemljenje na tako malom mjestu razumljivo može biti dosadno. Nemojte biti poput mene, upotrijebite skidač žice i dobro lemljenje!

Konačno, možda biste htjeli napraviti lijepu torbicu za svog novog prijatelja iz Photoshopa. Bar jedan bolji od mene!

No, ako želite isprobati, upotrijebite karton i traku te priključite mikro-USB.

Korak 6: Kod + demonstracija

Image
Image

Obavezno isprobajte program kontrolne pločice tijekom kretanja u projektu kako biste izbjegli iznenađenja!

Evo potpunog koda:

Hvala vam puno na čitanju!

Preporučeni: