Orodha ya maudhui:

Mini Pad Pad ya Photoshop (Arduino): 6 Hatua
Mini Pad Pad ya Photoshop (Arduino): 6 Hatua

Video: Mini Pad Pad ya Photoshop (Arduino): 6 Hatua

Video: Mini Pad Pad ya Photoshop (Arduino): 6 Hatua
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Julai
Anonim
Kidhibiti Kidogo cha Photoshop (Arduino)
Kidhibiti Kidogo cha Photoshop (Arduino)

Hapa nitakuonyesha jinsi ya kutengeneza zana ndogo kukusaidia kufanya kazi katika Photoshop haraka!

Kinanda iliyoundwa mahsusi kwa PS sio mpya, lakini haitoi kile ninachohitaji. Kama mchoraji, wakati wangu mwingi katika Photoshop hutumika kurekebisha mpangilio wa brashi, na nadhani vifungo rahisi vya mkato havinipi udhibiti wa kulinganisha utiririshaji wangu wa kazi. Kwa hivyo niliamua kutengeneza kibodi yangu mwenyewe, ambayo ni ndogo, isiyo na unobtrusive, na ina nambari za kunipa mwingiliano huo wa analog ambao nilikuwa nikitaka kila wakati.

Njia inavyofanya kazi ni rahisi: kufanya microcontroller kuingiliana na Photoshop, tunatumia njia za mkato chaguomsingi. Pamoja na ubao ambao kompyuta inaweza kusoma kama kibodi / panya, tunachohitaji kufanya ni kutumia laini rahisi za nambari kuambia kompyuta isome kila pembejeo kama mchanganyiko wa vyombo vya habari muhimu. Sasa kitufe cha kutendua ni kitufe cha bonyeza tu!

Tuanze! Kwa mradi huu utahitaji:

  • 1 Sparkfun ProMicro (au Arduino Leonardo, haifai)
  • 1 adapta ndogo ya USB
  • Vifungo 6 vya kushinikiza (au nambari yoyote unayopenda)
  • Vipinzani vya 10k Ohm (1 kwa kila kitufe)
  • 1 potentiometer
  • Encoder 1 ya rotary
  • waya, ubao wa mkate, ubao wa bodi, solder, pini za kichwa, nk.

Unaweza kutumia Arduino Leonardo kwa mradi huu, lakini ProMicro ni mbadala ya bei rahisi sana ambayo hutumia chipu sawa cha atmega32u4, ina pini zaidi na inakuja kwa fomu ndogo sana, na kuifanya iwe kamili kwa kibodi.

Ili kupanga ProMicro katika Arduino IDE unaweza kuhitaji kuweka vitu kadhaa kwanza. Unaweza kusoma zaidi juu yake katika mwongozo wa SparkFun:

Ikiwa kompyuta yako ina shida kupata kifaa, hakikisha kuwa USB-ndogo unayotumia sio ya nguvu tu na inasaidia uhamishaji wa data.

Huu ni mradi wangu wa kwanza wa Arduino, na inafaa kwa Kompyuta.

Hatua ya 1: Prototyping the Pad Pad

Kuweka mfano wa pedi ya kudhibiti
Kuweka mfano wa pedi ya kudhibiti

Ninapendekeza ujaribu programu yako kwenye ubao wa mkate kwanza kabla ya kuanza kuuza.

Hapa unaweza kuona mipango yangu.

Vifungo 1 na 2 vitatenduliwa na Rudia, 3 hadi 5 ni za zana za Brashi, Eraser na Lasso, kitufe cha 6 ni kitufe cha Kuokoa haraka. Encoder na udhibiti wa potmeter Ukubwa na Opacity mtawaliwa.

Kumbuka kuwa mimi ni mkono wa kushoto na nimebuni mpangilio kwa njia ambayo ni sawa kwangu kutumia. Tazama wakati unatumia ubao wako wa mkate kama fursa ya kufikiria juu ya kazi gani ungependa mtawala wako awe nazo, ni nini kinachokufaa zaidi na mwishowe ikiwa utahitaji sehemu za ziada kuifanya.

Hatua ya 2: Vifungo vya kushinikiza

Bonyeza Vifungo
Bonyeza Vifungo

Vifungo ni rahisi kutekeleza. Wacha tuangalie nambari:

# pamoja

vifungo vya int int = {2, 3, 4, 5, 6, 7, 8, 9}; // safu ya pini zote za kifungo char ctrlKey = KEY_LEFT_GUI; // tumia chaguo hili kwa Windows na Linux: // char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT; kuanzisha batili () {// weka msimbo wako wa kusanidi hapa, ili uendeshe mara moja: Serial.begin (9600); Kinanda.anza (); // Vifungo - kitanzi kupitia safu na angalia mashinikizo kwa (int i = vifungo [0]; i <(sizeof (vifungo) / sizeof (vifungo [0])) + vifungo [0]; ++ i) { pinMode (i, INPUT); }} boolean readButton (int pin) {// angalia na utengue vifungo ikiwa (digitalRead (pin) == HIGH) {kuchelewa (10); ikiwa (digitalRead (pin) == HIGH) {kurudi kweli; }} kurudi uwongo; } batili doAction (int pin) {// fanya kazi kubadili (pini) {// ---- Njia za mkato ---- // Tendua kesi ya 4: Keyboard.press (ctrlKey); Kinanda.print ('z'); Serial.print ("pembejeo"); Serial.println (pini); kuchelewesha (200); Kinanda.releaseAll (); kuvunja; // Rudia kesi 5: Kinanda.press (ctrlKey); Kinanda.print ('y'); Serial.print ("pembejeo"); Serial.println (pini); kuchelewesha (200); Kinanda.releaseAll (); kuvunja; // Kesi ya Brashi 6: Kinanda.press ('b'); Serial.print ("pembejeo"); Serial.println (pini); kuchelewesha (200); Kinanda.releaseAll (); kuvunja; // Kesi ya Eraser 7: Kinanda.press ('e'); Serial.print ("pembejeo"); Serial.println (pini); kuchelewesha (200); Kinanda.releaseAll (); kuvunja; // kesi ya Lasso 8: Kinanda.press ('l'); Serial.print ("pembejeo"); Serial.println (pini); kuchelewesha (200); Kinanda.releaseAll (); kuvunja; // Hifadhi kesi 9: Kinanda.press (ctrlKey); Kinanda.print ('s'); Serial.print ("pembejeo"); Serial.println (pini); kuchelewesha (200); Kinanda.releaseAll (); kuvunja; chaguo-msingi: Kinanda.releaseAll (); kuvunja; }}

kitanzi batili () {

// weka nambari yako kuu hapa, kukimbia mara kwa mara:

kwa (int i = vifungo [0]; i <sizeof (vifungo) / sizeof (vifungo [0]) + vifungo [0]; ++ i) {if (readButton (i)) {doAction (i); }} // Rudisha kibodi cha kurekebisha. TafadhaliWote ();

}

Wao ni sawa sawa. Ili kupata kompyuta kutambua kitufe cha kifungo kama kitufe cha ufunguo tunatumia tu kazi ya Keyboard.press (). Kwa hivyo kuamsha njia ya mkato ya Tendua (ctrl + z), tunatumia tu Keyboard.press (ctrlKey) na kisha Keyboard.press ('z'). Kumbuka utahitaji kujumuisha Keyboard.h, na kuanzisha kibodi kupata huduma hizi.

Pini za kuingiza zinahifadhiwa katika safu, kwa hivyo unaweza kuzunguka kwa urahisi katika kazi ya kitanzi (). Njia moja rahisi ya kufikia na urefu wa safu katika c ++ kwa kugawanya saizi ya safu nzima na kipengee cha safu, pamoja na kipengee kimoja. Tunatembea kupitia vifungo vyote kuangalia ikiwa moja imeshinikizwa.

Ili kuweka vitu kupangwa, nilihifadhi vitendo vyangu vyote vya kifungo kwenye taarifa ya kubadili ya kazi ambayo inachukua nambari ya pini kama hoja.

Ikiwa unataka vifungo vyako kufanya vitu tofauti, au unataka kuongeza vifungo zaidi, hariri tu yaliyomo kwenye kazi ya doAction!

Kwa sababu ya jinsi vifungo vya mwili hufanya kazi, tutahitaji kuzipunguza. Hii ni kuzuia programu kusoma mashinikizo yoyote yasiyotakikana yanayosababishwa na uchangamfu wa vifungo vya kushinikiza. Kuna njia nyingi za kufanya hivyo, lakini niliongeza kazi rahisi ya kusomaButton () ambayo hutunza hiyo.

Washa vifungo vyako na vipinga 10k, na unapaswa kuwa dhahabu!

Hatua ya 3: Potentiometer

Potentiometer
Potentiometer

Sasa kwenye bomba:

# pamoja

kupiga simu0 = 0; kuanzisha batili () {// weka msimbo wako wa kusanidi hapa, ili uendeshe mara moja: Serial.begin (9600); Kinanda.anza (); // Piga simu0 = AnalogSoma (0); dial0 = ramani (dial0, 0, 1023, 1, 20); } batili dialAction (int dial, int newVal, int lastVal) {switch (dial) {// Opacity kesi 0: kuchelewa (200); ikiwa (newVal! = lastVal) {int decim = ((newVal * 5) / 10); kitengo = ((newVal * 5)% 10); ikiwa (newVal == 20) {Keyboard.write (48 + 0); Andika kibodi (48 + 0); Serial.println ("piga simu 1"); } mwingine {decim = kizuizi (decim, 0, 9); kitengo = kizuizi (kitengo, 0, 9); Serial.println (newVal * 2); Andika kibodi (48 + decim); Andika kibodi (48 + unit); }} piga0 = newVal; kuvunja; chaguo-msingi: kuvunja; }} // ------------------ KITAMBI KUU ------------------------ kitanzi () {// weka nambari yako kuu hapa, kuendesha mara kwa mara: // Opacity // kuchelewa (500); int val0 = analog Soma (0); val0 = ramani (val0, 0, 1023, 1, 20); //Serial.print ("dial0:"); //Serial.println (val0); ikiwa (val0! = dial0) {// Fanya kitu pigaAction (0, val0, dial0); }}

Potmeter inafuata mantiki sawa, lakini ni ngumu kidogo.

Kwanza wacha tuangalie ni jinsi gani tunataka ifanye kazi: Photoshop ina njia za mkato zinazofaa kubadilisha mwangaza wa brashi. Ukibonyeza kitufe chochote cha num, opacity italingana na nambari hiyo * 10. Lakini ikiwa unabonyeza nambari mbili, itasoma nambari ya pili kama kitengo, ikikupa udhibiti sahihi zaidi.

Kwa hivyo tunataka mtengenezaji wetu wa maji atoe ramani ya mzunguko kwa asilimia, lakini hatutaki kuifanya kila wakati kwani hiyo itakuwa ujinga. Tunataka tu kubadilisha mwangaza wakati bomba linawashwa. Kwa hivyo tunahifadhi thamani ya ziada ambayo tunalinganisha na thamani ya AnalogRead () na tu kuendesha hati ya kitendo wakati kuna tofauti.

Suala jingine ambalo tutagundua ni jinsi tunavyogeuza kurudi kwa AnalogRead int kama pembejeo. Kwa kuwa hakuna njia rahisi ya kugeuza int kuwa kamba, itabidi tutumie int yenyewe. Walakini, ikiwa utaandika tu Keyboard.press (int) utagundua kuwa pembejeo haitakuwa vile unavyotaka, na badala yake kitufe kingine kitasisitizwa.

Hii ni kwa sababu funguo za kibodi yako zote zimeorodheshwa kama nambari, kila ufunguo una faharisi yake. Ili kutumia ufunguo wa num kwa usahihi, itabidi utafute faharisi yao kwenye jedwali la ASCII:

Kama unavyoona, funguo za nambari zinaanzia kwenye faharisi ya 48. Kwa hivyo kubonyeza kitufe sahihi, tunachohitajika kufanya ni kuongeza thamani ya kupiga hadi 48. Thamani za kitengo na vitengo ni vyombo tofauti vya habari.

Mwishowe, tunahitaji njia ya kuweka dhamana kutoka kuruka nyuma na mbele. Kwa sababu ukijaribu kutumia piga na ramani (val0, 0, 1023, 0, 100), utapata matokeo kuwa ya kuchekesha sana. Vivyo hivyo kwa jinsi tulivyotupa vifungo, tutarekebisha hii kwa kutoa muhtasari wa usahihi. Niligundua kuwa kuifanya ramani kuwa 1-20 na kisha kuzidisha thamani ya hoja kwa 5 kuwa maridhiano yanayokubalika.

Ili kuunganisha potentiometer, unganisha waya wa 5V, waya wa ardhini na waya ya kuingiza analog na haipaswi kuwa na shida.

Ukweli wa kufurahisha: ukitumia njia hii ya mkato wakati zana kama Lasso imechaguliwa, itabadilisha opacity ya Layer badala yake. Kitu cha kuzingatia.

Hatua ya 4: Encoder ya Rotary

Encoder ya Rotary
Encoder ya Rotary

Encoders za Rotary ni kama potentiometers kidogo, lakini bila kikomo kwa ni kiasi gani wanaweza kugeuka. Badala ya thamani ya analojia, tutatazama mwelekeo wa kugeuza kisimbuzi kidigitali. Sitaenda kwa undani zaidi juu ya jinsi kazi hizi zinavyofanya kazi, lakini unachohitaji kujua ni kwamba hutumia pini mbili za kuingiza kwenye arduino kusema ni mwelekeo gani umegeuzwa. Encoder ya rotary inaweza kuwa ngumu kufanya kazi nayo, encoders tofauti zinaweza kuhitaji mipangilio tofauti. Ili kufanya mambo iwe rahisi, nilinunua moja na PCB, ambayo iko tayari kushikamana na pini za kike. Sasa, nambari:

# pamoja

// Encoder Rotary #fafanua patoA 15 #fafanua patoB 14 int counter = 0; int aState; int aLastState; kuanzisha batili () {// weka msimbo wako wa kusanidi hapa, ili uendeshe mara moja: // Rotary pinMode (outputA, INPUT); pinMode (patoB, Pembejeo); // Inasoma hali ya kwanza ya patoA aLastState = digitalRead (outputA); } batili rotaryAction (int dir) {if (dir> 0) {Keyboard.press (']'); } mwingine {Keyboard.press ('['); } Kinanda. TafadhaliWote (); } // ---------- () {// weka nambari yako kuu hapa, kuendeshwa mara kwa mara: // Ukubwa aState = digitalRead (outputA); ikiwa (aState! = aLastState) {if (digitalRead (outputB)! = aState) {// counter ++; Kazi ya rotary (1); } mwingine {// kaunta -; Kazi ya Rotary (-1); } //Serial.print ("Nafasi:"); //Serial.println (hesabu); } aLastState = Jimbo; }

Kwa chaguo-msingi, Photoshop's] na [njia za mkato huongeza na kupunguza saizi ya brashi. Kama hapo awali, tunataka kuingiza hizo kama vyombo vya habari muhimu. Encoder hutuma pembejeo kadhaa kwa kila zamu (ambayo inategemea mfano), na tunataka kuongeza / kupunguza saizi ya brashi kwa kila moja ya pembejeo hizi, ili uweze kugeuza piga juu au chini haraka sana, lakini pia uweze dhibiti polepole kwa usahihi mkubwa.

Kama vile bomba la bomba, tunataka tu kuchukua hatua wakati piga inageuzwa. Tofauti na bomba, kama nilivyoelezea hapo awali, encoder ya rotary ina pembejeo mbili mbadala. Tunaangalia ni ipi kati ya hizi imebadilika ili kuweka mwelekeo ambao piga inabadilishwa.

Kisha kulingana na mwelekeo, bonyeza kitufe sahihi.

Kwa muda mrefu kama huna maswala ya mawasiliano, inapaswa kufanya kazi.

Hatua ya 5: Kuiweka Pamoja

Kuiweka Pamoja
Kuiweka Pamoja
Kuiweka Pamoja
Kuiweka Pamoja
Kuiweka Pamoja
Kuiweka Pamoja

Sasa kwenye soldering. Kwanza, tunachimba mashimo mawili kwenye ubao wa kutoshea zile dial mbili. sisi tuliuza vifungo na vipingamizi vyake. Nilichimba mashimo mawili madogo ili kuziacha waya za kuingiza zipite juu ili kuhifadhi nafasi chini, lakini hii sio lazima. Hakuna waya nyingi za kuingiza kwa hivyo waya za GND na 5V zinaenda sambamba, lakini ikiwa unahisi hila unaweza kutaka kutengeneza tumbo. Niliuza microcontroller kwa mwingine, ubao mdogo, unaofaa chini kando ya encoder na potmeter. Sasa niliuza waya zote kwa ProMicro. Hakuna haja ya kuwa mbunifu, ilibidi nifuate tu skimu sawa na ile iliyokuwa kwenye ubao wa mkate, lakini kuiga katika sehemu ndogo kama hiyo kunaweza kuogofya. Usiwe kama mimi, tumia waya na waya mzuri!

Mwishowe, unaweza kutaka kufanya kesi nzuri kwa rafiki yako mpya wa Photoshop. Moja bora kuliko yangu, angalau!

Lakini ikiwa una hamu ya kuijaribu, tumia kadibodi na mkanda na ingiza USB yako ndogo.

Hatua ya 6: Maonyesho ya Nambari +

Image
Image

Hakikisha kujaribu programu ya pedi ya kudhibiti unapoendelea kwenye mradi ili kuepuka mshangao!

Hapa kuna nambari kamili:

Asante sana kwa kusoma!

Ilipendekeza: