Turinys:
- 1 žingsnis: Valdymo skydelio prototipų kūrimas
- 2 žingsnis: Spauskite mygtukus
- 3 žingsnis: potenciometras
- 4 žingsnis: rotacinis kodavimo įrenginys
- 5 žingsnis: sudėkite viską kartu
- 6 žingsnis: kodas + demonstravimas
Video: Mini valdymo pultas „Photoshop“(„Arduino“): 6 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:48
Štai aš jums parodysiu, kaip sukurti nedidelį įrankį, kuris padėtų greičiau dirbti „Photoshop“!
Klaviatūros, specialiai sukurtos PS, nėra naujos, tačiau jos tiksliai nesiūlo to, ko man reikia. Kaip tapytojas, didžiąją laiko dalį „Photoshop“skiriu koreguojant teptuko nustatymus, ir manau, kad paprasti spartieji klavišai man nesuteikia galimybės valdyti darbo eigos. Taigi nusprendžiau pasigaminti savo klaviatūrą, mažą, nepastebimą ir su ratukais, kad galėčiau gauti tą analoginę sąveiką, kurios visada norėjau.
Tai veikia paprasta: kad mikrovaldiklis sąveikautų su „Photoshop“, mes naudojame numatytuosius sparčiuosius klavišus. Turėdami plokštę, kurią kompiuteris gali skaityti kaip klaviatūrą/pelę, viskas, ką turime padaryti, tai naudoti keletą paprastų kodo eilučių, kad kompiuteris lieptų kiekvieną įvestį skaityti kaip klavišų paspaudimų derinį. Dabar atšaukimo mygtukas yra tik vieno mygtuko paspaudimas!
Pradėkime! Šiam projektui jums reikės:
- 1 „Sparkfun ProMicro“(arba „Arduino Leonardo“, nerekomenduojama)
- 1 mikro USB adapteris
- 6 mygtukai (arba bet koks jums patinkantis skaičius)
- 10k omų rezistoriai (1 kiekvienam mygtukui)
- 1 potenciometras
- 1 sukamasis kodavimo įrenginys
- laidai, duonos lenta, perforatorius, lydmetalis, antraštės kaiščiai ir kt.
Šiam projektui galite naudoti „Arduino Leonardo“, tačiau „ProMicro“yra daug pigesnė alternatyva, kuri naudoja tą patį atmega32u4 lustą, turi daugiau kaiščių ir yra daug mažesnės formos, todėl puikiai tinka klaviatūrai.
Norėdami užprogramuoti „ProMicro“„Arduino IDE“, pirmiausia turėsite nustatyti kai kuriuos dalykus. Daugiau apie tai galite perskaityti „SparkFun“vadove:
Jei jūsų kompiuteriui sunku rasti įrenginį, įsitikinkite, kad jūsų naudojamas „micro-USB“nėra tik maitinimo šaltinis ir palaiko duomenų perdavimą.
Tai mano pirmasis „Arduino“projektas ir tinka pradedantiesiems.
1 žingsnis: Valdymo skydelio prototipų kūrimas
Prieš pradėdami lituoti, rekomenduoju pirmiausia išbandyti savo programą ant duonos lentos.
Čia galite pamatyti mano schemą.
Mygtukai 1 ir 2 bus anuliuoti ir pakartoti, nuo 3 iki 5 skirti šepetėlio, trintuko ir laso įrankiams, 6 mygtukas yra greitas išsaugojimo mygtukas. Kodavimo įrenginys ir potmetras valdo atitinkamai dydį ir neskaidrumą.
Atkreipkite dėmesį, kad esu kairiarankis ir maketą sukūriau taip, kaip man patogiausia naudotis. Pamatykite momentą, kai naudojate savo duonos lentą, kaip galimybę pagalvoti, kokias funkcijas norėtumėte turėti valdiklyje, kas jums geriausiai tinka, ir galiausiai, ar jums reikės papildomų dalių.
2 žingsnis: Spauskite mygtukus
Mygtukai yra paprasčiausi įgyvendinti. Pažvelkime į kodą:
#įtraukti
const int mygtukai = {2, 3, 4, 5, 6, 7, 8, 9}; // visų mygtukų kaiščių masyvas char ctrlKey = KEY_LEFT_GUI; // naudokite šią parinktį „Windows“ir „Linux“: // char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT; void setup () {// įdėkite čia savo sąrankos kodą, kad jis būtų paleistas vieną kartą: Serial.begin (9600); Klaviatūra.begin (); // Mygtukai - peržiūrėkite masyvą ir patikrinkite, ar nėra paspaudimų (int i = mygtukai [0]; i <(sizeof (mygtukai)/sizeof (mygtukai [0]))+mygtukai [0]; ++ i) { pinMode (i, INPUT); }} loginis skaitymasButton (int pin) {// patikrinti ir atleisti mygtukus, jei (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {return true; }} return false; } void doAction (int pin) {// atlikti užduočių jungiklį (PIN) {// ---- Nuorodos ---- // Anuliuoti 4 atvejį: Keyboard.press (ctrlKey); Keyboard.print ('z'); Serial.print („įvestis“); Serial.println (kaištis); vėlavimas (200); Keyboard.releaseAll (); pertrauka; // Atkurti 5 atvejį: Keyboard.press (ctrlKey); Keyboard.print ('y'); Serial.print („įvestis“); Serial.println (kaištis); vėlavimas (200); Keyboard.releaseAll (); pertrauka; // Šepečio dėklas 6: Keyboard.press ('b'); Serial.print („įvestis“); Serial.println (kaištis); vėlavimas (200); Keyboard.releaseAll (); pertrauka; // 7 trintuko dėklas: Keyboard.press ('e'); Serial.print („įvestis“); Serial.println (kaištis); vėlavimas (200); Keyboard.releaseAll (); pertrauka; // Lasso atvejis 8: Keyboard.press ('l'); Serial.print („įvestis“); Serial.println (kaištis); vėlavimas (200); Keyboard.releaseAll (); pertrauka; // Išsaugoti 9 atvejį: Keyboard.press (ctrlKey); Keyboard.print ('s'); Serial.print („įvestis“); Serial.println (kaištis); vėlavimas (200); Keyboard.releaseAll (); pertrauka; numatytasis: Keyboard.releaseAll (); pertrauka; }}
void loop () {
// Įdėkite savo pagrindinį kodą čia, kad paleistumėte pakartotinai:
for (int i = mygtukai [0]; i <sizeof (mygtukai)/sizeof (mygtukai [0])+mygtukai [0]; ++ i) {if (readButton (i)) {doAction (i); }} // Iš naujo nustatyti modifikatorius Keyboard.releaseAll ();
}
Jie yra gana paprasti. Norėdami, kad kompiuteris atpažintų mygtuko paspaudimą kaip klavišo paspaudimą, mes tiesiog naudojame „Keyboard.press“() funkciją. Taigi, norėdami suaktyvinti nuorodą „Anuliuoti“(„Ctrl“+z), mes tiesiog naudojame „Keyboard.press“(„ctrlKey“), tada „Keyboard.press“(„z“). Atminkite, kad turėsite įtraukti „Keyboard.h“ir inicijuoti klaviatūrą, kad galėtumėte naudotis šiomis funkcijomis.
Įvesties kaiščiai yra saugomi masyve, todėl galite lengvai juos perjungti naudodami funkciją loop (). Vienas paprastas būdas pasiekti masyvo ilgį c ++, padalijus viso masyvo dydį iš masyvo elemento ir dar vieno elemento. Mes einame per visus mygtukus, norėdami patikrinti, ar vienas buvo paspaustas.
Kad viskas būtų organizuota, visus savo mygtuko veiksmus išsaugojau funkcijos, kuri kaip argumentas naudoja PIN kodą, jungiklio teiginyje.
Jei norite, kad mygtukai atliktų skirtingus veiksmus arba norite pridėti daugiau mygtukų, tiesiog redaguokite „doAction“funkcijos turinį!
Dėl to, kaip veikia fiziniai mygtukai, turėsime juos panaikinti. Taip neleidžiama programai skaityti nepageidaujamų paspaudimų, kuriuos sukelia mygtukų spyruoklės. Yra daug būdų tai padaryti, bet aš pridėjau paprastą funkciją readButton (), kuri tuo pasirūpina.
Tiesiog sujunkite mygtukus su kai kuriais 10 000 rezistoriais ir turėsite būti auksiniai!
3 žingsnis: potenciometras
Dabar prie potmetro:
#įtraukti
int dial0 = 0; void setup () {// įdėkite čia savo sąrankos kodą, kad jis būtų paleistas vieną kartą: Serial.begin (9600); Klaviatūra.begin (); // Renkami dial0 = analogRead (0); dial0 = žemėlapis (dial0, 0, 1023, 1, 20); } void dialAction (int dial, int newVal, int lastVal) {switch (dial) {// Neskaidrumo atvejis 0: uždelsimas (200); if (newVal! = lastVal) {int decim = ((newVal*5)/10); int vienetas = ((newVal *5)% 10); if (newVal == 20) {Keyboard.write (48+0); Klaviatūra. Rašyti (48+0); Serial.println ("maksimalus rinkimas 1"); } else {decim = apriboti (decim, 0, 9); vienetas = apriboti (vienetas, 0, 9); Serial.println (newVal*2); Keyboard.write (48+dešimtainė dalis); Keyboard.write (48+vienetas); }} dial0 = newVal; pertrauka; numatytasis: pertrauka; }} // ------------------ PAGRINDINĖ KILPĖ ------------------------- negalioja loop () {// čia įdėkite savo pagrindinį kodą, kad jis būtų paleistas pakartotinai: // Neskaidrumas // delay (500); int val0 = analogRead (0); val0 = žemėlapis (val0, 0, 1023, 1, 20); // Serijinis.spaudas ("dial0:"); //Serial.println(val0); if (val0! = dial0) {// Atlikite kažką dialAction (0, val0, dial0); }}
Potmetras laikosi tos pačios logikos, tačiau tai šiek tiek sudėtingiau.
Pirmiausia pažiūrėkime, kaip norime, kad jis veiktų: „Photoshop“turi keletą patogių nuorodų, leidžiančių pakeisti teptuko neskaidrumą. Jei paspausite bet kurį skaičių klavišą, neskaidrumas bus lygus šiam skaičiui*10. Bet jei paspausite du skaičius, antrasis skaičius bus perskaitytas kaip vienetas, todėl galėsite tiksliau valdyti.
Taigi norime, kad mūsų potmetras nustatytų jo sukimosi procentą, tačiau nenorime to daryti visą laiką, nes tai būtų kvaila. Mes norime pakeisti neskaidrumą tik tada, kai pasukamas puodų matuoklis. Taigi mes išsaugome papildomą vertę, kurią lyginame su analogRead () reikšme, ir vykdome veiksmų scenarijų tik tada, kai yra skirtumas.
Kita problema, su kuria susidursime, yra tai, kaip „analogRead“grąžą paversime įvestimi. Kadangi nėra lengvo būdo int paversti eilute, turėsime naudoti patį int. Tačiau jei tiesiog parašysite „Keyboard.press“(int), pastebėsite, kad įvestis bus ne tokia, kokios norėjote, o kitas mygtukas bus paspaustas.
Taip yra todėl, kad visi klaviatūros klavišai yra užkoduoti kaip sveikieji skaičiai, kiekvienas klavišas turi savo indeksą. Norėdami teisingai naudoti skaičių klavišą, turėsite ieškoti jų indekso ASCII lentelėje:
Kaip matote, skaičių klavišai prasideda nuo 48 rodyklės. Taigi, norėdami paspausti teisingą klavišą, mums tereikia pridėti ratuko reikšmę prie 48. Dešimtainės ir vienetinės vertės yra atskiri paspaudimai.
Galiausiai, mums reikia būdo, kaip išvengti vertės šoktelėjimo pirmyn ir atgal. Nes jei bandysite naudoti ratuką su žemėlapiu (val0, 0, 1023, 0, 100), rezultatai bus labai nervingi. Panašiai kaip mes išjungėme mygtukus, tai išspręsime paaukodami tam tikrą tikslumą. Radau, kad susiejimas su 1-20 ir tada dauginant argumentų vertę iš 5 yra priimtinas kompromisas.
Norėdami prijungti potenciometrą, tiesiog prijunkite 5 V laidą, įžeminimo laidą ir analoginį įvesties laidą ir neturėtų kilti jokių problemų.
Įdomus faktas: jei naudosite šį spartųjį klavišą pasirinkę tokį įrankį kaip „Lasso“, jis pakeis sluoksnio neskaidrumą. Į ką atkreipti dėmesį.
4 žingsnis: rotacinis kodavimo įrenginys
Sukamieji kodavimo prietaisai yra šiek tiek panašūs į potenciometrus, tačiau neribojami, kiek jie gali pasisukti. Vietoj analoginės vertės skaitmeniniu būdu žiūrėsime į kodavimo įrenginio sukimosi kryptį. Aš nesigilinsiu į tai, kaip jie veikia, tačiau jūs turite žinoti, kad jis naudoja du įvesties kaiščius ant arduino, kad nurodytų, kuria kryptimi jis pasukamas. Su rotaciniu kodavimo įrenginiu gali būti sudėtingiau dirbti, skirtingiems kodavimo įrenginiams gali prireikti skirtingų sąrankų. Kad būtų lengviau, nusipirkau vieną su PCB, kurios yra paruoštos užsikabinti su kaiščiais. Dabar kodas:
#įtraukti
// Rotacinis kodavimo įrenginys #define outputA 15 #define outputB 14 int counter = 0; int aState; int aLastState; void setup () {// įdėkite čia savo sąrankos kodą, kad paleistumėte vieną kartą: // Rotary pinMode (outputA, INPUT); pinMode (outputB, INPUT); // Skaito pradinę išvesties būseną a aLastState = digitalRead (outputA); } void rotaryAction (int dir) {if (dir> 0) {Keyboard.press (']'); } else {Keyboard.press ('['); } Keyboard.releaseAll (); } // ------------------ PAGRINDINĖ KILPĖ ------------------------- tuščia kilpa () {// čia įdėkite pagrindinį kodą, kad jis būtų paleistas pakartotinai: // Dydis aState = digitalRead (outputA); if (aState! = aLastState) {if (digitalRead (outputB)! = aState) {// skaitiklis ++; rotacinis veiksmas (1); } else {// skaitiklis -; rotacinis veiksmas (-1); } //Serijinis.printas ("Pozicija: "); // Serija.println (skaitiklis); } aLastState = aState; }
Pagal numatytuosius nustatymus „Photoshop“] ir [nuorodos padidina ir sumažina šepetėlio dydį. Kaip ir anksčiau, mes norime juos įvesti kaip klavišų paspaudimus. Kodavimo įrenginys siunčia daugybę įėjimų į vieną apsisukimą (tai priklauso nuo modelio), ir mes norime padidinti/sumažinti kiekvieno iš šių įvesties šepetėlio dydį, kad galėtumėte tikrai greitai pasukti ratuką aukštyn arba žemyn. labai lėtai valdykite jį.
Kaip ir naudojant potmetrą, mes norime atlikti veiksmą tik tada, kai sukamas ratukas. Skirtingai nuo potmetro, kaip jau paaiškinau anksčiau, rotacinis kodavimo įrenginys turi du kintamus įėjimus. Pažvelkime, kuris iš jų pasikeitė, kad būtų nustatyta kryptis, kuria sukamas ratukas.
Tada, priklausomai nuo krypties, paspaudžiame teisingą klavišą.
Kol neturite kontaktinių problemų, tai turėtų veikti.
5 žingsnis: sudėkite viską kartu
Dabar pereikite prie litavimo. Pirma, mes išgręžiame dvi skyles į perforatorių, kad tilptų du ratukai. lituojame mygtukus ir atitinkamus jų rezistorius. Aš išgręžiau dvi papildomas mažas skyles, kad įvesties laidai praeitų viršuje, kad sutaupytumėte vietos apačioje, tačiau tai nėra būtina. Įvesties laidų nėra daug, todėl GND ir 5 V laidai eina lygiagrečiai, tačiau jei jaučiatės gudrūs, galbūt norėsite sukurti matricą. Aš lituodavau mikrovaldiklį į kitą, mažesnę plokštę, kuri tilpo apačioje kartu su kodavimo įrenginiu ir potmetru. Dabar lituoju visus laidus prie „ProMicro“. Nereikia būti kūrybingam, aš tiesiog turėjau vadovautis ta pačia schema kaip ir duonos lentelėje, tačiau litavimas tokioje mažoje vietoje, suprantama, gali būti nuobodus. Nebūk toks kaip aš, naudok vielos nuėmiklį ir gerą lydmetalį!
Galiausiai, galbūt norėsite padaryti gražų dėklą savo naujam „Photoshop“bičiuliui. Bent vienas geresnis už mano!
Bet jei norite išbandyti, naudokite kartoną ir juostą ir prijunkite „micro-USB“.
6 žingsnis: kodas + demonstravimas
Eidami į projektą būtinai išbandykite valdymo pultelio programą, kad išvengtumėte netikėtumų!
Čia yra visas kodas:
Labai ačiū, kad skaitote!
Rekomenduojamas:
„Arduino“naršyklės nuotolinio valdymo pultas („Linux“): 9 žingsniai (su paveikslėliais)
„Arduino“naršyklės nuotolinio valdymo pultas („Linux“): mes turime vaikų. Man jie patinka, bet jie nuolat slepia palydovo ir televizoriaus nuotolinio valdymo pultą, kai įjungia vaikų kanalus. Po to kasdien kelerius metus ir po to, kai mano brangioji žmona leido man turėti
Televizoriaus nuotolinio valdymo pultas tampa RF nuotolinio valdymo pultu -- NRF24L01+ pamoka: 5 žingsniai (su paveikslėliais)
Televizoriaus nuotolinio valdymo pultas tampa RF nuotolinio valdymo pultu || NRF24L01+ Pamoka: Šiame projekte parodysiu, kaip aš naudoju populiarųjį nRF24L01+ RF IC, norėdamas belaidžiu būdu sureguliuoti LED juostos ryškumą per tris nenaudingus televizoriaus nuotolinio valdymo pulto mygtukus. Pradėkime
„Alexa“nuotolinio valdymo pultas (naudojant „WEMO D1 Mini“): 3 žingsniai
„Alexa“įjungtas nuotolinis valdymas (naudojant „WEMO D1 Mini“): tai atnaujinta ankstesnio įrašo versija: https: //www.instructables.com/id/Voice-Activated-R..Ankstesnėje versijoje naudojau „Geetech“balso modulis, skirtas valdyti įprastą garažo vartų atidarymo tipo nuotolinio valdymo pultą. Šiuo pamokymu aš pakeičiau vo
„IRduino“: „Arduino“nuotolinio valdymo pultas - imituokite pamestą nuotolinio valdymo pultą: 6 žingsniai
„IRduino“: „Arduino“nuotolinio valdymo pultas - imituokite pamestą nuotolinio valdymo pultą: jei kada nors pametėte televizoriaus ar DVD grotuvo nuotolinio valdymo pultą, žinote, kaip apmaudu, kai tenka vaikščioti, ieškoti ir naudoti paties įrenginio mygtukus. Kartais šie mygtukai net nesuteikia tokių funkcijų kaip nuotolinio valdymo pultas. Gauti
„Alexa“balso valdymo televizoriaus nuotolinio valdymo pultas ESP8266: 9 žingsniai
„Alexa“balso valdymo televizoriaus nuotolinio valdymo pultas ESP8266: Ar kas nors jūsų namuose atleidžia nuotolinio valdymo pultą, ar einate į tuščią kambarį, kad pamatytumėte, kaip televizorius skleidžiasi. Baterijos pradeda gesti ir nekontroliuojamos iš kambario galo. Dabar galite valdyti savo televizorių, DVR, bet ką su IR valdikliu, kurį galite