INHOUDSOPGAWE:

Mini Control Pad vir Photoshop (Arduino): 6 stappe
Mini Control Pad vir Photoshop (Arduino): 6 stappe

Video: Mini Control Pad vir Photoshop (Arduino): 6 stappe

Video: Mini Control Pad vir Photoshop (Arduino): 6 stappe
Video: Using Digispark Attiny85 Mini Arduino boards: Lesson 108 2024, Julie
Anonim
Mini Control Pad vir Photoshop (Arduino)
Mini Control Pad vir Photoshop (Arduino)

Hier sal ek jou wys hoe om 'n klein hulpmiddel te maak waarmee jy vinniger in Photoshop kan werk!

Sleutelborde wat spesifiek vir PS gemaak is, is nie nuut nie, maar dit bied nie presies wat ek nodig het nie. As skilder word baie van my tyd in Photoshop bestee aan die aanpassing van die kwasinstelling, en ek dink dat eenvoudige kortpadknoppies my nie die beheer gee om by my werkstroom te pas nie. Daarom het ek besluit om my eie sleutelbord te maak, klein, onopvallend en met draaiknoppe om my die analoog interaksie te gee wat ek altyd wou hê.

Die manier waarop dit werk, is eenvoudig: om die mikrobeheerder met Photoshop te laat interaksie, maak ons gebruik van die standaard kortpaaie. Met 'n bord wat die rekenaar as 'n sleutelbord/muis kan lees, hoef ons net 'n paar eenvoudige reëls kode te gebruik om die rekenaar te vertel om elke invoer te lees as 'n kombinasie van knoppies. Nou is die ontdoen -knoppie net 'n druk van die knoppie weg!

Laat ons begin! Vir hierdie projek benodig u:

  • 1 Sparkfun ProMicro (of 'n Arduino Leonardo, word nie aanbeveel nie)
  • 1 mikro-USB-adapter
  • 6 drukknoppies (of enige nommer wat u wil)
  • 10k Ohm weerstande (1 vir elke knoppie)
  • 1 potensiometer
  • 1 roterende encoder
  • drade, broodbord, perfboard, soldeersel, koppenne, ens.

U kan 'n Arduino Leonardo vir hierdie projek gebruik, maar die ProMicro is 'n baie goedkoper alternatief wat dieselfde atmega32u4 -chip gebruik, meer penne het en in 'n baie kleiner vorm kom, wat dit perfek maak vir 'n sleutelbord.

Om die ProMicro in die Arduino IDE te programmeer, moet u eers 'n paar dinge opstel. U kan meer daaroor lees in die gids van SparkFun:

As u rekenaar probleme ondervind om die toestel te vind, moet u seker maak dat die mikro-USB wat u gebruik, nie net krag het nie en dat data-oordrag ondersteun word.

Dit is my eerste Arduino -projek, en is geskik vir beginners.

Stap 1: Prototipeer die Control Pad

Prototipe van die Control Pad
Prototipe van die Control Pad

Ek beveel aan dat u u program eers op 'n broodbord toets voordat u begin soldeer.

Hier kan u my skema sien.

Knoppies 1 en 2 sal ongedaan wees en herhaal, 3 tot 5 is vir die borsel-, uitveër- en Lasso -gereedskap; knoppie 6 is 'n vinnige stoor -knoppie. Die encoder en die potmeter beheer onderskeidelik die grootte en deursigtigheid.

Let daarop dat ek linkshandig is en die uitleg ontwerp het op die manier wat my die gemaklikste is om te gebruik. Sien die oomblik dat u u broodbord gebruik as 'n geleentheid om na te dink oor watter funksies u kontroleerder wil hê, wat die beste vir u werk, en uiteindelik as u ekstra onderdele benodig.

Stap 2: Druk knoppies

Drukknoppies
Drukknoppies

Die knoppies is die eenvoudigste om te implementeer. Kom ons kyk na die kode:

#insluit

const int knoppies = {2, 3, 4, 5, 6, 7, 8, 9}; // skikking van alle knoppiespenne ctrlKey = KEY_LEFT_GUI; // gebruik hierdie opsie vir Windows en Linux: // char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT; ongeldige opstelling () {// plaas u opstellingskode hier om een keer te werk: Serial.begin (9600); Keyboard.begin (); // Knoppies - loop deur die skikking en kyk of daar ingedruk word vir (int i = knoppies [0]; i <(sizeof (knoppies)/sizeof (knoppies [0]))+knoppies [0]; ++ i) { pinMode (i, INVOER); }} boolean readButton (int pin) {// kyk en deknoppie knoppies as (digitalRead (pin) == HOOG) {delay (10); if (digitalRead (pin) == HOOG) {return true; }} vals teruggee; } void doAction (int pin) {// voer take switch (pin) uit {// ---- Kortpaaie ---- // Ontdoen geval 4: Keyboard.press (ctrlKey); Sleutelbord.afdruk ('z'); Serial.print ("invoer"); Serial.println (pen); vertraging (200); Keyboard.releaseAll (); breek; // Herhaal geval 5: Keyboard.press (ctrlKey); Sleutelbord.afdruk ('y'); Serial.print ("invoer"); Serial.println (pen); vertraging (200); Keyboard.releaseAll (); breek; // Borselkas 6: Keyboard.press ('b'); Serial.print ("invoer"); Serial.println (pen); vertraging (200); Keyboard.releaseAll (); breek; // Gomkas 7: Keyboard.press ('e'); Serial.print ("invoer"); Serial.println (pen); vertraging (200); Keyboard.releaseAll (); breek; // Lasso -saak 8: Keyboard.press ('l'); Serial.print ("invoer"); Serial.println (pen); vertraging (200); Keyboard.releaseAll (); breek; // Stoor geval 9: Keyboard.press (ctrlKey); Keyboard.print ('s'); Serial.print ("invoer"); Serial.println (pen); vertraging (200); Keyboard.releaseAll (); breek; verstek: Keyboard.releaseAll (); breek; }}

leemte -lus () {

// plaas u hoofkode hier om herhaaldelik te werk:

for (int i = knoppies [0]; i <sizeof (knoppies)/sizeof (knoppies [0])+knoppies [0]; ++ i) {if (readButton (i)) {doAction (i); }}} // Herstel wysigers Keyboard.releaseAll ();

}

Hulle is redelik eenvoudig. Om die rekenaar 'n druk op 'n knoppie te laat herken, gebruik ons eenvoudig die funksie Keyboard.press (). Om die kortpad vir ongedaan te maak (ctrl+z) te aktiveer, gebruik ons eenvoudig Keyboard.press (ctrlKey) en dan Keyboard.press ('z'). Onthou dat u Keyboard.h moet insluit en die sleutelbord moet initialiseer om toegang tot hierdie funksies te kry.

Die invoerpenne word in 'n skikking gestoor, sodat u almal maklik in die loop () -funksie kan blaai. Een maklike manier om toegang tot die skikking se lengte in c ++ te verkry deur die grootte van die hele skikking te deel deur die skikkingelement, plus een element. Ons loop deur alle knoppies om te kyk of daar op een gedruk is.

Om dinge georganiseerd te hou, het ek al die aksies van my knoppie gestoor in die skakelaarverklaring van 'n funksie wat die speldnommer as argument gebruik.

As u wil hê dat u knoppies verskillende dinge moet doen, of meer knoppies wil byvoeg, wysig u eenvoudig die inhoud van die doAction -funksie!

As gevolg van hoe fisiese knoppies werk, moet ons dit weerhou. Dit is om te voorkom dat die program ongewenste perse wat deur die veerkragtigheid van die drukknoppies veroorsaak word, kan lees. Daar is baie maniere om dit te doen, maar ek het 'n eenvoudige readButton () -funksie bygevoeg wat daarvoor sorg.

Sluit net u knoppies aan met 'n paar 10k weerstande, en u moet goudbruin wees!

Stap 3: Die potensiometer

Die potensiometer
Die potensiometer

Nou op die potmeter:

#insluit

int dial0 = 0; ongeldige opstelling () {// plaas u opstellingskode hier om een keer te werk: Serial.begin (9600); Keyboard.begin (); // Kies dial0 = analogRead (0); dial0 = kaart (dial0, 0, 1023, 1, 20); } void dialAction (int dial, int newVal, int lastVal) {switch (dial) {// Opacity case 0: delay (200); as (newVal! = lastVal) {int decim = ((newVal*5)/10); int eenheid = ((newVal *5)% 10); as (newVal == 20) {Keyboard.write (48+0); Sleutelbord.skryf (48+0); Serial.println ("maksimum skakelaar 1"); } anders {desim = beperking (desim, 0, 9); eenheid = beperking (eenheid, 0, 9); Serial.println (newVal*2); Sleutelbord.skryf (48+desim); Sleutelbord.skryf (48+eenheid); }} dial0 = newVal; breek; verstek: breek; }} // ------------------ MAIN LOOP ------------------------- nietig loop () {// plaas u hoofkode hier om herhaaldelik te werk: // Ondeursigtigheid // vertraging (500); int val0 = analogRead (0); val0 = kaart (val0, 0, 1023, 1, 20); //Serial.print ("dial0:"); //Serial.println(val0); if (val0! = dial0) {// Doen iets dialAction (0, val0, dial0); }}

Die potmeter volg dieselfde logika, maar dit is 'n bietjie lastiger.

Kom ons kyk eers hoe ons wil hê dit moet werk: Photoshop het 'n paar handige kortpaaie om die ondeursigtigheid van 'n kwas te verander. As u op enige num -toets druk, sal die ondeursigtigheid dieselfde getal wees*10. Maar as u op twee getalle druk, word die tweede getal as 'n eenheid gelees, wat u meer akkurate beheer gee.

Ons wil dus hê dat ons potmeter sy rotasie tot 'n persentasie moet toelig, maar ons wil dit nie altyd doen nie, want dit sou dom wees. Ons wil slegs die ondeursigtigheid verander as die potmeter gedraai word. Ons stoor dus 'n bykomende waarde wat ons vergelyk met die analogRead () -waarde en voer slegs die aksieskrip uit as daar 'n verskil is.

'N Ander probleem waarmee ons te doen kry, is hoe ons die analogRead se opbrengs as 'n invoer verander. Aangesien daar geen maklike manier is om 'n int in 'n string te verander nie, moet ons die int self gebruik. As u egter eenvoudig Keyboard.press (int) skryf, sal u agterkom dat die invoer nie is wat u wou hê nie, en dat 'n ander sleutel ingedruk word.

Dit is omdat die sleutels van u sleutelbord almal as heelgetalle gekodeer is, met elke sleutel sy eie indeks. Om die num -sleutel korrek te gebruik, moet u hul indeks opsoek in die ASCII -tabel:

Soos u kan sien, begin die num -sleutels by indeks 48. Om die korrekte sleutel te druk, hoef ons net die waarde van die draaiknop by 48 te voeg. Die desimale en eenheidswaardes is aparte perse.

Uiteindelik het ons 'n manier nodig om te voorkom dat die waarde heen en weer spring. Want as u probeer om die draaiknop met kaart (val0, 0, 1023, 0, 100) te gebruik, vind u die resultate baie bekommerd. Net soos ons die knoppies losgemaak het, sal ons dit regstel deur van die akkuraatheid af te staan. Ek het gevind dat die kartering daarvan na 1-20 en dan die waarde van die argumente met 5 vermenigvuldig om 'n aanvaarbare kompromie te wees.

Om die potensiometer aan te sluit, koppel net 'n 5V -draad, 'n gronddraad en 'n analoog ingangskabel, en daar behoort geen probleme te wees nie.

Prettige feit: as u hierdie kortpad gebruik terwyl 'n instrument soos die Lasso gekies word, sal dit die ondeursigtigheid van die laag verander. Iets om van kennis te neem.

Stap 4: Die Rotary Encoder

Die Rotary Encoder
Die Rotary Encoder

Rotary encoders is 'n bietjie soos potensiometers, maar sonder 'n beperking op hoeveel hulle kan draai. In plaas van 'n analoog waarde, kyk ons digitaal na die draairigting van die encoder. Ek sal nie in detail bespreek hoe dit werk nie, maar wat u moet weet, is dat dit twee invoerpenne op die arduino gebruik om te bepaal in watter rigting dit draai. Die roterende encoder kan moeiliker wees om mee te werk; verskillende encoders kan verskillende opstellings benodig. Om dinge makliker te maak, het ek een met PCB gekoop, wat gereed is om met vroulike penne vasgemaak te word. Nou, die kode:

#insluit

// Rotary encoder #definieer outputA 15 #definieer outputB 14 int counter = 0; int aStaat; int aLastState; ongeldige opstelling () {// plaas u opstellingskode hier om een keer te werk: // Rotary pinMode (outputA, INPUT); pinMode (uitvoer B, INVOER); // Lees die aanvanklike toestand van die outputA aLastState = digitalRead (outputA); } void rotaryAction (int dir) {if (dir> 0) {Keyboard.press (']'); } anders {Keyboard.press ('['); } Keyboard.releaseAll (); } // ------------------ MAIN LOOP ------------------------- leegte lus () {// plaas u hoofkode hier om herhaaldelik uit te voer: // Size aState = digitalRead (outputA); if (aState! = aLastState) {if (digitalRead (outputB)! = aState) {// counter ++; roterende aksie (1); } anders {// toonbank -; roterende aksie (-1); } //Serial.print("Posisie: "); //Serial.println (toonbank); } aLastState = aState; }

Standaard word Photoshop's] en [kortpaaie verhoog en verminder die kwasgrootte. Net soos voorheen, wil ons dit as sleutel druk. Die encoder stuur 'n aantal insette per beurt (wat afhang van die model), en ons wil die kwasgrootte vir elkeen van hierdie insette verhoog/verlaag, sodat u die draaiknop baie vinnig kan op- of afdraai, maar ook kan beheer dit stadig met groot presisie.

Net soos met die potmeter, wil ons slegs die aksie uitvoer as die draaiknop gedraai word. Anders as die potmeter, soos ek vroeër verduidelik het, het die roterende encoder twee afwisselende insette. Ons kyk na watter een hiervan verander het om vas te stel in watter rigting die draaiknop gedraai word.

Afhangende van die rigting, druk ons dan op die regte sleutel.

Solank u nie kontakprobleme het nie, behoort dit te werk.

Stap 5: Alles saamvoeg

Om alles bymekaar te sit
Om alles bymekaar te sit
Om alles bymekaar te sit
Om alles bymekaar te sit
Om alles bymekaar te sit
Om alles bymekaar te sit

Nou op die soldeer. Eerstens boor ons twee gate in die perfboard om by die twee draaiknoppies te pas. die soldeer die knoppies en hul onderskeie weerstande. Ek het twee ekstra klein gaatjies geboor om die toevoerdrade bo -op te laat loop om ruimte daaronder te bespaar, maar dit is nie nodig nie. Daar is nie baie ingangskabel nie, so die GND- en 5V -drade loop parallel, maar as u slim voel, wil u miskien 'n matriks maak. Ek het die mikrokontroleerder gesoldeer aan 'n ander, kleiner perfboard wat onder langs die encoder en die potmeter pas. Nou soldeer ek al die drade aan die ProMicro. U hoef nie kreatief te wees nie; ek moes net dieselfde skema volg as die een op die broodbord, maar soldeer in so 'n klein plek kan begryplik vervelig wees. Moenie soos ek wees nie, gebruik 'n draadstropper en 'n goeie soldeer!

Uiteindelik wil u miskien 'n goeie saak vir u nuwe Photoshop -vriend maak. Een beter as myne, ten minste!

Maar as u dit wil probeer, gebruik karton en plakband en steek u mikro-USB in.

Stap 6: Kode + demonstrasie

Image
Image

Probeer die program van die bedieningspaneel terwyl u in die projek beweeg om verrassings te voorkom!

Hier is die volledige kode:

Baie dankie dat u gelees het!

Aanbeveel: