Obsah:

Mini ovládací panel pre Photoshop (Arduino): 6 krokov
Mini ovládací panel pre Photoshop (Arduino): 6 krokov

Video: Mini ovládací panel pre Photoshop (Arduino): 6 krokov

Video: Mini ovládací panel pre Photoshop (Arduino): 6 krokov
Video: Начало работы с QLC+ Управление цветомузыкой с компьютера. Как управлять светом. 2024, November
Anonim
Mini ovládací panel pre Photoshop (Arduino)
Mini ovládací panel pre Photoshop (Arduino)

Tu vám ukážem, ako vytvoriť malý nástroj, ktorý vám pomôže pracovať vo Photoshope rýchlejšie!

Klávesnice špeciálne vyrobené pre PS nie sú nové, ale neponúkajú presne to, čo potrebujem. Ako maliar trávim väčšinu času vo Photoshope úpravou nastavenia štetca a myslím si, že jednoduché klávesové skratky mi nedávajú ovládanie, ktoré by zodpovedalo môjmu pracovnému postupu. Preto som sa rozhodol vytvoriť vlastnú klávesnicu, malú, nenápadnú a s číselníkmi, ktoré mi poskytnú analógovú interakciu, ktorú som vždy chcel.

Spôsob, akým to funguje, je jednoduchý: Aby mikrokontrolér komunikoval s Photoshopom, používame predvolené skratky. S doskou, ktorú počítač dokáže čítať ako klávesnicu/myš, stačí použiť niekoľko jednoduchých riadkov kódu a povedať počítaču, aby prečítal každý vstup ako kombináciu stlačení klávesov. Teraz je tlačidlo späť iba na jedno stlačenie tlačidla!

Začnime! Na tento projekt budete potrebovať:

  • 1 Sparkfun ProMicro (alebo Arduino Leonardo, neodporúča sa)
  • 1 adaptér micro-USB
  • 6 tlačidiel (alebo ľubovoľné číslo, ktoré sa vám páči)
  • Rezistory 10 kOhm (1 pre každé tlačidlo)
  • 1 potenciometer
  • 1 rotačný snímač
  • drôty, nepájivá doska, perfboard, spájka, kolíkové kolíky atď.

Na tento projekt môžete použiť Arduino Leonardo, ale ProMicro je oveľa lacnejšou alternatívou, ktorá používa rovnaký čip atmega32u4, má viac pinov a je v oveľa menšej forme, takže je ideálny pre klávesnicu.

Na naprogramovanie ProMicro v Arduino IDE budete musieť najskôr nastaviť niektoré veci. Viac si o tom môžete prečítať v príručke SparkFun:

Ak má váš počítač problém nájsť zariadenie, uistite sa, že používaný konektor micro USB nie je napájaný z elektrickej siete a podporuje prenos údajov.

Toto je môj prvý projekt Arduino a je vhodný pre začiatočníkov.

Krok 1: Prototypovanie ovládacej podložky

Prototypovanie ovládacej podložky
Prototypovanie ovládacej podložky

Pred spájkovaním odporúčam najskôr otestovať svoj program na doske.

Tu vidíte moju schému.

Tlačidlá 1 a 2 budú Späť a Opakovať, 3 až 5 sú pre nástroje Štetec, Guma a Lasso, tlačidlo 6 je rýchle tlačidlo Uložiť. Kodér a potmeter ovládajú veľkosť a opacitu.

Všimnite si toho, že som ľavák a rozvrhnutie som navrhol spôsobom, ktorý je pre mňa najpohodlnejší. Pozrite sa na okamih, keď použijete svoj nepájivý panel, ako príležitosť zamyslieť sa nad tým, aké funkcie by váš ovládač mal mať, čo vám najlepšie vyhovuje a prípadne, či na jeho výrobu budete potrebovať ďalšie diely.

Krok 2: Stlačenie tlačidiel

Tlačidlá
Tlačidlá

Tlačidlá sú najjednoduchšie na implementáciu. Pozrime sa na kód:

#zahrnúť

tlačidlá const int = {2, 3, 4, 5, 6, 7, 8, 9}; // pole všetkých kolíkov tlačidiel char ctrlKey = KEY_LEFT_GUI; // použite túto možnosť pre Windows a Linux: // char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT; void setup () {// sem vložte svoj inštalačný kód, aby sa spustil raz: Serial.begin (9600); Keyboard.begin (); // Buttons - loop through the array and check for presses for (int i = buttons [0]; i <(sizeof (buttons)/sizeof (buttons [0]))+buttons [0]; ++ i) { pinMode (i, VSTUP); }} boolean readButton (int pin) {// tlačidlá kontroly a odbúrania if (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {return true; }} return false; } void doAction (int pin) {// vykonanie prepínača úloh (pin) {// ---- Skratky ---- // Zrušenie prípadu 4: Keyboard.press (ctrlKey); Keyboard.print ('z'); Serial.print ("vstup"); Serial.println (pin); oneskorenie (200); Keyboard.releaseAll (); prestávka; // Zopakovať prípad 5: Keyboard.press (ctrlKey); Keyboard.print ('y'); Serial.print ("vstup"); Serial.println (pin); oneskorenie (200); Keyboard.releaseAll (); prestávka; // Kartáčový kufrík 6: Keyboard.press ('b'); Serial.print ("vstup"); Serial.println (pin); oneskorenie (200); Keyboard.releaseAll (); prestávka; // Prípad gumy 7: Keyboard.press ('e'); Serial.print ("vstup"); Serial.println (pin); oneskorenie (200); Keyboard.releaseAll (); prestávka; // Laso prípad 8: Keyboard.press ('l'); Serial.print ("vstup"); Serial.println (pin); oneskorenie (200); Keyboard.releaseAll (); prestávka; // Uloženie prípadu 9: Keyboard.press (ctrlKey); Keyboard.print ('s'); Serial.print ("vstup"); Serial.println (pin); oneskorenie (200); Keyboard.releaseAll (); prestávka; predvolené: Keyboard.releaseAll (); prestávka; }}

prázdna slučka () {

// sem zadajte svoj hlavný kód, aby sa spúšťal opakovane:

for (int i = buttons [0]; i <sizeof (buttons)/sizeof (buttons [0])+buttons [0]; ++ i) {if (readButton (i)) {doAction (i); }} // Obnoviť modifikátory Keyboard.releaseAll ();

}

Sú dosť priamočiare. Aby počítač rozpoznal stlačenie tlačidla ako stlačenia klávesu, jednoducho použijeme funkciu Keyboard.press (). Aby sme aktivovali skratku Späť (ctrl+z), jednoducho použijeme Keyboard.press (ctrlKey) a potom Keyboard.press ('z'). Na prístup k týmto funkciám budete potrebovať príkaz Keyboard.h a inicializáciu klávesnice.

Vstupné piny sú uložené v poli, takže ich všetky môžete ľahko prepínať vo funkcii loop (). Jeden ľahký spôsob prístupu a dĺžky poľa v jazyku C ++ vydelením veľkosti celého poľa prvkom poľa a jedného prvku. Prechádzame všetkými tlačidlami, aby sme skontrolovali, či bolo jedno stlačené.

Aby boli veci usporiadané, uložil som všetky akcie svojho tlačidla do príkazu prepínača funkcie, ktorá ako argument berie číslo PIN.

Ak chcete, aby vaše tlačidlá robili rôzne veci, alebo chcete pridať ďalšie tlačidlá, jednoducho upravte obsah funkcie doAction!

Vzhľadom na to, ako fungujú fyzické tlačidlá, ich budeme musieť odstrániť. Toto má zabrániť programu čítať akékoľvek nežiaduce stlačenia spôsobené pružnosťou tlačidiel. Existuje mnoho spôsobov, ako to urobiť, ale pridal som jednoduchú funkciu readButton (), ktorá sa o to stará.

Jednoducho zapojte svoje tlačidlá 10k odpormi a mali by ste byť zlatí!

Krok 3: Potenciometer

Potenciometer
Potenciometer

Teraz k potmetru:

#zahrnúť

int dial0 = 0; void setup () {// sem vložte svoj inštalačný kód, aby sa spustil raz: Serial.begin (9600); Keyboard.begin (); // Vytáča číselník = analogRead (0); dial0 = mapa (dial0, 0, 1023, 1, 20); } void dialAction (int dial, int newVal, int lastVal) {switch (dial) {// Opacity case 0: delay (200); if (newVal! = lastVal) {int decim = ((newVal*5)/10); int jednotka = ((newVal *5)% 10); if (newVal == 20) {Keyboard.write (48+0); Keyboard.write (48+0); Serial.println ("maximálny číselník 1"); } else {decim = constrain (decim, 0, 9); jednotka = obmedzenie (jednotka, 0, 9); Serial.println (newVal*2); Keyboard.write (48+decim); Keyboard.write (48+jednotka); }} dial0 = newVal; prestávka; predvolené: break; }} // ------------------ HLAVNÍ SMYČKA ------------------------- neplatné loop () {// sem vložte svoj hlavný kód, aby sa spúšťal opakovane: // Opacity // delay (500); int val0 = analogRead (0); val0 = mapa (val0, 0, 1023, 1, 20); //Serial.print ("dial0:"); //Serial.println(val0); if (val0! = dial0) {// Urobte niečo dialAction (0, val0, dial0); }}

Potmeter meria rovnakú logiku, ale je trochu zložitejší.

Najprv sa pozrime, ako chceme, aby fungoval: Photoshop má niekoľko šikovných skratiek na zmenu nepriehľadnosti štetca. Ak stlačíte akékoľvek tlačidlo num, nepriehľadnosť sa bude rovnať číslu*10. Ak však stlačíte dve čísla, druhé číslo sa bude čítať ako jednotka, čo vám poskytne presnejšie ovládanie.

Chceme teda, aby náš potmeter mapoval jeho rotáciu na percentá, ale nechceme to robiť stále, pretože by to bolo hlúpe. Chceme zmeniť opacitu iba vtedy, keď sa otáča potmeter. Uložíme teda dodatočnú hodnotu, ktorú porovnáme s hodnotou analogRead (), a akčný skript spustíme iba vtedy, ak existuje rozdiel.

Ďalším problémom, s ktorým sa stretneme, je to, ako otočíme návrat int z analogRead ako vstup. Pretože neexistuje jednoduchý spôsob, ako premeniť int na reťazec, budeme musieť použiť samotný int. Ak však jednoducho napíšete Keyboard.press (int), všimnete si, že vstup nebude taký, ako ste chceli, a namiesto toho sa stlačí iný kláves.

Dôvodom je, že všetky klávesy vašej klávesnice sú kódované ako celé čísla, pričom každý kláves má svoj vlastný index. Ak chcete správne používať kláves num, budete si musieť vyhľadať ich index v tabuľke ASCII:

Ako vidíte, klávesy num začínajú na indexe 48. Na stlačenie správneho klávesu teda budeme musieť iba pridať hodnotu číselníka na 48. Desatinná a jednotková hodnota sú oddelené stlačenia.

Nakoniec potrebujeme spôsob, ako zabrániť skákaniu hodnoty tam a späť. Pretože keď sa pokúsite použiť číselník s mapou (val0, 0, 1023, 0, 100), zistíte, že výsledky sú veľmi nervózne. Podobne ako sme odstránili tlačidlá, opravíme to obetovaním určitej presnosti. Zistil som, že mapovanie na 1-20 a potom vynásobenie hodnoty argumentov číslom 5 je prijateľný kompromis.

Na pripojenie potenciometra stačí pripojiť 5V vodič, uzemňovací vodič a analógový vstupný vodič a nemali by byť žiadne problémy.

Zábavný fakt: Ak použijete túto skratku, keď je vybraný nástroj ako Lasso, namiesto toho zmení krytie vrstvy. Niečo, čo by ste si mali všimnúť.

Krok 4: Rotačný kodér

Rotačný kodér
Rotačný kodér

Rotačné enkodéry sú trochu ako potenciometre, ale bez obmedzenia, do akej miery môžu otáčať. Namiesto analógovej hodnoty sa pozrieme na smer otáčania kodéra digitálne. Nebudem sa veľmi rozpisovať o tom, ako tieto funkcie fungujú, ale čo potrebujete vedieť, je to, že používa dva vstupné piny na arduine, aby zistil, akým smerom sa otáča. S rotačným kodérom sa dá pracovať ťažšie, rôzne kodéry môžu vyžadovať rôzne nastavenia. Aby to bolo jednoduchšie, kúpil som si jeden s PCB, ktoré sú pripravené na zavesenie pomocou kolíkov. Teraz kód:

#zahrnúť

// Rotačný kodér #definovať výstupA 15 #definovať výstupB 14 int counter = 0; int aState; int aLastState; void setup () {// sem vložte svoj inštalačný kód, aby sa spustil raz: // Rotary pinMode (outputA, INPUT); pinMode (outputB, INPUT); // Číta počiatočný stav outputA aLastState = digitalRead (outputA); } void rotaryAction (int dir) {if (dir> 0) {Keyboard.press (']'); } else {Keyboard.press ('['); } Keyboard.releaseAll (); } // ------------------ HLAVNÁ SMYČKA ------------------------- prázdna slučka () {// sem vložte svoj hlavný kód, aby sa spúšťal opakovane: // Size aState = digitalRead (outputA); if (aState! = aLastState) {if (digitalRead (outputB)! = aState) {// counter ++; rotačná akcia (1); } else {// počítadlo -; rotačná akcia (-1); } //Serial.print("Position: "); //Serial.println(počítač); } aLastState = aState; }

Skratky] a [skratky Photoshopu] predvolene zväčšujú a zmenšujú. Rovnako ako predtým ich chceme zadať ako stlačenie klávesov. Kodér odosiela niekoľko vstupov za otáčku (čo závisí od modelu) a pre každý z týchto vstupov chceme zväčšiť/zmenšiť veľkosť štetca, aby ste voličom mohli otáčať nahor alebo nadol skutočne rýchlo, ale zároveň byť schopní ovládajte ho pomaly s veľkou presnosťou.

Rovnako ako u potmetra chceme akciu vykonať iba vtedy, keď sa otáča číselník. Na rozdiel od potmetra, ako som už vysvetlil predtým, má rotačný snímač dva striedavé vstupy. Pozrime sa, ktoré z nich sa zmenili, aby sme zistili smer otáčania číselníka.

Potom podľa smeru stlačíme správny kláves.

Pokiaľ nemáte problémy s kontaktmi, malo by to fungovať.

Krok 5: Dajte to všetko dohromady

Dávať to všetko dokopy
Dávať to všetko dokopy
Dávať to všetko dokopy
Dávať to všetko dokopy
Dávať to všetko dokopy
Dávať to všetko dokopy

Teraz k spájkovaniu. Najprv do perfboardu vyvŕtame dva otvory, aby sa zmestili na dva ciferníky. spájkujeme tlačidlá a ich príslušné odpory. Vyvŕtal som dva extra malé otvory, aby vstupné vodiče mohli prechádzať zhora, aby sa ušetrilo miesto pod nimi, ale nie je to potrebné. Nie je veľa vstupných vodičov, takže vodiče GND a 5V bežia paralelne, ale ak sa cítite prefíkane, možno budete chcieť vytvoriť maticu. Mikrokontrolér som spájkoval s inou, menšou doskou, ktorá sa zmestila pod kodér a potmeter. Teraz spájkujem všetky vodiče k ProMicro. Nie je potrebné byť kreatívny, len som sa musel riadiť rovnakou schémou ako na prkénku, ale spájkovanie na takom malom mieste môže byť pochopiteľne únavné. Nebuďte ako ja, použite odstraňovač drôtov a dobrú spájku!

Nakoniec by ste mohli chcieť urobiť pekné puzdro pre svojho nového priateľa vo Photoshope. Aspoň jeden lepší ako môj!

Ak to však chcete skúsiť, použite kartón a pásku a zapojte micro USB.

Krok 6: Kód + ukážka

Image
Image

Nezabudnite otestovať program ovládacieho panela počas pohybu v projekte, aby ste predišli prekvapeniam!

Tu je kompletný kód:

Ďakujem veľmi pekne za prečítanie!

Odporúča: