Բովանդակություն:

Mini Control Pad Photoshop- ի համար (Arduino) `6 քայլ
Mini Control Pad Photoshop- ի համար (Arduino) `6 քայլ

Video: Mini Control Pad Photoshop- ի համար (Arduino) `6 քայլ

Video: Mini Control Pad Photoshop- ի համար (Arduino) `6 քայլ
Video: Ինչպես կառավարել բազմաթիվ Servo շարժիչները Arduino- ի հետ մեկ պոտենցիոմետր օգտագործելով 2024, Հուլիսի
Anonim
Mini Control Pad Photoshop- ի համար (Arduino)
Mini Control Pad Photoshop- ի համար (Arduino)

Ահա ես ձեզ ցույց կտամ, թե ինչպես պատրաստել մի փոքրիկ գործիք, որը կօգնի ձեզ ավելի արագ աշխատել Photoshop- ում:

PS- ի համար հատուկ պատրաստված ստեղնաշարերը նոր չեն, բայց դրանք հենց այն չեն, ինչ ինձ պետք է: Որպես նկարիչ, Photoshop- ում իմ ժամանակի մեծ մասն անցնում է խոզանակի կարգավորումը կարգավորելու համար, և ես կարծում եմ, որ պարզ դյուրանցման կոճակները ինձ չեն տալիս իմ աշխատանքային հոսքին համապատասխանելու վերահսկողություն: Այսպիսով, ես որոշեցի պատրաստել իմ սեփական ստեղնաշարը, որը փոքր է, աննկատ և ունի հավաքիչներ, որոնք ինձ տալիս են այն անալոգային փոխազդեցությունը, որը ես միշտ ցանկացել եմ:

Գործողության եղանակը պարզ է. Որպեսզի միկրոկառավարիչը փոխազդեցվի Photoshop- ի հետ, մենք օգտվում ենք կանխադրված դյուրանցումներից: Տախտակով, որը համակարգիչը կարող է կարդալ որպես ստեղնաշար/մկնիկ, մեզ մնում է միայն օգտագործել կոդի մի քանի պարզ տող `համակարգչին ասելու համար, որ յուրաքանչյուր մուտքագրում կարդա որպես ստեղնաշարի համադրություն: Այժմ հետարկելու կոճակը ընդամենը մի կոճակ սեղմել է:

Եկեք սկսենք! Այս նախագծի համար ձեզ հարկավոր է.

  • 1 Sparkfun ProMicro (կամ Arduino Leonardo, խորհուրդ չի տրվում)
  • 1 միկրո USB ադապտեր
  • 6 կոճակ (կամ ցանկացած թիվ, որը Ձեզ դուր է գալիս)
  • 10k Ohm ռեզիստորներ (1 յուրաքանչյուր կոճակի համար)
  • 1 պոտենցիոմետր
  • 1 պտտվող կոդավորիչ
  • մետաղալարեր, տախտակ, տախտակ, զոդ, վերնագրի կապում և այլն:

Այս նախագծի համար կարող եք օգտագործել Arduino Leonardo- ն, բայց ProMicro- ն շատ ավելի էժան այլընտրանք է, որն օգտագործում է նույն atmega32u4 չիպը, ունի ավելի շատ կապում և գալիս է շատ ավելի փոքր տեսքով ՝ այն կատարյալ դարձնելով ստեղնաշարի համար:

Arduino IDE- ում ProMicro- ն ծրագրավորելու համար գուցե անհրաժեշտ լինի նախ որոշ բաներ կարգավորել: Դրա մասին ավելին կարող եք կարդալ SparkFun- ի ուղեցույցում ՝

Եթե ձեր համակարգիչը դժվարանում է գտնել սարքը, համոզվեք, որ ձեր օգտագործած միկրո USB- ը միայն էներգիայի չէ և ապահովում է տվյալների փոխանցումը:

Սա իմ առաջին Arduino նախագիծն է և հարմար է սկսնակների համար:

Քայլ 1. Կառավարման վահանակի նախատիպավորում

Կառավարման վահանակի նախատիպավորում
Կառավարման վահանակի նախատիպավորում

Ես խորհուրդ եմ տալիս նախքան զոդման աշխատանքները սկսելը ստուգել ձեր ծրագիրը սեղանի վրա:

Այստեղ դուք կարող եք տեսնել իմ սխեմատիկ պատկերը:

1 -ին և 2 -րդ կոճակները կլինեն Undo և Redo, 3 -ից 5 -ը ՝ Brush, Eraser և Lasso գործիքների համար, 6 -ը ՝ արագ Save կոճակ: Կոդավորիչը և չափիչ սարքը համապատասխանաբար վերահսկում են Չափը և Անթափանցիկությունը:

Նկատի ունեցեք, որ ես ձախլիկ եմ և դասավորությունը նախագծել եմ այնպես, ինչպես ինձ համար առավել հարմար է օգտագործել: Տեսեք այն պահը, երբ դուք օգտագործում եք ձեր տախտակը որպես հնարավորություն մտածելու այն մասին, թե ինչ գործառույթներ կցանկանայիք ունենալ ձեր վերահսկիչը, ինչն է ձեզ ավելի լավ աշխատում և, ի վերջո, դրա պատրաստման համար լրացուցիչ մասերի կարիք կունենաք:

Քայլ 2: Սեղմեք կոճակները

Հրել կոճակներ
Հրել կոճակներ

Կոճակներն ամենապարզն են իրականացնելու համար: Եկեք նայենք ծածկագրին.

#ներառում

const int կոճակներ = {2, 3, 4, 5, 6, 7, 8, 9}; // բոլոր կոճակների կապումների զանգված char ctrlKey = KEY_LEFT_GUI; // օգտագործել այս տարբերակը Windows- ի և Linux- ի համար. // char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT; void setup () {// տեղադրեք ձեր տեղադրման կոդը այստեղ ՝ մեկ անգամ գործարկելու համար. Serial.begin (9600); Keyboard.begin (); // Կոճակներ - անցեք զանգվածի միջով և ստուգեք սեղմումները (int i = կոճակներ [0]; i <(sizeof (կոճակներ)/sizeof (կոճակներ [0]))+կոճակներ [0]; ++ i) { pinMode (i, INPUT); }} boolean readButton (int pin) {// ստուգել և դուրս բերել կոճակները, եթե (digitalRead (pin) == HIGH) {հետաձգում (10); if (digitalRead (pin) == HIGH) {return true; }} վերադարձնել կեղծ; } void doAction (int pin) {// կատարել առաջադրանքների անջատիչ (pin) {// ---- դյուրանցումներ ---- // Հետարկել գործ 4: Keyboard.press (ctrlKey); Keyboard.print ('z'); Serial.print («մուտքագրում»); Serial.println (քորոց); ուշացում (200); Keyboard.releaseAll (); ընդմիջում; // Կրկնել գործը 5: Keyboard.press (ctrlKey); Keyboard.print ('y'); Serial.print («մուտքագրում»); Serial.println (քորոց); ուշացում (200); Keyboard.releaseAll (); ընդմիջում; // Խոզանակի պատյան 6: Keyboard.press ('b'); Serial.print («մուտքագրում»); Serial.println (քորոց); ուշացում (200); Keyboard.releaseAll (); ընդմիջում; // Ռետին պատյան 7: Keyboard.press ('e'); Serial.print («մուտքագրում»); Serial.println (քորոց); ուշացում (200); Keyboard.releaseAll (); ընդմիջում; // Lasso պատյան 8: Keyboard.press ('l'); Serial.print («մուտքագրում»); Serial.println (քորոց); ուշացում (200); Keyboard.releaseAll (); ընդմիջում; // Պահել գործ 9 -ը ՝ Keyboard.press (ctrlKey); Keyboard.print ('s'); Serial.print («մուտքագրում»); Serial.println (քորոց); ուշացում (200); Keyboard.releaseAll (); ընդմիջում; կանխադրված ՝ Keyboard.releaseAll (); ընդմիջում; }}

դատարկ շրջան () {

// տեղադրեք ձեր հիմնական կոդը այստեղ ՝ բազմիցս գործարկելու համար.

(int i = կոճակներ [0]; i <sizeof (կոճակներ)/sizeof (կոճակներ [0])+կոճակներ [0]; ++ i) {if (readButton (i)) {doAction (i); }} // Վերականգնել փոփոխիչների Keyboard.releaseAll ();

}

Նրանք բավականին պարզ են: Որպեսզի համակարգիչը ճանաչի կոճակը սեղմելը որպես ստեղն, մենք պարզապես օգտագործում ենք Keyboard.press () գործառույթը: Հետադարձելու դյուրանցումը (ctrl+z) ակտիվացնելու համար մենք պարզապես օգտագործում ենք Keyboard.press (ctrlKey) և այնուհետև Keyboard.press ('z'): Հիշեք, որ դուք պետք է ներառեք Keyboard.h և ստեղնաշարը նախաստորագրեք ՝ այս գործառույթներին հասնելու համար:

Մուտքային կապերը պահվում են զանգվածում, այնպես որ հեշտությամբ կարող եք դրանք շրջանցել loop () գործառույթում: C ++ ում զանգվածի երկարությունն ու զանգվածը մուտք գործելու մեկ հեշտ միջոց ՝ ամբողջ զանգվածի չափը բաժանելով զանգվածի տարրի վրա, գումարած մեկ տարր: Մենք շրջում ենք բոլոր կոճակները ՝ ստուգելու համար, թե արդյոք մեկը սեղմված է:

Ամեն ինչ կազմակերպված պահելու համար ես պահեցի իմ կոճակի բոլոր գործողությունները ֆունկցիայի անջատիչի հայտարարության մեջ, որն ընդունում է pin թիվը որպես արգումենտ:

Եթե ցանկանում եք, որ ձեր կոճակները տարբեր բաներ անեն, կամ ցանկանում եք ավելացնել ավելի շատ կոճակներ, պարզապես խմբագրեք doAction գործառույթի բովանդակությունը:

Քանի որ ֆիզիկական կոճակները աշխատում են, մենք պետք է դրանք հանել: Սա կանխելու համար է, որ ծրագիրը չկարդա ցանկացած անցանկալի սեղմում, որը առաջացել է սեղմման կոճակների գարնանայինությունից: Կան բազմաթիվ եղանակներ դա անելու համար, բայց ես ավելացրեցի պարզ readButton () գործառույթը, որը հոգ է տանում դրա մասին:

Պարզապես լարեք ձեր կոճակները մոտ 10k դիմադրիչներով, և դուք պետք է ոսկեգույն լինեք:

Քայլ 3: Պոտենցիոմետր

Պոտենցիոմետր
Պոտենցիոմետր

Այժմ անցեք կոշմաչափի վրա.

#ներառում

int հավաքեք 0 = 0; void setup () {// տեղադրեք ձեր տեղադրման կոդը այստեղ ՝ մեկ անգամ գործարկելու համար. Serial.begin (9600); Keyboard.begin (); // Հավաքում է dial0 = analogRead (0); dial0 = քարտեզ (հավաքեք 0, 0, 1023, 1, 20); } void dialAction (int dial, int newVal, int lastVal) {switch (հավաքեք) {// Opacity case 0: delay (200); եթե (newVal! = lastVal) {int տասնորդական = ((newVal*5)/10); int միավոր = ((newVal *5)% 10); if (newVal == 20) {Keyboard.write (48+0); Keyboard.write (48+0); Serial.println ("առավելագույն հավաքեք 1"); } else {decim = սահմանափակել (decim, 0, 9); միավոր = սահմանափակում (միավոր, 0, 9); Serial.println (newVal*2); Ստեղնաշար. Գրել (48+տասնորդական); Keyboard.write (48+միավոր); }} dial0 = newVal; ընդմիջում; կանխադրված `ընդմիջում; }} // ------------------ ՀԻՄՆԱԿԱՆ ԼՈPՅՍ ------------------------- անվավեր loop () {// տեղադրեք ձեր հիմնական կոդը այստեղ ՝ բազմիցս գործարկելու համար. // Անթափանցիկություն // հետաձգում (500); int val0 = analogRead (0); val0 = քարտեզ (val0, 0, 1023, 1, 20); //Serial.print ("dial0:"); //Serial.println(val0); եթե (val0! = dial0) {// Մի բան արա dialAction (0, val0, dial0); }}

Պոտմետրը հետևում է նույն տրամաբանությանը, բայց դա մի փոքր ավելի բարդ է:

Նախ եկեք նայենք, թե ինչպես ենք մենք ուզում, որ այն աշխատի. Photoshop- ն ունի որոշ հարմար դյուրանցումներ `խոզանակի անթափանցիկությունը փոխելու համար: Եթե սեղմում եք ցանկացած թվային ստեղն, անթափանցությունը կհավասարվի այդ թվին*10: Բայց եթե սեղմեք երկու թվեր, ապա երկրորդ համարը կկարդա որպես միավոր ՝ տալով ձեզ ավելի ճշգրիտ վերահսկողություն:

Այսպիսով, մենք ցանկանում ենք, որ մեր չափիչ սարքը տոկոսադրույքի տեսնի դրա պտույտը, բայց մենք չենք ուզում դա անընդհատ անել, քանի որ դա հիմարություն կլինի: Մենք ցանկանում ենք փոխել թափանցիկությունը միայն այն ժամանակ, երբ չափիչ սարքը պտտվում է: Այսպիսով, մենք պահում ենք լրացուցիչ արժեք, որը մենք համեմատում ենք analogRead () արժեքի հետ և միայն գործողությունների սկրիպտն ենք գործարկում, երբ տարբերություն կա:

Մեկ այլ խնդիր, որի հետ մենք բախվելու ենք, այն է, թե ինչպես ենք analogRead- ի վերադարձը դարձնում int որպես մուտք: Քանի որ int- ը տողի վերածելու ոչ մի հեշտ միջոց չկա, մենք ստիպված կլինենք օգտագործել int- ն ինքնին: Այնուամենայնիվ, եթե դուք պարզապես գրեք Keyboard.press (int), ապա կնկատեք, որ մուտքագրումը չի լինի այն, ինչ ցանկանում եք, և փոխարենը սեղմվելու է մեկ այլ ստեղն:

Դա պայմանավորված է նրանով, որ ձեր ստեղնաշարի ստեղները բոլորը ծածկագրված են որպես ամբողջ թվեր, որոնցից յուրաքանչյուրն ունի իր ինդեքսը: Թվային ստեղնը ճիշտ օգտագործելու համար դուք պետք է փնտրեք դրանց ցուցանիշը ASCII աղյուսակում ՝

Ինչպես տեսնում եք, թվային ստեղները սկսվում են ինդեքս 48 -ից: Այսպիսով, ճիշտ ստեղնը սեղմելու համար մեզ մնում է միայն հավաքել 48 -ի հավաքման արժեքը: Տասնորդական և միավորային արժեքները առանձին սեղմումներ են:

Ի վերջո, մեզ պետք է մի միջոց, որը թույլ չի տա, որ արժեքը հետ ու առաջ թռչի: Քանի որ, եթե փորձեք օգտագործել հավաքեք քարտեզով (val0, 0, 1023, 0, 100), ապա արդյունքները շատ ջղային կլինեն: Նմանապես, ինչպես մենք անջատեցինք կոճակները, մենք դա կուղղենք ՝ զոհաբերելով որոշակի ճշգրտություն: Ես գտա, որ այն քարտեզագրելը 1-20-ի վրա, այնուհետև փաստարկների արժեքը 5-ով բազմապատկելը ընդունելի փոխզիջում է:

Պոտենցիոմետրը միացնելու համար պարզապես միացրեք 5 Վ լարը, գրունտալարը և անալոգային մուտքային մետաղալարը, և որևէ խնդիր չպետք է լինի:

Funվարճալի փաստ. Եթե դուք օգտագործում եք այս դյուրանցումը, մինչ Lasso- ի նման գործիք ընտրված է, այն փոխարենը կփոխի Շերտի անթափանցիկությունը: Պետք է ուշադրություն դարձնել:

Քայլ 4: Պտտվող կոդավորիչ

Պտտվող կոդավորիչ
Պտտվող կոդավորիչ

Պտտվող կոդավորիչները մի փոքր նման են պոտենցիոմետրերի, բայց առանց սահմանափակման, թե որքան կարող են դրանք պտտվել: Անալոգային արժեքի փոխարեն մենք թվային կերպով կանդրադառնանք կոդավորիչի շրջադարձի ուղղությանը: Ես շատ չեմ մանրամասնի, թե ինչպես են դրանք աշխատում, բայց այն, ինչ դուք պետք է իմանաք, այն է, որ arduino- ի վրա օգտագործում է երկու մուտքագրում ՝ ասելու, թե որ ուղղությամբ է այն շրջվում: Պտտվող կոդավորիչը կարող է ավելի բարդ աշխատել, տարբեր կոդավորողների համար կարող են պահանջվել տարբեր կարգավորումներ: Ամեն ինչ ավելի հեշտ դարձնելու համար ես գնեցի մեկը PCB- ով, որոնք պատրաստ են կապվել կանացի կապում: Այժմ, կոդը.

#ներառում

// Պտտվող կոդավորիչ #սահմանել ելքը A 15 #սահմանել ելքը B 14 int հաշվիչ = 0; int a State; int aLastState; void setup () {// տեղադրեք ձեր տեղադրման կոդը այստեղ ՝ մեկ անգամ գործարկելու համար. // Rotary pinMode (outputA, INPUT); pinMode (outputB, INPUT); // Կարդում է ելքի սկզբնական վիճակը aAastState = digitalRead (outputA); } void rotaryAction (int dir) {if (dir> 0) {Keyboard.press (']'); } else {Keyboard.press ('['); } Keyboard.releaseAll (); } // ------------------ MAIN LOOP ------------------------- դատարկ հանգույց () {// տեղադրեք ձեր հիմնական կոդը այստեղ ՝ բազմիցս գործարկելու համար. // Չափ aState = digitalRead (outputA); եթե (aState! = aLastState) {if (digitalRead (outputB)! = aState) {// հաշվիչ ++; պտտվող գործողություն (1); } else {// հաշվիչ -; պտտվող գործողություն (-1); } //Serial.print("Position: "); //Serial.println (հաշվիչ); } aLastState = aState; }

Լռելյայն, Photoshop- ի] և [դյուրանցումները մեծացնում և նվազեցնում են խոզանակի չափը: Beforeիշտ ինչպես նախկինում, մենք ցանկանում ենք դրանք մուտքագրել որպես հիմնական սեղմիչներ: Կոդավորիչը մեկ պտույտ է ուղարկում մի շարք մուտքագրումներ (ինչը կախված է մոդելից), և մենք ցանկանում ենք մեծացնել/նվազեցնել խոզանակի չափը այս մուտքերից յուրաքանչյուրի համար, այնպես որ կարող եք իսկապես արագ կամ բարձրացնել հավաքիչը, բայց նաև կարողանալ դանդաղ վերահսկել այն մեծ ճշգրտությամբ:

Theիշտ այնպես, ինչպես potmeter- ի դեպքում, մենք ցանկանում ենք գործողությունը կատարել միայն այն ժամանակ, երբ հավաքիչը պտտվում է: Ի տարբերություն potmeter- ի, ինչպես նախկինում բացատրեցի, պտտվող կոդավորողն ունի երկու փոփոխական մուտք: Մենք նայում ենք, թե դրանցից որն է փոխվել `հաստատելու համար այն ուղղությունը, որով պտտվում է հավաքիչը:

Այնուհետեւ կախված ուղղությունից, մենք սեղմում ենք ճիշտ ստեղնը:

Քանի դեռ շփման խնդիրներ չունեք, այն պետք է աշխատի:

Քայլ 5: Ամեն ինչ միասին դնել

Այդ ամենը միասին դնելը
Այդ ամենը միասին դնելը
Այդ ամենը միասին դնելը
Այդ ամենը միասին դնելը
Այդ ամենը միասին դնելը
Այդ ամենը միասին դնելը

Այժմ անցեք զոդման: Նախ, մենք երկու անցք ենք փորում տախտակի մեջ ՝ երկու թվատախտակին տեղավորելու համար: մենք կպցնում ենք կոճակները և դրանց համապատասխան դիմադրողները: Ես բացեցի երկու լրացուցիչ փոքր անցք, որպեսզի թույլ տամ, որ մուտքային լարերը անցնեն վերևից, որպեսզի տարածք խնայեն ներքևում, բայց դա անհրաժեշտ չէ: Մուտքային լարերը շատ չեն, այնպես որ GND և 5V լարերը զուգահեռ են անցնում, բայց եթե խորամանկ եք զգում, գուցե ցանկանաք մատրիցա պատրաստել: Ես միկրոկառավարիչը միացրեցի մեկ այլ, ավելի փոքր տախտակի վրա, որը ներքևում տեղակայված էր կոդավորիչի և կավաչափ սարքի կողքին: Այժմ ես բոլոր լարերը կպցրեցի ProMicro- ին: Ստեղծագործ լինելու կարիք չկա, ես պարզապես պետք է հետևեի նույն սխեմային, ինչ գրատախտակին, բայց նման փոքր վայրում զոդելը հասկանալի է, որ կարող է հոգնեցուցիչ լինել: Ինձ նման մի՛ եղիր, օգտագործի՛ր մետաղալար և լավ զոդիչ:

Ի վերջո, գուցե ցանկանաք գեղեցիկ պատյան պատրաստել ձեր նոր Photoshop ընկերոջ համար: Մեկը իմից լավն է, համենայն դեպս:

Բայց եթե ցանկանում եք փորձել այն, օգտագործեք ստվարաթուղթ և ժապավեն և միացրեք ձեր միկրո USB- ը:

Քայլ 6: Կոդ + onstուցադրություն

Image
Image

Համոզվեք, որ փորձարկեք կառավարման տախտակի ծրագիրը, երբ դուք շարժվում եք նախագծում `անակնկալներից խուսափելու համար:

Ահա ամբողջական կոդը ՝

Անչափ շնորհակալ եմ կարդալու համար:

Խորհուրդ ենք տալիս: