Tartalomjegyzék:

Mini vezérlőpad a Photoshophoz (Arduino): 6 lépés
Mini vezérlőpad a Photoshophoz (Arduino): 6 lépés

Videó: Mini vezérlőpad a Photoshophoz (Arduino): 6 lépés

Videó: Mini vezérlőpad a Photoshophoz (Arduino): 6 lépés
Videó: удаление неизвестного объекта 2024, November
Anonim
Mini vezérlőpad a Photoshophoz (Arduino)
Mini vezérlőpad a Photoshophoz (Arduino)

Itt megmutatom, hogyan készíts egy kis eszközt a Photoshop gyorsabb munkájához!

A kifejezetten PS -hez készült billentyűzetek nem újak, de nem pontosan azt kínálják, amire szükségem van. Festőként a Photoshopban töltött időm nagy részét az ecset beállításának beállításával töltöm, és úgy gondolom, hogy az egyszerű gyorsgombok nem adják meg az irányítást a munkafolyamatomhoz. Ezért úgy döntöttem, hogy saját billentyűzetet készítek, amely kicsi, nem feltűnő, és tárcsákkal rendelkezik, hogy megadja nekem azt az analóg interakciót, amelyre mindig is vágytam.

Működése egyszerű: annak érdekében, hogy a mikrovezérlő kölcsönhatásba lépjen a Photoshoppal, kihasználjuk az alapértelmezett parancsikonokat. Egy olyan táblánál, amelyet a számítógép billentyűzetként/egérként tud olvasni, mindössze annyit kell tennünk, hogy néhány egyszerű kódsor segítségével utasítjuk a számítógépet, hogy olvassa el az egyes bemeneteket a gombnyomások kombinációjaként. Most a visszavonás gomb csak egy gombnyomásra van!

Lássunk neki! Ehhez a projekthez szüksége lesz:

  • 1 Sparkfun ProMicro (vagy egy Arduino Leonardo, nem ajánlott)
  • 1 db mikro-USB adapter
  • 6 nyomógomb (vagy tetszőleges szám)
  • 10 k ohmos ellenállások (1 gombonként)
  • 1 potenciométer
  • 1 db forgó jeladó
  • vezetékek, kenyérlap, perfboard, forrasztás, fejrészek stb.

Ehhez a projekthez használhat Arduino Leonardót, de a ProMicro egy sokkal olcsóbb alternatíva, amely ugyanazt az atmega32u4 chipet használja, több tűvel rendelkezik, és sokkal kisebb formában érkezik, így tökéletes a billentyűzethez.

A ProMicro programozásához az Arduino IDE -ben először be kell állítania néhány dolgot. Erről bővebben a SparkFun útmutatójában olvashat:

Ha számítógépe nehezen találja meg az eszközt, győződjön meg arról, hogy a használt mikro-USB nem csak tápellátású, és támogatja az adatátvitelt.

Ez az első Arduino projektem, és alkalmas kezdőknek.

1. lépés: A vezérlőpult prototípusának létrehozása

A vezérlőpult prototípusának elkészítése
A vezérlőpult prototípusának elkészítése

Javaslom, hogy a forrasztás megkezdése előtt tesztelje programját kenyérsütőn.

Itt láthatod a vázlatomat.

Az 1 -es és 2 -es gombok a Visszavonás és az Újra -visszaállítások, a 3 -tól 5 -ig a Brush, Eraser és Lasso eszközök, a 6 -os gomb a gyors mentés gomb. A kódoló és a potméter szabályozza a méretet és az átlátszatlanságot.

Vegye figyelembe, hogy balkezes vagyok, és az elrendezést a számomra legkényelmesebb módon terveztem. Tekintse meg azt a pillanatot, amikor a kenyértáblát használja, hogy átgondolja, milyen funkciókat szeretne a vezérlővel ellátni, mi a legjobb az Ön számára, és végül szükség lesz -e további alkatrészekre.

2. lépés: Nyomógombok

Nyomógombok
Nyomógombok

A gombok végrehajtása a legegyszerűbb. Nézzük a kódot:

#befoglalni

const int gombok = {2, 3, 4, 5, 6, 7, 8, 9}; // az összes gombcsap tömbje char ctrlKey = KEY_LEFT_GUI; // Windows és Linux esetén használja ezt az opciót: // char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT; void setup () {// tegye ide a beállítási kódot, hogy egyszer lefusson: Serial.begin (9600); Keyboard.begin (); // Gombok - hurkolja végig a tömböt, és ellenőrizze, hogy nem nyomta -e meg (int i = gombok [0]; i <(sizeof (gombok)/sizeof (gombok [0]))+gombok [0]; ++ i) { pinMode (i, INPUT); }} boolean readButton (int pin) {// ellenőrzi és kikapcsolja a gombokat, ha (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {return true; }} return false; } void doAction (int pin) {// feladatok végrehajtása kapcsoló (pin) {// ---- Parancsikonok ---- // 4. eset visszavonása: Keyboard.press (ctrlKey); Keyboard.print ('z'); Serial.print ("bemenet"); Serial.println (pin); késleltetés (200); Keyboard.releaseAll (); szünet; // 5. eset visszaállítása: Keyboard.press (ctrlKey); Keyboard.print ('y'); Serial.print ("bemenet"); Serial.println (pin); késleltetés (200); Keyboard.releaseAll (); szünet; // 6. kefe tok: Keyboard.press ('b'); Serial.print ("bemenet"); Serial.println (pin); késleltetés (200); Keyboard.releaseAll (); szünet; // Radír 7. eset: Keyboard.press ('e'); Serial.print ("bemenet"); Serial.println (pin); késleltetés (200); Keyboard.releaseAll (); szünet; // Lasso 8. eset: Keyboard.press ('l'); Serial.print ("bemenet"); Serial.println (pin); késleltetés (200); Keyboard.releaseAll (); szünet; // 9. eset mentése: Keyboard.press (ctrlKey); Keyboard.print ('s'); Serial.print ("bemenet"); Serial.println (pin); késleltetés (200); Keyboard.releaseAll (); szünet; alapértelmezett: Keyboard.releaseAll (); szünet; }}

void loop () {

// tegye ide a fő kódot az ismételt futtatáshoz:

for (int i = gombok [0]; i <sizeof (gombok)/sizeof (gombok [0])+gombok [0]; ++ i) {if (readButton (i)) {doAction (i); }} // Módosítók visszaállítása Keyboard.releaseAll ();

}

Elég egyszerűek. Ahhoz, hogy a számítógép felismerje a gombnyomást gombnyomásként, egyszerűen a Keyboard.press () funkciót használjuk. Tehát a Visszavonás parancsikon (ctrl+z) aktiválásához egyszerűen használjuk a Keyboard.press (ctrlKey), majd a Keyboard.press ('z') billentyűt. Ne feledje, hogy ezekhez a funkciókhoz hozzá kell adnia a Keyboard.h -t, és inicializálja a billentyűzetet.

A bemeneti csapok egy tömbben vannak tárolva, így könnyedén át lehet őket hurkolni a loop () függvényben. Egy egyszerű módja annak, hogy elérje és tömb hossza c ++ - ban, ha elosztja a tömb teljes méretét a tömb elemmel, plusz egy elemmel. Az összes gombot végiggörgetve ellenőrizzük, hogy megnyomtuk -e.

A dolgok rendszerezése érdekében a gomb minden műveletét a függvény kapcsoló utasításában tároltam, amely a PIN -számot veszi argumentumként.

Ha azt szeretné, hogy a gombjai különböző dolgokat tegyenek, vagy további gombokat szeretne hozzáadni, egyszerűen szerkessze a doAction funkció tartalmát!

A fizikai gombok működése miatt le kell kapcsolnunk őket. Ez megakadályozza, hogy a program beolvassa a nyomógombok rugózása által okozott nem kívánt megnyomásokat. Ennek számos módja van, de hozzáadtam egy egyszerű readButton () függvényt, amely gondoskodik erről.

Csak kösse be a gombjait néhány 10 ezer ellenállással, és aranynak kell lennie!

3. lépés: A potenciométer

A potenciométer
A potenciométer

Most a potméterre:

#befoglalni

int dial0 = 0; void setup () {// tegye ide a beállítási kódot, hogy egyszer lefusson: Serial.begin (9600); Keyboard.begin (); // Tárcsázik dial0 = analogRead (0); dial0 = térkép (tárcsázás0, 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 egység = ((newVal *5)% 10); if (newVal == 20) {Keyboard.write (48+0); Keyboard.write (48+0); Serial.println ("max tárcsa 1"); } else {decim = kényszer (decim, 0, 9); egység = kényszer (egység, 0, 9); Serial.println (newVal*2); Keyboard.write (48+decim); Keyboard.write (48+egység); }} dial0 = newVal; szünet; alapértelmezett: break; }} // ------------------ FŐHOZAT ------------------------- érvénytelen loop () {// tegye ide a fő kódot az ismételt futtatáshoz: // Opacity // delay (500); int val0 = analógRead (0); val0 = térkép (val0, 0, 1023, 1, 20); //Serial.print ("dial0:"); //Serial.println(val0); if (val0! = tárcsáz0) {// Csinálj valamit dialAction (0, val0, dial0); }}

A fazékmérő ugyanezt a logikát követi, de kicsit trükkösebb.

Először nézzük meg, hogyan szeretnénk, hogy működjön: A Photoshop néhány praktikus gyorsbillentyűt tartalmaz az ecset átlátszatlanságának megváltoztatására. Ha bármelyik számgombot megnyomja, az átlátszatlanság megegyezik ezzel a számmal*10. De ha két számot megnyom, a második számot egységként fogja olvasni, így pontosabb irányítást biztosít.

Tehát azt akarjuk, hogy a mérőóránk százalékos arányban feltérképezze a forgását, de nem akarjuk állandóan csinálni, mert ez butaság lenne. Csak akkor akarjuk megváltoztatni az átlátszatlanságot, amikor a potmétert forgatjuk. Tehát tárolunk egy további értéket, amelyet összehasonlítunk az analogRead () értékkel, és csak akkor futtatjuk az akciószkriptet, ha eltérés van.

Egy másik kérdés, amibe bele fogunk ütni, az, hogy miként kapcsoljuk be az analogRead visszatérését int bemenetként. Mivel nincs egyszerű módja annak, hogy az int -t karakterlánccá alakítsuk, magát az int -et kell használnunk. Ha azonban egyszerűen csak a Keyboard.press (int) -t írja, akkor észre fogja venni, hogy a bemenet nem az, amit akart, és helyette egy másik gombot fog megnyomni.

Ennek oka az, hogy a billentyűzet billentyűi egész számként vannak kódolva, mindegyik billentyűnek saját indexe van. A num gomb helyes használatához meg kell keresnie az indexüket az ASCII táblázatban:

Amint láthatja, a számgombok a 48 -as indexnél kezdődnek. Tehát a megfelelő gomb megnyomásához mindössze annyit kell tennünk, hogy hozzáadjuk a tárcsa értékét a 48 -hoz. A tizedes és az egység értékek külön megnyomások.

Végül szükségünk van arra, hogy az érték ne ugráljon össze -vissza. Mert ha a tárcsával próbálja használni a térképet (val0, 0, 1023, 0, 100), akkor nagyon izgató lesz az eredmény. Hasonlóan a gombok kikapcsolásához, ezt a pontosság feláldozásával javítjuk. Megállapítottam, hogy 1-20-ra való leképezése, majd az érvek értékének 5-ös szorzata elfogadható kompromisszum.

A potenciométer csatlakoztatásához csak csatlakoztasson egy 5 V -os vezetéket, egy földelővezetéket és egy analóg bemeneti vezetéket, és nem lehet probléma.

Érdekes tény: ha ezt a parancsikont használja egy olyan eszköz kiválasztásakor, mint a Lasso, akkor a Réteg átlátszatlansága változik. Valami, amit figyelembe kell venni.

4. lépés: A forgó kódoló

A forgó kódoló
A forgó kódoló

A forgó jeladók kicsit olyanok, mint a potenciométerek, de nincs korlátozásuk arra, hogy mennyit tudnak forgatni. Analóg érték helyett digitálisan nézzük a jeladó fordulási irányát. Nem részletezem részletesen, hogyan működnek ezek, de amit tudnod kell, az az, hogy két bemenetet használ az arduino -n, hogy megmondja, melyik irányba forgatja. A forgó kódolóval bonyolultabb lehet dolgozni, a különböző kódolók eltérő beállításokat igényelhetnek. Hogy megkönnyítsem a dolgokat, vettem egyet PCB -vel, amelyek készen állnak arra, hogy női csapokkal rögzítsék. Most a kód:

#befoglalni

// Rotációs kódoló #define outputA 15 #define outputB 14 int counter = 0; int a állam; int aLastState; void setup () {// tegye ide a beállítási kódot, hogy egyszer fusson: // Rotary pinMode (outputA, INPUT); pinMode (outputB, INPUT); // Olvassa el a outputA kezdeti állapotát a aLastState = digitalRead (outputA); } void rotaryAction (int dir) {if (dir> 0) {Keyboard.press (']'); } else {Keyboard.press ('['); } Keyboard.releaseAll (); } // ------------------ MAIN LOOP ------------------------- void loop () {// tegye ide a fő kódot az ismételt futtatáshoz: // Size aState = digitalRead (outputA); if (aState! = aLastState) {if (digitalRead (outputB)! = aState) {// számláló ++; rotaryAction (1); } else {// számláló -; rotaryAction (-1); } // Sorozat.nyom ("Position: "); // Sorozat.println (számláló); } aLastState = aState; }

Alapértelmezés szerint a Photoshop] és [hivatkozások növelik és csökkentik az ecset méretét. Csakúgy, mint korábban, ezeket szeretnénk gombnyomásra bevinni. A kódoló fordulónként számos bemenetet küld (ez a típustól függ), és szeretnénk növelni/csökkenteni az ecsetek méretét mindegyik bemenetnél, így valóban gyorsan fel vagy le forgathatja a tárcsát. lassan, nagy pontossággal vezérelheti.

A potméterhez hasonlóan csak akkor szeretnénk futtatni a műveletet, amikor a tárcsát forgatjuk. A potmétertől eltérően, amint azt korábban kifejtettem, a forgó jeladónak két váltakozó bemenete van. Megnézzük, hogy ezek közül melyik változott, hogy megállapítsuk a tárcsa forgatásának irányát.

Ezután az iránytól függően megnyomjuk a megfelelő gombot.

Amíg nincs kapcsolatfelvételi problémája, működnie kell.

5. lépés: Összerakni

Összerakni
Összerakni
Összerakni
Összerakni
Összerakni
Összerakni

Most térjünk rá a forrasztásra. Először két lyukat fúrunk a perfboardba, hogy illeszkedjen a két tárcsához. a forrasztjuk a gombokat és a hozzájuk tartozó ellenállásokat. Két extra kis lyukat fúrtam, hogy a bemeneti vezetékek felülről haladjanak, hogy helyet takarítsanak meg alatta, de ez nem szükséges. Nincs sok bemeneti vezeték, ezért a GND és az 5 V -os vezetékek párhuzamosan futnak, de ha ügyesnek érzi magát, érdemes mátrixot készíteni. A mikrokontrollert forrasztottam egy másik, kisebb perforációs lapra, amely alul elfér a kódoló és a mérőműszer mellett. Most forrasztom az összes vezetéket a ProMicro -hoz. Nem kell kreatívnak lenni, csak ugyanazt a sémát kellett követnem, mint a kenyérlapon, de a forrasztás egy ilyen kis helyen érthetően unalmas lehet. Ne legyél olyan, mint én, használj drótcsupaszítót és jó forrasztót!

Végezetül érdemes egy szép tokot készíteni az új Photoshop haverjának. Legalább egy jobb, mint az enyém!

De ha szívesen kipróbálná, használjon kartont és szalagot, és csatlakoztassa a mikro-USB-t.

6. lépés: Kód + bemutató

Image
Image

A meglepetések elkerülése érdekében feltétlenül tesztelje a vezérlőpult programját a projekt során.

Itt a teljes kód:

Köszönöm szépen, hogy elolvastad!

Ajánlott: