Përmbajtje:

Mini Kontrolli për Photoshop (Arduino): 6 hapa
Mini Kontrolli për Photoshop (Arduino): 6 hapa

Video: Mini Kontrolli për Photoshop (Arduino): 6 hapa

Video: Mini Kontrolli për Photoshop (Arduino): 6 hapa
Video: Управление 16 серводвигателями с использованием модуля PCA9685 и Arduino V2 2024, Nëntor
Anonim
Mini Kontroll Pad për Photoshop (Arduino)
Mini Kontroll Pad për Photoshop (Arduino)

Këtu do t'ju tregoj se si të bëni një mjet të vogël për t'ju ndihmuar të punoni në Photoshop më shpejt!

Tastierat e krijuara posaçërisht për PS nuk janë të reja, por ato nuk ofrojnë saktësisht atë që kam nevojë. Si piktor, shumica e kohës sime në Photoshop kalon duke rregulluar cilësimin e furçës dhe mendoj se butonat e thjeshtë të shkurtoreve nuk më japin kontrollin që të përputhet me rrjedhën time të punës. Kështu vendosa të bëj tastierën time, një të vogël, të padukshme, dhe ka numra për të më dhënë atë ndërveprim analog që kam dashur gjithmonë.

Mënyra se si funksionon është e thjeshtë: për të bërë që mikrokontrolluesi të ndërveprojë me Photoshop, ne përfitojmë nga shkurtoret e paracaktuara. Me një tabelë që kompjuteri mund ta lexojë si tastierë/mi, e tëra çfarë duhet të bëjmë është të përdorim disa rreshta të thjeshtë të kodit për t'i thënë kompjuterit të lexojë çdo hyrje si një kombinim i shtypjeve të tastit. Tani butoni i anulimit është vetëm një buton i shtypur larg!

Le të fillojmë! Për këtë projekt do t'ju duhet:

  • 1 Sparkfun ProMicro (ose një Arduino Leonardo, nuk rekomandohet)
  • 1 përshtatës mikro-USB
  • 6 butona (ose çdo numër që ju pëlqen)
  • Rezistenca 10k Ohm (1 për çdo buton)
  • 1 potenciometër
  • 1 kodues rrotullues
  • tela, dërrasë buke, dërrasë metalike, saldim, kunja të kokës, etj.

Ju mund të përdorni një Arduino Leonardo për këtë projekt, por ProMicro është një alternativë shumë më e lirë që përdor të njëjtin çip atmega32u4, ka më shumë kunja dhe vjen në një formë shumë më të vogël, duke e bërë atë të përsosur për një tastierë.

Për të programuar ProMicro në Arduino IDE mund t'ju duhet të vendosni disa gjëra së pari. Mund të lexoni më shumë rreth tij në udhëzuesin e SparkFun:

Nëse kompjuteri juaj ka probleme me gjetjen e pajisjes, sigurohuni që mikro-USB që po përdorni nuk është vetëm për energji dhe mbështet transferimin e të dhënave.

Ky është projekti im i parë Arduino, dhe është i përshtatshëm për fillestarët.

Hapi 1: Prototipizimi i Kontrollit të Kontrollit

Prototipizimi i bllokut të kontrollit
Prototipizimi i bllokut të kontrollit

Unë ju rekomandoj që ta provoni programin tuaj në një dërrasë buke së pari para se të filloni të bashkoni.

Këtu mund të shihni skemën time.

Butonat 1 dhe 2 do të jenë Undo dhe Redo, 3 deri në 5 janë për mjetet Brush, Eraser dhe Lasso, butoni 6 është një buton Save i shpejtë. Kodifikuesi dhe potmetri kontrollojnë përkatësisht Madhësinë dhe Opacitetin.

Vini re se unë jam majtak dhe kam hartuar paraqitjen në mënyrën më të rehatshme për mua. Shikoni momentin kur përdorni tabelën tuaj të bukës si një mundësi për të menduar se cilat funksione dëshironi të ketë kontrolluesi juaj, çfarë funksionon më mirë për ju dhe përfundimisht nëse do t'ju duhen pjesë shtesë për ta bërë atë.

Hapi 2: Shtypni butonat

Butonat e Pushimit
Butonat e Pushimit

Butonat janë më të thjeshtë për tu zbatuar. Le t'i hedhim një sy kodit:

#përfshi

const int buttons = {2, 3, 4, 5, 6, 7, 8, 9}; // grup i të gjitha kunjave të butonit char ctrlKey = KEY_LEFT_GUI; // përdorni këtë opsion për Windows dhe Linux: // char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT; void setup () {// vendosni kodin tuaj të konfigurimit këtu, për të ekzekutuar një herë: Serial.begin (9600); Tastiera.filloj (); // Buttons - lakoni nëpër grup dhe kontrolloni për shtypjet për (int i = butonat [0]; i <(sizeof (buttons)/sizeof (buttons [0]))+buttons [0]; ++ i) { pinMode (i, INPUT); }} butoni i leximit boolean (int pin) {// kontrolloni dhe zbërtheni butonat nëse (digitalRead (pin) == HIGH) {vonesë (10); if (digitalRead (pin) == LART) {return true; }} kthehu false; } void doAction (int pin) {// kryej ndërrimin e detyrave (pin) {// ---- Shkurtoret ---- // Zhbëj rastin 4: Keyboard.press (ctrlKey); Keyboard.print ('z'); Serial.print ("input"); Serial.println (pin); vonesë (200); Keyboard.releaseAll (); pushim; // Redo case 5: Keyboard.press (ctrlKey); Tastiera.print ('y'); Serial.print ("input"); Serial.println (pin); vonesë (200); Keyboard.releaseAll (); pushim; // Kutia e furçës 6: Keyboard.press ('b'); Serial.print ("input"); Serial.println (pin); vonesë (200); Keyboard.releaseAll (); pushim; // Rasti i gomës 7: Keyboard.press ('e'); Serial.print ("input"); Serial.println (pin); vonesë (200); Keyboard.releaseAll (); pushim; // Rasti Lasso 8: Keyboard.press ('l'); Serial.print ("input"); Serial.println (pin); vonesë (200); Keyboard.releaseAll (); pushim; // Ruaj rastin 9: Keyboard.press (ctrlKey); Keyboard.print ('s'); Serial.print ("input"); Serial.println (pin); vonesë (200); Keyboard.releaseAll (); pushim; parazgjedhje: Keyboard.releaseAll (); pushim; }}

lak void () {

// vendosni kodin tuaj kryesor këtu, për të ekzekutuar në mënyrë të përsëritur:

për (int i = butonat [0]; i <sizeof (buttons)/sizeof (buttons [0])+buttons [0]; ++ i) {if (readButton (i)) {doAction (i); }} // Rivendos modifikuesit Keyboard.releaseAll ();

}

Ata janë mjaft të drejtpërdrejtë. Për ta bërë kompjuterin të njohë një shtypje butoni si një shtypës kyç ne thjesht përdorim funksionin Keyboard.press (). Pra, për të aktivizuar shkurtoren Undo (ctrl+z), ne thjesht përdorim Keyboard.press (ctrlKey) dhe më pas Keyboard.press ('z'). Mos harroni se do t'ju duhet të përfshini Keyboard.h, dhe inicializoni tastierën për të hyrë në këto funksione.

Kunjat e hyrjes ruhen në një grup, kështu që ju lehtë mund t'i lakoni të gjithë në funksionin e lakut (). Një mënyrë e thjeshtë për të hyrë dhe gjatësinë e grupit në c ++ duke e ndarë madhësinë e të gjithë grupit me elementin e grupit, plus një element. Ne kalojmë nëpër të gjithë butonat për të kontrolluar nëse njëra është shtypur.

Për t'i mbajtur gjërat të organizuara, i ruajta të gjitha veprimet e butonit tim në deklaratën switch të një funksioni që merr numrin e pinit si argument.

Nëse dëshironi që butonat tuaj të bëjnë gjëra të ndryshme, ose dëshironi të shtoni më shumë butona, thjesht modifikoni përmbajtjen e funksionit doAction!

Për shkak të funksionimit të butonave fizikë, do të na duhet t'i heqim ato. Kjo është për të parandaluar që programi të lexojë çdo shtypje të padëshiruar të shkaktuar nga pranishmëria e butonave. Ka shumë mënyra për ta bërë këtë, por shtova një funksion të thjeshtë readButton () që kujdeset për këtë.

Thjesht lidhni butonat me disa rezistorë 10k, dhe duhet të jeni të artë!

Hapi 3: Potenciometri

Potenciometri
Potenciometri

Tani në potmeter:

#përfshi

int dial0 = 0; void setup () {// vendosni kodin tuaj të konfigurimit këtu, për të ekzekutuar një herë: Serial.begin (9600); Tastiera.filloj (); // Dial dial0 = analogRead (0); dial0 = hartë (dial0, 0, 1023, 1, 20); } void dialAction (int dial, int newVal, int lastVal) {switch (dial) {// Rasti i opacitetit 0: vonesë (200); nëse (newVal! = lastVal) {int decim = ((newVal*5)/10); njësia int = ((newVal *5)% 10); if (newVal == 20) {Keyboard.write (48+0); Tastiera.shkruaj (48+0); Serial.println ("dial max 1"); } else {decim = kufizoj (decim, 0, 9); njësi = kufizim (njësi, 0, 9); Serial.println (newVal*2); Tastiera.shkruaj (48+decim); Tastiera.shkruaj (48+njësi); }} dial0 = newVal; pushim; parazgjedhje: pushim; }} // ------------------ PARA KRYESORE ------------------------- e pavlefshme loop () {// vendosni kodin tuaj kryesor këtu, për të ekzekutuar në mënyrë të përsëritur: // Opacity // vonesë (500); int val0 = analogRead (0); val0 = hartë (val0, 0, 1023, 1, 20); //Serial.print ("dial0:"); //Serial.println(val0); nëse (val0! = dial0) {// Bëni diçka dialAction (0, val0, dial0); }}

Potmetri ndjek të njëjtën logjikë, por është pak më e ndërlikuar.

Së pari le të shohim se si duam që të funksionojë: Photoshop ka disa shkurtore të dobishme për të ndryshuar errësirën e një furçë. Nëse shtypni ndonjë tast num, errësira do të jetë e barabartë me atë numër*10. Por nëse shtypni dy numra, ai do të lexojë numrin e dytë si njësi, duke ju dhënë kontroll më të saktë.

Pra, ne duam që potmetri ynë të hartojë rrotullimin e tij në një përqindje, por ne nuk duam ta bëjmë atë gjatë gjithë kohës pasi kjo do të ishte marrëzi. Ne duam të ndryshojmë errësirën kur potmetri po kthehet. Pra, ne ruajmë një vlerë shtesë të cilën e krahasojmë me vlerën analogRead () dhe ekzekutojmë skriptin e veprimit vetëm kur ka një ndryshim.

Një çështje tjetër me të cilën do të ballafaqohemi është se si e kthejmë kthimin e analogRead int si hyrje. Meqenëse nuk ka asnjë mënyrë të lehtë për ta kthyer një int në një varg, ne do të duhet të përdorim vetë int. Sidoqoftë, nëse thjesht shkruani Keyboard.press (int) do të vini re se hyrja nuk do të jetë ajo që dëshironi, dhe në vend të kësaj do të shtypet një çelës tjetër.

Kjo ndodh sepse çelësat e tastierës tuaj janë të gjithë të koduar si numra të plotë, secili çelës ka indeksin e vet. Për të përdorur çelësin num në mënyrë korrekte, do të duhet të kërkoni indeksin e tyre në tabelën ASCII:

Siç mund ta shihni, çelësat num fillojnë me indeksin 48. Pra, për të shtypur butonin e saktë, e tëra çfarë na mbetet është të shtojmë vlerën e numrit në 48. Vlerat dhjetore dhe njësi janë shtypje të veçanta.

Së fundi, ne kemi nevojë për një mënyrë për të mbajtur vlerën nga kërcimi mbrapa dhe me radhë. Sepse nëse provoni të përdorni çelësin me hartë (val0, 0, 1023, 0, 100), do të shihni që rezultatet do të jenë shumë të hidhëruara. Ngjashëm me mënyrën se si i kemi hequr butonat, ne do ta rregullojmë këtë duke sakrifikuar një pjesë të saktësisë. Kam gjetur se hartimi i tij në 1-20 dhe më pas shumëzimi i vlerës së argumenteve me 5 është një kompromis i pranueshëm.

Për të lidhur potenciometrin, thjesht lidhni një tel 5V, një tel tokëzues dhe një tel analog hyrës dhe nuk duhet të ketë ndonjë problem.

Fakt argëtues: nëse përdorni këtë shkurtore ndërsa zgjidhet një mjet si Lasso, në vend të kësaj do të ndryshojë errësirën e Shtresës. Diçka për të marrë parasysh.

Hapi 4: Kodifikuesi rrotullues

Kodifikuesi rrotullues
Kodifikuesi rrotullues

Kodifikuesit rrotullues janë pak si potenciometra, por pa kufi se sa mund të kthehen. Në vend të një vlere analoge, ne do të shikojmë drejtimin e kthesës së koduesit në mënyrë dixhitale. Unë nuk do të hyj në shumë detaje se si funksionojnë këto, por ajo që duhet të dini është se përdor dy kunja hyrëse në arduino për të treguar në cilin drejtim po kthehet. Kodifikuesi rrotullues mund të jetë më i ndërlikuar për të punuar, kodues të ndryshëm mund të kërkojnë konfigurime të ndryshme. Për t'i bërë gjërat më të lehta, bleva një me PCB, të cilat janë gati për t'u lidhur me kunjat femra. Tani, kodi:

#përfshi

// Kodifikues rrotullues #përcakto daljenA 15 #përcakto daljenB 14 int counter = 0; në një shtet; int aLastState; void setup () {// vendosni kodin tuaj të konfigurimit këtu, për të ekzekutuar një herë: // Rotary pinMode (outputA, INPUT); pinMode (outputB, INPUT); // Lexon gjendjen fillestare të prodhimitA aLastState = digitalRead (outputA); } void rotaryAction (int dir) {if (dir> 0) {Keyboard.press (']'); } else {Keyboard.press ('['); } Keyboard.releaseAll (); } // ------------------ LAPI KRYESOR ------------------------- lak i zbrazët () {// vendosni kodin tuaj kryesor këtu, për të ekzekutuar në mënyrë të përsëritur: // Madhësia aState = digitalRead (outputA); if (aState! = aLastState) {if (digitalRead (outputB)! = aState) {// counter ++; veprim rrotullues (1); } else {// counter -; veprim rrotullues (-1); } //Serial.print("Pozicioni: "); //Serial.println (numërues); } aLastState = aState; }

Si parazgjedhje, shkurtoret e Photoshop] dhe [rrisin dhe zvogëlojnë madhësinë e furçës. Ashtu si më parë, ne duam t'i fusim ato si shtypje të tastit. Koduesi dërgon një numër hyrjesh për kthesë (i cili varet nga modeli), dhe ne duam të rrisim/ulim madhësinë e furçës për secilën nga këto hyrje, kështu që ju mund ta ktheni numrin ose uljen me të vërtetë shpejt, por gjithashtu të jeni në gjendje të kontrolloni atë ngadalë me një saktësi të madhe.

Ashtu si me potmeter, ne duam të kryejmë veprimin vetëm kur rrotulluesi është duke u kthyer. Ndryshe nga potmetri, siç e shpjegova më parë, kodifikuesi rrotullues ka dy hyrje të alternuara. Ne shikojmë se cila nga këto ka ndryshuar për të përcaktuar drejtimin në të cilin po kthehet çelësi.

Pastaj në varësi të drejtimit, ne shtypim butonin e duhur.

Për sa kohë që nuk keni probleme kontakti, duhet të funksionojë.

Hapi 5: Vendosja e të gjitha së bashku

Vendosja e të gjitha së bashku
Vendosja e të gjitha së bashku
Vendosja e të gjitha së bashku
Vendosja e të gjitha së bashku
Vendosja e të gjitha së bashku
Vendosja e të gjitha së bashku

Tani te saldimi. Së pari, ne shpojmë dy vrima në tabelën e perfit për t'iu përshtatur dy numrave. ne lidhim butonat dhe rezistencat e tyre përkatëse. Unë shpova dy vrima shtesë të vogla për të lejuar që telat e hyrjes të kalojnë sipër për të kursyer hapësirë nën të, por kjo nuk është e nevojshme. Nuk ka shumë tela hyrës kështu që telat GND dhe 5V punojnë paralelisht, por nëse ndiheni dinak ju mund të dëshironi të bëni një matricë. Unë e bashkova mikrokontrolluesin në një tabelë tjetër, më të vogël, që vendoset poshtë së bashku me koduesin dhe potmetrin. Tani i bashkoj të gjitha telat në ProMicro. Nuk ka nevojë të jem krijues, thjesht më duhej të ndiqja të njëjtën skemë si ajo në dërrasën e bukës, por lidhja në një vend kaq të vogël mund të jetë e lodhshme. Mos u bëni si unë, përdorni një zhveshës teli dhe një lidhës të mirë!

Së fundi, ju mund të dëshironi të bëni një rast të bukur për shokun tuaj të ri Photoshop. Një më e mirë se e imja, të paktën!

Por nëse jeni të etur për ta provuar, përdorni pak karton dhe kasetë dhe futni mikro USB-në tuaj.

Hapi 6: Kodi + Demonstrimi

Image
Image

Sigurohuni që të testoni programin e jastëkut të kontrollit ndërsa ecni përpara në projekt për të shmangur surprizat!

Këtu është kodi i plotë:

Faleminderit shumë për leximin!

Recommended: