Kazalo:
- 1. korak: Izdelava prototipa nadzorne ploščice
- Korak: Pritisnite gumbe
- 3. korak: Potenciometer
- 4. korak: rotacijski dajalnik
- 5. korak: Združite vse skupaj
- 6. korak: Koda + demonstracija
Video: Mini nadzorna ploščica za Photoshop (Arduino): 6 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:06
Tukaj vam bom pokazal, kako narediti majhno orodje za hitrejše delo v Photoshopu!
Tipkovnice, izdelane posebej za PS, niso nove, vendar ne ponujajo ravno tistega, kar potrebujem. Kot slikar večino svojega časa v Photoshopu porabim za prilagajanje nastavitve čopiča in mislim, da mi preprosti gumbi za bližnjice ne dajejo nadzora, ki bi ustrezal mojemu toku dela. Zato sem se odločil, da naredim svojo tipkovnico, majhno, nevsiljivo in s številčnicami, ki mi dajo tisto analogno interakcijo, ki sem si jo vedno želel.
Način delovanja je preprost: za omogočanje interakcije mikrokrmilnika s Photoshopom izkoristimo privzete bližnjice. S ploščo, ki jo računalnik lahko bere kot tipkovnico/miško, moramo le nekaj preprostih vrstic kode povedati računalniku, naj prebere vsak vnos kot kombinacijo pritiskov tipk. Zdaj je gumb za razveljavitev le pritisk na gumb!
Začnimo! Za ta projekt boste potrebovali:
- 1 Sparkfun ProMicro (ali Arduino Leonardo, ni priporočljivo)
- 1 adapter za mikro USB
- 6 gumbov (ali poljubno število)
- 10 k ohmski upori (1 za vsak gumb)
- 1 potenciometer
- 1 rotacijski dajalnik
- žice, plošča, plošča, spajkanje, zatiči glave itd.
Za ta projekt lahko uporabite Arduino Leonardo, vendar je ProMicro veliko cenejša alternativa, ki uporablja isti čip atmega32u4, ima več zatičev in je v precej manjši obliki, zaradi česar je kot nalašč za tipkovnico.
Če želite programirati ProMicro v Arduino IDE, boste morda morali najprej nastaviti nekaj stvari. Več o tem lahko preberete v vodniku SparkFuna:
Če ima računalnik težave pri iskanju naprave, se prepričajte, da mikro USB, ki ga uporabljate, ne podpira samo napajanja in podpira prenos podatkov.
To je moj prvi projekt Arduino in je primeren za začetnike.
1. korak: Izdelava prototipa nadzorne ploščice
Priporočam, da svoj program najprej preizkusite na plošči, preden začnete spajkati.
Tukaj si lahko ogledate mojo shemo.
Gumba 1 in 2 bosta Razveljavi in Ponovi, 3 do 5 sta za orodja Brush, Eraser in Lasso, gumb 6 je gumb za hitro shranjevanje. Dajalnik in merilnik dolžine nadzorujeta velikost in motnost.
Upoštevajte, da sem levičar in oblikoval postavitev na način, ki mi najbolj ustreza. Ta trenutek, ko uporabite svojo ploščico, si oglejte kot priložnost, da razmislite o tem, katere funkcije želite, da ima vaš krmilnik, kaj vam najbolj ustreza in sčasoma, če boste za to potrebovali dodatne dele.
Korak: Pritisnite gumbe
Gumbi so najpreprostejši za izvedbo. Oglejmo si kodo:
#vključi
const int gumbi = {2, 3, 4, 5, 6, 7, 8, 9}; // niz vseh zatičev gumbov char ctrlKey = KEY_LEFT_GUI; // uporabite to možnost za Windows in Linux: // char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT; void setup () {// vnesite svojo nastavitveno kodo sem, da se enkrat zažene: Serial.begin (9600); Keyboard.begin (); // Gumbi - preglejte matriko in preverite, ali so pritisnjeni (int i = gumbi [0]; i <(velikostof (gumbi)/velikostof (gumbi [0]))+gumbi [0]; ++ i) { pinMode (i, INPUT); }} boolean readButton (int pin) {// gumbi za preverjanje in razveljavitev if (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {vrne true; }} return false; } void doAction (int pin) {// izvedba stikala opravil (pin) {// ---- Bližnjice ---- // Razveljavitev črk 4: Keyboard.press (ctrlKey); Keyboard.print ('z'); Serial.print ("vnos"); Serial.println (pin); zamuda (200); Keyboard.releaseAll (); prekiniti; // Redo case 5: Keyboard.press (ctrlKey); Keyboard.print ('y'); Serial.print ("vnos"); Serial.println (pin); zamuda (200); Keyboard.releaseAll (); prekiniti; // Ohišje čopiča 6: Keyboard.press ('b'); Serial.print ("vnos"); Serial.println (pin); zamuda (200); Keyboard.releaseAll (); prekiniti; // Ohišje radirke 7: Keyboard.press ('e'); Serial.print ("vnos"); Serial.println (pin); zamuda (200); Keyboard.releaseAll (); prekiniti; // Primer Lasso 8: Keyboard.press ('l'); Serial.print ("vnos"); Serial.println (pin); zamuda (200); Keyboard.releaseAll (); prekiniti; // Shrani primer 9: Keyboard.press (ctrlKey); Keyboard.print ('s'); Serial.print ("vnos"); Serial.println (pin); zamuda (200); Keyboard.releaseAll (); prekiniti; privzeto: Keyboard.releaseAll (); prekiniti; }}
void loop () {
// vnesite svojo glavno kodo sem, da se zažene večkrat:
for (int i = gumbi [0]; i <sizeof (gumbi)/sizeof (gumbi [0])+gumbi [0]; ++ i) {if (readButton (i)) {doAction (i); }} // Ponastavi modifikatorje Keyboard.releaseAll ();
}
So dokaj preprosti. Če želite, da računalnik prepozna pritisk tipke kot pritisk tipke, preprosto uporabimo funkcijo Keyboard.press (). Torej, da aktiviramo bližnjico za razveljavitev (ctrl+z), preprosto uporabimo Keyboard.press (ctrlKey) in nato Keyboard.press ('z'). Ne pozabite, da boste morali za dostop do teh funkcij vključiti Keyboard.h in inicializirati tipkovnico.
Vhodni zatiči so shranjeni v matriki, zato jih lahko preprosto prelistate v funkciji loop (). Enostaven način za dostop in dolžino matrike v c ++ z delitvijo velikosti celotne matrike z elementom matrike in enim elementom. Prelistamo vse gumbe, da preverimo, ali je bil pritisnjen.
Da bi bile stvari organizirane, sem vsa dejanja gumba shranil v stavek switch funkcije, ki za argument vzame številko pin.
Če želite, da vaši gumbi počnejo različne stvari, ali želite dodati več gumbov, preprosto uredite vsebino funkcije doAction!
Zaradi delovanja fizičnih gumbov jih bomo morali opustiti. S tem preprečite, da bi program prebral kakršne koli neželene pritiske, ki so posledica vzmetnosti tipk. Obstaja veliko načinov za to, vendar sem dodal preprosto funkcijo readButton (), ki skrbi za to.
Samo povežite svoje gumbe z 10K upori in morali bi biti zlati!
3. korak: Potenciometer
Zdaj pa na merilnik števcev:
#vključi
int izbiranje0 = 0; void setup () {// vnesite svojo nastavitveno kodo sem, da se enkrat zažene: Serial.begin (9600); Keyboard.begin (); // pokliče številko0 = analogRead (0); pokliči0 = zemljevid (pokliči0, 0, 1023, 1, 20); } void dialAction (int klicanje, int newVal, int lastVal) {stikalo (izbiranje) {// Primer motnosti 0: zakasnitev (200); if (newVal! = lastVal) {int decim = ((newVal*5)/10); int enota = ((newVal *5)% 10); if (newVal == 20) {Keyboard.write (48+0); Keyboard.write (48+0); Serial.println ("max dial 1"); } else {decim = constrain (decim, 0, 9); enota = omeji (enota, 0, 9); Serial.println (newVal*2); Keyboard.write (48+decim); Keyboard.write (48+enota); }} pokliči0 = newVal; prekiniti; privzeto: break; }} // ------------------ GLAVNA ZANKA ------------------------- nična loop () {// vnesite svojo glavno kodo sem, da se večkrat zažene: // Opacity // delay (500); int val0 = analogRead (0); val0 = zemljevid (val0, 0, 1023, 1, 20); //Serial.print ("dial0:"); //Serial.println(val0); if (val0! = dial0) {// Naredite nekaj dialAction (0, val0, dial0); }}
Merilnik poti sledi isti logiki, vendar je nekoliko bolj zapleteno.
Najprej poglejmo, kako želimo, da deluje: Photoshop ima nekaj priročnih bližnjic za spreminjanje neprosojnosti čopiča. Če pritisnete katero koli tipko num, bo motnost enaka številki*10. Če pa pritisnete dve številki, bo druga številka prebrana kot enota, kar vam omogoča natančnejši nadzor.
Zato želimo, da naš merilnik poti preslika rotacijo na odstotek, vendar tega ne želimo početi ves čas, saj bi bilo to neumno. Nejasnost želimo spremeniti le, ko merimo števec. Tako shranimo dodatno vrednost, ki jo primerjamo z vrednostjo analogRead () in zaženemo skript dejanja le, če je razlika.
Drugo vprašanje, s katerim se bomo srečali, je, kako pretvorimo povratni int analogRead kot vhod. Ker ni preprostega načina za pretvorbo int v niz, bomo morali uporabiti int sam. Če pa preprosto napišete Keyboard.press (int), boste opazili, da vnos ne bo tisto, kar ste želeli, in namesto tega bo pritisnjena druga tipka.
To je zato, ker so vsi ključi na tipkovnici kodirani kot cela števila, vsaka tipka ima svoj indeks. Če želite pravilno uporabiti ključ num, boste morali poiskati njihov indeks v tabeli ASCII:
Kot lahko vidite, se številske tipke začnejo pri indeksu 48. Torej, da pritisnemo pravilno tipko, moramo le dodati številčnico številki 48. Decimalna in enotna vrednost sta ločeni pritiski.
Nazadnje potrebujemo način, da vrednost ne bo skočila naprej in nazaj. Kajti, če poskusite uporabiti številčnico z zemljevidom (val0, 0, 1023, 0, 100), bodo rezultati zelo drhteči. Podobno kot smo odstranili gumbe, bomo to popravili tako, da bomo žrtvovali nekaj natančnosti. Ugotovil sem, da je preslikava na 1-20 in nato pomnoževanje vrednosti argumentov s 5 sprejemljiv kompromis.
Če želite priključiti potenciometer, samo priključite 5V žico, ozemljitveno žico in analogno vhodno žico in ne bi smelo biti težav.
Zabavno dejstvo: če uporabite to bližnjico, medtem ko je izbrano orodje, kot je Lasso, bo namesto tega spremenilo motnost plasti. Nekaj, kar je treba upoštevati.
4. korak: rotacijski dajalnik
Rotacijski dajalniki so nekoliko podobni potenciometrom, vendar brez omejitve, koliko se lahko obrnejo. Namesto analogne vrednosti bomo digitalno gledali smer obračanja dajalnika. Ne bom se spuščal v podrobnosti o tem, kako delujejo, vendar morate vedeti, da uporablja dva vhodna zatiča na arduinu, da pove, v katero smer se obrača. Z vrtljivim dajalnikom je lahko težje delati, različni dajalniki lahko zahtevajo različne nastavitve. Za lažjo stvar sem kupil eno s tiskanimi vezji, ki so pripravljeni za pritrditev z ženskimi zatiči. Zdaj koda:
#vključi
// rotacijski dajalnik #define outputA 15 #define outputB 14 int counter = 0; int aState; int aLastState; void setup () {// vnesite nastavitveno kodo sem, da se enkrat zažene: // rotacijski pinMode (outputA, INPUT); pinMode (outputB, INPUT); // bere začetno stanje outputA aLastState = digitalRead (outputA); } void rotaryAction (int dir) {if (dir> 0) {Keyboard.press (']'); } else {Keyboard.press ('['); } Keyboard.releaseAll (); } // ------------------ MAIN LOOP ------------------------- void loop () {// vnesite svojo glavno kodo sem, da se večkrat zažene: // Velikost aState = digitalRead (outputA); if (aState! = aLastState) {if (digitalRead (outputB)! = aState) {// števec ++; rotaryAction (1); } else {// števec -; rotaryAction (-1); } //Serial.print("Position: "); //Serial.println(števec); } aLastState = aState; }
Privzeto, bližnjice Photoshopa] in [povečajo in zmanjšajo velikost čopiča. Tako kot prej jih želimo vnesti kot pritisk tipk. Dajalnik pošlje število vhodov na obrat (kar je odvisno od modela), zato želimo povečati/zmanjšati velikost čopiča za vsakega od teh vhodov, tako da lahko številčnico zelo hitro obrnete navzgor ali navzdol, hkrati pa lahko tudi nadzirajte počasi z veliko natančnostjo.
Tako kot pri merilniku števcev želimo akcijo izvesti le, ko je gumb obrnjen. Za razliko od števca, kot sem že pojasnil, ima rotacijski dajalnik dva izmenična vhoda. Pogledamo, kaj se je od tega spremenilo, da ugotovimo smer, v kateri se obrne številčnica.
Nato glede na smer pritisnemo pravo tipko.
Dokler nimate težav s stikom, bi moralo delovati.
5. korak: Združite vse skupaj
Zdaj pa k spajkanju. Najprej izvrtamo dve luknji v ploščo, da se prilegata številčnicama. spajamo gumbe in njihove upore. Izvrtal sem dve dodatni majhni luknji, da pustimo vhodne žice na vrhu, da prihranimo prostor pod njimi, vendar to ni potrebno. Vhodnih žic ni veliko, zato žice GND in 5V potekata vzporedno, če pa se počutite zvijačno, boste morda želeli narediti matriko. Mikrokrmilnik sem spajkal na drugo, manjšo ploščo, ki se spodaj prilega poleg dajalnika in merilnika. Zdaj sem spajal vse žice na ProMicro. Ni treba biti ustvarjalen, le slediti sem moral isti shemi kot tista na deski, vendar je spajkanje na tako majhnem mestu razumljivo dolgočasno. Ne bodite kot jaz, uporabite odstranjevalec žice in dobro spajkanje!
Končno boste morda želeli narediti nov primer za svojega novega prijatelja iz Photoshopa. Vsaj ena boljša od moje!
Če pa želite poskusiti, uporabite karton in trak ter priključite mikro USB.
6. korak: Koda + demonstracija
Med premikanjem po projektu obvezno preizkusite program nadzorne ploščice, da se izognete presenečenjem!
Tu je celotna koda:
Najlepša hvala za branje!
Priporočena:
Interaktivna LED stenska ploščica (lažje, kot izgleda): 7 korakov (s slikami)
Interaktivna stenska ploščica LED (lažje, kot izgleda): V tem projektu sem izdelala interaktivni LED stenski zaslon z uporabo Arduino in 3D tiskanih delov. Navdih za ta projekt je deloma prišel iz ploščic Nanoleaf. Želel sem pripraviti svojo različico, ki ni bila le ugodnejša, ampak tudi mo
Arduino LED gumbna ploščica, ki poganja obdelavo animacij: 36 korakov (s slikami)
Arduino LED gumbna ploščica, ki poganja procesorske animacije: Kaj Ta gumbna ploščica je narejena iz tiskanega vezja in drugih komponent, ki jih proizvaja Sparkfun. Poganja ga Arduino Mega. Vsak gumb je lep in mehko in zadovoljiv za pritisk, v notranjosti pa je LED RGB! Uporabljal sem ga za nadzor animacij, ki jih
Hladilna ploščica za prenosnik DIY - Awesome Life Hacks with CPU Fan - Ustvarjalne ideje - Računalniški ventilator: 12 korakov (s slikami)
Hladilna ploščica za prenosnik DIY | Awesome Life Hacks with CPU Fan | Ustvarjalne ideje | Računalniški ventilator: Ta video si morate ogledati do konca. za razumevanje videoposnetka
SVETLJIVA PLOŠČICA Z UPORABO LED !!: 5 korakov (s slikami)
SVETLJIVA PLOŠČICA Z UPORABO LED !!: IMATE LEPO STEKLENO LEPOTO Z RAVNICO, KI LEŽI V NEKEM VOGLJU VAŠE HIŠE …….. TAKO JE ČAS, DA JA ZASVETITE Z UPORABO LED
Arduino in sledilna ploščica Tic Tac Toe: 8 korakov (s slikami)
Arduino in sledilna ploščica Tic Tac Toe: Ali pa vaja pri vhodnem in izhodnem multipleksiranju ter delo z bitovi. In prispevek za natečaj Arduino. To je izvedba igre taktične takte z uporabo matrike 3x3 dvobarvnih LED za zaslon, preprosto uporovno sledilno ploščico