Satura rādītājs:

Mini vadības bloks Photoshop (Arduino): 6 soļi
Mini vadības bloks Photoshop (Arduino): 6 soļi

Video: Mini vadības bloks Photoshop (Arduino): 6 soļi

Video: Mini vadības bloks Photoshop (Arduino): 6 soļi
Video: удаление неизвестного объекта 2024, Septembris
Anonim
Mini vadības bloks Photoshop (Arduino)
Mini vadības bloks Photoshop (Arduino)

Šeit es jums parādīšu, kā izveidot nelielu rīku, lai palīdzētu jums ātrāk strādāt Photoshop!

Tastatūras, kas īpaši paredzētas PS, nav jaunas, taču tās nepiedāvā tieši to, kas man vajadzīgs. Kā gleznotājam liela daļa mana laika Photoshop tiek pavadīta, pielāgojot otu iestatījumus, un es domāju, ka vienkāršas īsinājumtaustiņi nedod man kontroli, kas atbilstu manai darbplūsmai. Tāpēc es nolēmu izveidot savu tastatūru, kas ir maza, neuzkrītoša un kurai ir ciparnīcas, lai sniegtu man vienmēr nepieciešamo analogo mijiedarbību.

Tas darbojas vienkārši: lai mikrokontrolleris mijiedarbotos ar Photoshop, mēs izmantojam noklusējuma īsceļus. Ja ir tāfele, kuru dators var nolasīt kā tastatūru/peli, viss, kas mums jādara, ir jāizmanto dažas vienkāršas koda rindas, lai datoram pateiktu, ka katra ievade jālasa kā taustiņu nospiešana. Tagad atsaukšanas poga ir tikai pogas nospiešanas attālumā!

Sāksim! Šim projektam jums būs nepieciešams:

  • 1 Sparkfun ProMicro (vai Arduino Leonardo, nav ieteicams)
  • 1 mikro-USB adapteris
  • 6 spiedpogas (vai jebkurš skaitlis, kas jums patīk)
  • 10 kΩ rezistori (1 katrai pogai)
  • 1 potenciometrs
  • 1 rotējošais kodētājs
  • vadi, maizes dēlis, perforators, lodmetāls, galvenes tapas utt.

Šim projektam varat izmantot Arduino Leonardo, taču ProMicro ir daudz lētāka alternatīva, kas izmanto to pašu atmega32u4 mikroshēmu, tai ir vairāk tapas un tā ir daudz mazākā formā, padarot to ideāli piemērotu tastatūrai.

Lai ieprogrammētu ProMicro Arduino IDE, iespējams, vispirms būs jāiestata dažas lietas. Vairāk par to varat izlasīt SparkFun ceļvedī:

Ja jūsu datoram ir grūtības atrast ierīci, pārliecinieties, vai jūsu izmantotais mikro-USB nav tikai strāvas avots un atbalsta datu pārsūtīšanu.

Šis ir mans pirmais Arduino projekts, un tas ir piemērots iesācējiem.

1. darbība. Vadības bloka prototipa izveide

Vadības bloka prototips
Vadības bloka prototips

Pirms sākt lodēt, es iesaku vispirms pārbaudīt savu programmu uz maizes dēļa.

Šeit jūs varat redzēt manu shēmu.

Pogas 1 un 2 būs Atsaukt un Atkārtot, no 3 līdz 5 ir paredzētas suku, dzēšgumijas un Lasso rīkiem, poga 6 ir ātrā saglabāšanas poga. Kodētājs un potmetrs kontrolē attiecīgi izmēru un necaurredzamību.

Ņemiet vērā, ka esmu kreilis un izkārtojumu izstrādāju tā, kā man ir visērtāk lietot. Skatiet mirkli, kad izmantojat savu maizes dēli, kā iespēju padomāt par to, kādas funkcijas vēlaties kontrolierim, kas jums vislabāk atbilst, un galu galā, vai tā izgatavošanai būs nepieciešamas papildu detaļas.

2. solis: spiedpogas

Spiedpogas
Spiedpogas

Pogas ir visvienkāršāk ieviest. Apskatīsim kodu:

#iekļaut

const int pogas = {2, 3, 4, 5, 6, 7, 8, 9}; // visu pogu tapu masīvs char ctrlKey = KEY_LEFT_GUI; // izmantojiet šo opciju operētājsistēmai Windows un Linux: // char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT; void setup () {// ievietojiet šeit savu iestatīšanas kodu, lai palaistu vienu reizi: Serial.begin (9600); Keyboard.begin (); // Pogas - cilpa caur masīvu un pārbaudiet, vai nav nospiests (int i = pogas [0]; i <(sizeof (pogas)/sizeof (pogas [0]))+pogas [0]; ++ i) { pinMode (i, INPUT); }} Būla lasīšanas poga (int pin) {// pārbaudīt un debounce pogas, ja (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {return true; }} atgriezt nepatiesu; } void doAction (int pin) {// izpildīt uzdevumu slēdzi (pin) {// ---- Īsceļi ---- // Atsaukt 4. gadījumu: Keyboard.press (ctrlKey); Keyboard.print ('z'); Serial.print ("ievade"); Serial.println (pin); kavēšanās (200); Keyboard.releaseAll (); pārtraukums; // Atkārtot 5. lietu: Keyboard.press (ctrlKey); Keyboard.print ('y'); Serial.print ("ievade"); Serial.println (pin); kavēšanās (200); Keyboard.releaseAll (); pārtraukums; // Sukas 6. gadījums: Keyboard.press ('b'); Serial.print ("ievade"); Serial.println (pin); kavēšanās (200); Keyboard.releaseAll (); pārtraukums; // Dzēšgumijas korpuss 7: Keyboard.press ('e'); Serial.print ("ievade"); Serial.println (pin); kavēšanās (200); Keyboard.releaseAll (); pārtraukums; // Laso 8. gadījums: Keyboard.press ('l'); Serial.print ("ievade"); Serial.println (pin); kavēšanās (200); Keyboard.releaseAll (); pārtraukums; // Saglabāt 9. gadījumu: Keyboard.press (ctrlKey); Keyboard.print ('s'); Serial.print ("ievade"); Serial.println (pin); kavēšanās (200); Keyboard.releaseAll (); pārtraukums; noklusējums: Keyboard.releaseAll (); pārtraukums; }}

void loop () {

// ievietojiet savu galveno kodu šeit, lai palaistu atkārtoti:

for (int i = pogas [0]; i <sizeof (pogas)/sizeof (pogas [0])+pogas [0]; ++ i) {if (readButton (i)) {doAction (i); }} // Atiestatīt modifikatorus Keyboard.releaseAll ();

}

Tie ir diezgan vienkārši. Lai dators atpazītu pogas nospiešanu kā taustiņa nospiešanu, mēs vienkārši izmantojam funkciju Keyboard.press (). Tātad, lai aktivizētu saīsni Atsaukt (ctrl+z), mēs vienkārši izmantojam Keyboard.press (ctrlKey) un pēc tam Keyboard.press ('z'). Atcerieties, ka, lai piekļūtu šīm funkcijām, jāiekļauj Keyboard.h un jāinicializē tastatūra.

Ievades tapas tiek glabātas masīvā, lai jūs varētu viegli izlaist tos visus cilpas () funkcijā. Viens vienkāršs veids, kā piekļūt masīva garumam c ++, dalot visa masīva lielumu ar masīva elementu, plus vienu elementu. Mēs pārbaudām visas pogas, lai pārbaudītu, vai viena ir nospiesta.

Lai lietas būtu sakārtotas, es visas savas pogas darbības glabāju funkcijas slēdzī, kas ņem PIN kodu kā argumentu.

Ja vēlaties, lai jūsu pogas veiktu dažādas darbības vai vēlaties pievienot vairāk pogu, vienkārši rediģējiet doAction funkcijas saturu!

Tā kā darbojas fiziskās pogas, mums tās būs jāatbrīvo. Tas ir paredzēts, lai programma nelasītu nevēlamus spiedienus, ko izraisa spiedpogas. Ir daudz veidu, kā to izdarīt, bet es pievienoju vienkāršu funkciju ReadButton (), kas par to rūpējas.

Vienkārši savienojiet pogas ar dažiem 10 000 rezistoriem, un jums vajadzētu būt zeltainam!

3. solis: potenciometrs

Potenciometrs
Potenciometrs

Tagad uz potmetru:

#iekļaut

int dial0 = 0; void setup () {// ievietojiet šeit savu iestatīšanas kodu, lai palaistu vienu reizi: Serial.begin (9600); Keyboard.begin (); // Dials dial0 = analogRead (0); dial0 = karte (dial0, 0, 1023, 1, 20); } void dialAction (int dial, int newVal, int lastVal) {switch (dial) {// Necaurredzamības gadījums 0: kavēšanās (200); ja (newVal! = lastVal) {int decim = ((newVal*5)/10); int vienība = ((newVal *5)% 10); ja (newVal == 20) {Keyboard.write (48+0); Tastatūra. Rakstīt (48+0); Serial.println ("maksimālais numurs 1"); } cits {decim = ierobežot (decim, 0, 9); vienība = ierobežot (vienība, 0, 9); Serial.println (newVal*2); Keyboard.write (48+decimāldaļas); Keyboard.write (48+vienība); }} dial0 = newVal; pārtraukums; noklusējums: pārtraukums; }} // ------------------ GALVENĀ LOOP ------------------------- anulēts loop () {// ievieto šeit savu galveno kodu, lai palaistu atkārtoti: // Opacity // delay (500); int val0 = analogRead (0); val0 = karte (val0, 0, 1023, 1, 20); //Serial.print ("dial0:"); //Serial.println(val0); if (val0! = dial0) {// Dariet kaut ko dialAction (0, val0, dial0); }}

Potmetrs ievēro to pašu loģiku, bet tas ir nedaudz sarežģītāk.

Vispirms apskatīsim, kā mēs vēlamies, lai tas darbotos: Photoshop ir daži ērti īsceļi, lai mainītu otas necaurredzamību. Nospiežot jebkuru ciparu taustiņu, necaurredzamība būs vienāda ar šo skaitli*10. Bet, nospiežot divus ciparus, otrais skaitlis tiks nolasīts kā vienība, nodrošinot precīzāku kontroli.

Tāpēc mēs vēlamies, lai mūsu potmetrs noteiktu rotāciju līdz procentiem, bet mēs nevēlamies to darīt visu laiku, jo tas būtu muļķīgi. Mēs vēlamies mainīt necaurredzamību tikai tad, kad tiek pagriezts mērītājs. Tāpēc mēs saglabājam papildu vērtību, ko salīdzinām ar analogRead () vērtību, un palaižam darbības skriptu tikai tad, ja ir atšķirība.

Vēl viena problēma, ar kuru mēs saskarsimies, ir tas, kā mēs kā ievadi pārvēršam analogRead atgriešanos int. Tā kā nav vienkārša veida, kā pārvērst int par virkni, mums būs jāizmanto pati int. Tomēr, ja jūs vienkārši rakstāt Keyboard.press (int), jūs pamanīsit, ka ievade nebūs tāda, kādu vēlaties, un tā vietā tiks nospiests cits taustiņš.

Tas ir tāpēc, ka tastatūras taustiņi ir kodēti kā veseli skaitļi, un katram taustiņam ir savs indekss. Lai pareizi lietotu ciparu taustiņu, jums būs jāmeklē viņu indekss ASCII tabulā:

Kā redzat, ciparu taustiņi sākas ar indeksu 48. Tātad, lai nospiestu pareizo taustiņu, viss, kas mums jādara, ir jāpievieno ciparnīcas vērtība līdz 48. Decimālās un vienības vērtības ir atsevišķas nospiešanas.

Visbeidzot, mums ir nepieciešams veids, kā neļaut vērtībai lēkt uz priekšu un atpakaļ. Tā kā, mēģinot izmantot ciparnīcu ar karti (val0, 0, 1023, 0, 100), rezultāti būs ļoti nervozi. Līdzīgi kā mēs atvienojām pogas, mēs to novērsīsim, upurējot daļu precizitātes. Es atklāju, ka tā atzīmēšana līdz 1–20 un argumentu vērtības reizināšana ar 5 ir pieņemams kompromiss.

Lai pievienotu potenciometru, vienkārši pievienojiet 5V vadu, zemējuma vadu un analogo ieejas vadu, un problēmām nevajadzētu rasties.

Jautrs fakts: ja izmantojat šo saīsni, kamēr tiek atlasīts tāds rīks kā Lasso, tā vietā tiks mainīta slāņa necaurredzamība. Kaut kas jāņem vērā.

4. solis: rotācijas kodētājs

Rotācijas kodētājs
Rotācijas kodētājs

Rotējošie kodētāji ir nedaudz līdzīgi potenciometriem, bet bez ierobežojuma, cik daudz tie var pagriezties. Analogās vērtības vietā mēs digitāli aplūkosim kodētāja pagrieziena virzienu. Es neiedziļināšos daudzās detaļās par to darbību, taču jums jāzina, ka tas izmanto divas arduino ievades tapas, lai pateiktu, kādā virzienā tas tiek pagriezts. Ar rotējošo kodētāju var būt grūtāk strādāt, dažādiem kodētājiem var būt nepieciešami dažādi iestatījumi. Lai atvieglotu lietas, es nopirku vienu ar PCB, kas ir gatavi savienot ar sieviešu tapām. Tagad kods:

#iekļaut

// Rotācijas kodētājs #define outputA 15 #define outputB 14 int counter = 0; int aState; int aLastState; void setup () {// ievietojiet šeit savu iestatīšanas kodu, lai tas darbotos vienreiz: // Rotary pinMode (outputA, INPUT); pinMode (outputB, INPUT); // Nolasa izejas sākotnējo stāvokli a aLastState = digitalRead (outputA); } void rotaryAction (int dir) {if (dir> 0) {Keyboard.press (']'); } cits {Keyboard.press ('['); } Keyboard.releaseAll (); } // ------------------ MAIN LOOP ------------------------- void loop () {// ievietojiet šeit savu galveno kodu, lai to palaistu atkārtoti: // Izmērs aState = digitalRead (outputA); if (aState! = aLastState) {if (digitalRead (outputB)! = aState) {// skaitlis ++; rotācijas darbība (1); } cits {// skaitītājs -; rotācijas darbība (-1); } //Sērijas.print ("Position: "); //Sērijas.println (skaitītājs); } aPēdējāValsts = aState; }

Pēc noklusējuma Photoshop] un [īsceļi palielina un samazina otas izmēru. Tāpat kā iepriekš, mēs vēlamies tos ievadīt kā taustiņu nospiešanu. Kodētājs katrā pagriezienā nosūta vairākas ievades (kas ir atkarīgs no modeļa), un mēs vēlamies palielināt/samazināt birstes izmēru katrai no šīm ievadēm, lai jūs patiešām ātri varētu pagriezt ciparnīcu uz augšu vai uz leju, bet arī kontrolējiet to lēni ar lielu precizitāti.

Tāpat kā ar mērierīci, mēs vēlamies veikt darbību tikai tad, kad tiek pagriezts ciparnīca. Atšķirībā no potmetra, kā es iepriekš paskaidroju, rotācijas kodētājam ir divas mainīgas ieejas. Mēs aplūkojam, kurš no tiem ir mainījies, lai noteiktu virzienu, kādā tiek pagriezts ciparnīca.

Tad atkarībā no virziena mēs nospiežam pareizo taustiņu.

Kamēr jums nav kontaktu problēmu, tam vajadzētu darboties.

5. solis: salieciet to visu kopā

Visu saliekot kopā
Visu saliekot kopā
Visu saliekot kopā
Visu saliekot kopā
Visu saliekot kopā
Visu saliekot kopā

Tagad par lodēšanu. Pirmkārt, mēs urbjam divus caurumus perforatorā, lai tie atbilstu abiem ciparnīcām. mēs lodējam pogas un to attiecīgos rezistorus. Es izurbju divus papildu mazus caurumus, lai ieejas vadi izietu virsū, lai ietaupītu vietu zemāk, bet tas nav nepieciešams. Ievades vadu nav daudz, tāpēc GND un 5V vadi darbojas paralēli, bet, ja jūtaties viltīgi, iespējams, vēlēsities izveidot matricu. Es pielodēju mikrokontrolleru pie cita, mazāka izmēra plātnes, kas atradās zem kodētāja un potmetra. Tagad es lodēju visus vadus ProMicro. Nav nepieciešams būt radošam, man vienkārši bija jāievēro tā pati shēma, kas bija uz maizes dēļa, bet lodēšana tik mazā vietā, saprotams, var būt garlaicīga. Neesi tāds kā es, izmanto stiepļu noņēmēju un labu lodmetālu!

Visbeidzot, iespējams, vēlēsities izveidot jauku lietu savam jaunajam Photoshop draugam. Vismaz viens labāks par manu!

Bet, ja vēlaties to izmēģināt, izmantojiet kartonu un lenti un pievienojiet mikro-USB.

6. darbība: kods + demonstrācija

Image
Image

Pārvietojoties projektā, noteikti pārbaudiet vadības bloka programmu, lai izvairītos no pārsteigumiem!

Šeit ir pilns kods:

Liels paldies, ka lasījāt!

Ieteicams: