Sadržaj:
- Korak 1: Prototipiranje kontrolne pločice
- Korak 2: Pritisnite dugmad
- Korak 3: Potenciometar
- Korak 4: Rotacijski koder
- Korak 5: Sastavite sve zajedno
- Korak 6: Kod + demonstracija
Video: Mini kontrolni jastučić za Photoshop (Arduino): 6 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:08
Evo pokazat ću vam kako napraviti mali alat koji će vam pomoći da brže radite u Photoshopu!
Tastature posebno napravljene za PS nisu nove, ali ne nude baš ono što mi treba. Kao slikar, većinu svog vremena u Photoshopu trošim na prilagođavanje postavki četkice i mislim da mi jednostavne tipke za prečice ne daju kontrolu u skladu s mojim radnim tokom. Stoga sam odlučio napraviti svoju tastaturu, onu malu, nenametljivu i sa brojčanicima koji mi daju onu analognu interakciju koju sam oduvijek želio.
Način na koji funkcionira je jednostavan: kako bismo omogućili interakciju mikrokontrolera sa Photoshopom, koristimo zadane prečice. Sa pločom koju računar može čitati kao tastatura/miš, sve što trebamo učiniti je koristiti neke jednostavne redove koda kako bismo rekli računaru da čita svaki unos kao kombinaciju pritiska na tipke. Sada je dugme za poništavanje samo jedno dugme pritisnuto!
Hajde da počnemo! Za ovaj projekat trebat će vam:
- 1 Sparkfun ProMicro (ili Arduino Leonardo, ne preporučuje se)
- 1 mikro-USB adapter
- 6 tastera (ili bilo koji broj koji želite)
- 10k Ohm otpornici (po 1 za svako dugme)
- 1 potenciometar
- 1 rotacijski davač
- žice, matična ploča, ploča za lemljenje, lemljenje, igle zaglavlja itd.
Za ovaj projekt možete koristiti Arduino Leonardo, ali ProMicro je mnogo jeftinija alternativa koja koristi isti čip atmega32u4, ima više pinova i dolazi u mnogo manjem obliku, što ga čini savršenim za tipkovnicu.
Da biste programirali ProMicro u Arduino IDE -u, možda ćete morati prvo postaviti neke stvari. Više o tome možete pročitati u SparkFunovom vodiču:
Ako vaš računar ima problema s pronalaženjem uređaja, provjerite da mikro-USB koji koristite nije samo za napajanje i podržava prijenos podataka.
Ovo je moj prvi Arduino projekt i prikladan je za početnike.
Korak 1: Prototipiranje kontrolne pločice
Preporučujem da prije početka lemljenja testirate svoj program na ploči.
Ovdje možete vidjeti moju shemu.
Dugmad 1 i 2 će biti Poništi i Ponovi, 3 do 5 su za alate Četka, Gumica i Laso, dugme 6 je dugme za brzo spremanje. Enkoder i potmetar kontroliraju veličinu i neprozirnost.
Imajte na umu da sam ljevoruk i dizajnirao sam raspored na način koji mi je najudobniji za upotrebu. Pogledajte trenutak kada koristite svoju ploču kao priliku da razmislite o tome koje funkcije biste željeli da vaš kontroler ima, šta vam najbolje odgovara i na kraju ako vam za izradu budu potrebni dodatni dijelovi.
Korak 2: Pritisnite dugmad
Gumbi su najjednostavniji za implementaciju. Pogledajmo kod:
#include
const int tasteri = {2, 3, 4, 5, 6, 7, 8, 9}; // niz svih pinova dugmadi char ctrlKey = KEY_LEFT_GUI; // koristi ovu opciju za Windows i Linux: // char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT; void setup () {// ovdje postavite svoj kod za postavljanje, da biste ga jednom pokrenuli: Serial.begin (9600); Keyboard.begin (); // Dugmad - prođite kroz niz i provjerite ima li pritisaka na (int i = dugmad [0]; i <(veličinaof (dugmad)/veličinaof (dugmad [0]))+dugmad [0]; ++ i) { pinMode (i, INPUT); }} boolean readButton (int pin) {// tipke za provjeru i uklanjanje if (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {return true; }} return false; } void doAction (int pin) {// izvršava zadatke switch (pin) {// ---- Prečice ---- // Poništi velika slova 4: Keyboard.press (ctrlKey); Keyboard.print ('z'); Serial.print ("ulaz"); Serial.println (pin); kašnjenje (200); Keyboard.releaseAll (); break; // Ponovno pisanje slučaja 5: Keyboard.press (ctrlKey); Keyboard.print ('y'); Serial.print ("ulaz"); Serial.println (pin); kašnjenje (200); Keyboard.releaseAll (); break; // Slučaj četke 6: Keyboard.press ('b'); Serial.print ("ulaz"); Serial.println (pin); kašnjenje (200); Keyboard.releaseAll (); break; // Eraser case 7: Keyboard.press ('e'); Serial.print ("ulaz"); Serial.println (pin); kašnjenje (200); Keyboard.releaseAll (); break; // Lasso case 8: Keyboard.press ('l'); Serial.print ("ulaz"); Serial.println (pin); kašnjenje (200); Keyboard.releaseAll (); break; // Spremi slučaj 9: Keyboard.press (ctrlKey); Keyboard.print ('s'); Serial.print ("ulaz"); Serial.println (pin); kašnjenje (200); Keyboard.releaseAll (); break; default: Keyboard.releaseAll (); break; }}
void loop () {{100} {101}
// ovdje unesite svoj glavni kôd, za ponavljanje:
for (int i = dugmad [0]; i <sizeof (dugmad)/sizeof (dugmad [0])+dugmad [0]; ++ i) {if (readButton (i)) {doAction (i); }} // Poništi modifikatore Keyboard.releaseAll ();
}
Prilično su jednostavni. Da bismo naterali računar da prepozna pritiskanje tastera kao pritisak tastera, jednostavno koristimo funkciju Keyboard.press (). Dakle, za aktiviranje prečice Undo (ctrl+z), jednostavno koristimo Keyboard.press (ctrlKey), a zatim Keyboard.press ('z'). Zapamtite da ćete za pristup ovim funkcijama morati uključiti Keyboard.h i inicijalizirati tastaturu.
Ulazni pinovi su pohranjeni u nizu, tako da ih možete lako proći kroz funkciju loop (). Jedan jednostavan način pristupa i dužine niza u c ++ dijeljenjem veličine cijelog niza na element niza, plus jedan element. Prolazimo kroz sve tipke kako bismo provjerili je li neko pritisnuto.
Da bi stvari bile organizirane, pohranio sam sve radnje svog gumba u naredbu switch funkcije koja uzima pin broj kao argument.
Ako želite da vaši gumbi rade različite stvari ili želite dodati još gumba, jednostavno uredite sadržaj funkcije doAction!
Zbog načina na koji fizički gumbi rade, morat ćemo ih otkloniti. Ovo služi za sprečavanje programa da pročita bilo kakve neželjene pritiske uzrokovane gipkošću tipki. Postoji mnogo načina za to, ali dodao sam jednostavnu funkciju readButton () koja se brine za to.
Samo povežite svoje tipke s nekih 10k otpornika i trebali biste biti zlatni!
Korak 3: Potenciometar
A sada na mjerač udaljenosti:
#include
int biranje0 = 0; void setup () {// ovdje postavite svoj kod za postavljanje, da biste ga jednom pokrenuli: Serial.begin (9600); Keyboard.begin (); // bira dial0 = analogRead (0); biranje0 = karta (biranje0, 0, 1023, 1, 20); } void dialAction (int biranje, int newVal, int lastVal) {switch (biranje) {// Slučaj neprozirnosti 0: kašnjenje (200); if (newVal! = lastVal) {int decim = ((newVal*5)/10); int jedinica = ((newVal *5)% 10); if (newVal == 20) {Keyboard.write (48+0); Keyboard.write (48+0); Serial.println ("max dial 1"); } else {decim = constrain (decim, 0, 9); jedinica = ograničenje (jedinica, 0, 9); Serial.println (newVal*2); Keyboard.write (48+decim); Keyboard.write (48+jedinica); }} biraj0 = newVal; break; default: break; }} // ------------------ GLAVNA PETLJA ------------------------- praznina loop () {// stavite glavni kod ovde, da biste ga ponavljali: // Opacity // delay (500); int val0 = analogRead (0); val0 = karta (val0, 0, 1023, 1, 20); //Serial.print ("biranje0:"); //Serial.println(val0); if (val0! = dial0) {// Učinite nešto dialAction (0, val0, dial0); }}
Potmetar slijedi istu logiku, ali je malo zeznutiji.
Prvo pogledajmo kako želimo da funkcionira: Photoshop ima neke zgodne prečice za promjenu neprozirnosti četke. Ako pritisnete bilo koji taster num, neprozirnost će biti jednaka tom broju*10. Ali ako pritisnete dva broja, drugi broj će se pročitati kao jedinica, dajući vam precizniju kontrolu.
Zato želimo da naš mjerač puta preslikava rotaciju na postotak, ali ne želimo to raditi stalno jer bi to bilo glupo. Opacitet želimo promijeniti samo kada okrećemo mjerač. Zato spremamo dodatnu vrijednost koju uspoređujemo s analogRead () vrijednosti i pokrećemo skriptu akcije samo kad postoji razlika.
Još jedno pitanje na koje ćemo naići je kako pretvaramo povratni int analognog čitača kao ulaz. Kako ne postoji jednostavan način pretvaranja int -a u niz, morat ćemo koristiti sam int. Međutim, ako jednostavno napišete Keyboard.press (int) primijetit ćete da unos neće biti ono što ste htjeli, već će se umjesto toga pritisnuti drugi taster.
To je zato što su svi ključevi na vašoj tastaturi kodirani kao cijeli brojevi, a svaki ključ ima svoj indeks. Da biste pravilno koristili num ključ, morat ćete potražiti njihov indeks u ASCII tablici:
Kao što vidite, numerički tasteri počinju sa indeksom 48. Dakle, da bismo pritisnuli ispravan taster, sve što moramo da uradimo je da dodamo vrednost točkića na broj 48. Decimalna i jedinična vrednost su odvojeni pritisci.
Konačno, potreban nam je način da zadržimo vrijednost od skakanja naprijed -natrag. Jer ako pokušate koristiti brojčanik s kartom (val0, 0, 1023, 0, 100), rezultati će biti vrlo nervozni. Slično onome kako smo uklonili dugmad, to ćemo popraviti žrtvovanjem neke tačnosti. Otkrio sam da je preslikavanje na 1-20, a zatim množenje vrijednosti argumenata sa 5 kao prihvatljiv kompromis.
Za povezivanje potenciometra samo spojite žicu od 5 V, žicu za uzemljenje i žicu za analogni ulaz i ne bi trebalo biti problema.
Zabavna činjenica: ako koristite ovu prečicu dok je odabran alat poput Lassa, umjesto toga će se promijeniti neprozirnost sloja. Nešto na što treba obratiti pažnju.
Korak 4: Rotacijski koder
Rotacijski koderi su pomalo poput potenciometara, ali bez ograničenja koliko se mogu okretati. Umjesto analogne vrijednosti, digitalno ćemo gledati smjer okretanja kodera. Neću ulaziti u detalje o tome kako oni rade, ali ono što trebate znati je da koristi dva ulazna pina na arduinu kako bi rekao u kojem smjeru se okreće. S rotacijskim davačem može biti teže raditi, različiti koderi mogu zahtijevati različite postavke. Da bih olakšao stvari, kupio sam jedan sa PCB -om, koji je spreman za pričvršćivanje ženskim iglama. Sada kod:
#include
// Rotacijski davač #define outputA 15 #define outputB 14 int counter = 0; int aState; int aLastState; void setup () {// ovdje postavite svoj kod za postavljanje, da biste ga jednom pokrenuli: // Rotary pinMode (outputA, INPUT); pinMode (outputB, INPUT); // Čita početno stanje outputA aLastState = digitalRead (outputA); } void rotaryAction (int dir) {if (dir> 0) {Keyboard.press (']'); } else {Keyboard.press ('['); } Keyboard.releaseAll (); } // ------------------ MAIN LOOP ------------------------- void petlja () {// ovdje unesite svoj glavni kôd, da biste ga ponavljali: // Veličina aState = digitalRead (outputA); if (aState! = aLastState) {if (digitalRead (outputB)! = aState) {// brojač ++; rotaryAction (1); } else {// brojač -; rotaryAction (-1); } //Serial.print("Position: "); //Serial.println(counter); } aLastState = aState; }
Prema zadanim postavkama, Photoshop -ove] i [prečice povećavaju i smanjuju veličinu četke. Kao i prije, želimo ih unijeti kao pritiske tipki. Enkoder šalje broj ulaza po zavoju (što ovisi o modelu), a mi želimo povećati/smanjiti veličinu četke za svaki od ovih ulaza, tako da možete okrenuti brojčanik gore ili dolje jako brzo, ali i biti u mogućnosti kontrolirajte ga polako s velikom preciznošću.
Baš kao i kod mjerača udaljenosti, akciju želimo pokrenuti samo kada je brojčanik okrenut. Za razliku od mjerača udaljenosti, kao što sam već objasnio, rotacijski davač ima dva izmjenična ulaza. Gledamo šta se od ovoga promijenilo kako bismo utvrdili smjer u kojem se okreće brojčanik.
Zatim, ovisno o smjeru, pritisnemo odgovarajuću tipku.
Sve dok nemate problema s kontaktom, to bi trebalo funkcionirati.
Korak 5: Sastavite sve zajedno
Sada na lemljenje. Prvo izbušimo dvije rupe u ploči za postavljanje kako bi se uklopila dva brojčanika. lemimo dugmad i njihove otpornike. Izbušio sam dvije dodatne male rupice da propustim ulazne žice na vrhu kako bih uštedio prostor ispod, ali to nije potrebno. Nema mnogo ulaznih žica pa žice GND i 5V teku paralelno, ali ako se osjećate lukavo, možda biste htjeli napraviti matricu. Lemio sam mikrokontroler na drugu, manju ploču koja je stajala ispod kodera i merača dužine. Sada sam lemio sve žice na ProMicro. Nema potrebe za kreativnošću, samo sam morao slijediti istu shemu kao ona na osnovnoj ploči, ali lemljenje na tako malom mjestu razumljivo može biti dosadno. Ne budi poput mene, koristi mašinu za skidanje žice i dobro lemljenje!
Konačno, možda biste htjeli napraviti lijepu torbicu za svog novog prijatelja iz Photoshopa. Bar jedan bolji od mene!
Ali ako želite isprobati, upotrijebite karton i traku i priključite mikro-USB.
Korak 6: Kod + demonstracija
Obavezno isprobajte program kontrolne pločice dok se krećete po projektu kako biste izbjegli iznenađenja!
Evo potpunog koda:
Hvala vam puno na čitanju!
Preporučuje se:
Samobalansirajući robot - PID kontrolni algoritam: 3 koraka
Samobalansirajući robot - PID kontrolni algoritam: Ovaj projekt je zamišljen jer sam bio zainteresiran za saznanje više o kontrolnim algoritmima i kako učinkovito implementirati funkcionalne PID petlje. Projekt je još uvijek u fazi razvoja jer Bluetooth modul tek treba biti dodat, što će omogućiti
Automatski kontrolni sistem za vruću ploču (HPACS): 3 koraka
Sustav za automatsko upravljanje vrućom pločom (HPACS): Ovaj projekt ima za cilj pružiti jednostavan intuitivan način razumijevanja kako se vrši automatsko podešavanje PID -a pomoću grijača. Ono što sam napravio temelji se na Åström-Hägglundovoj metodi za izvođenje parametara pomoću kontrole bang-bang za otkrivanje sistemskih karakteristika
ESP32-CAM FPV Arduino Wifi kontrolni spremnik s WebApp kontrolerom_p1_introdukcija: 3 koraka
ESP32-CAM FPV Arduino Wifi kontrolni spremnik s WebApp Controller_p1_introdukcijom: Zdravo, ja sam Tony Phạm. Trenutno sam vijetnamski nastavnik STEAM -a i takođe hobist. Unaprijed se izvinjavam na engleskom. Napisao sam uputstvo za izradu Arduino Bluetooth kontrolisanog rezervoara, ali on je na vijetnamskom. Referentna veza: P1. ARDUINO B
Arduino kontrolni centar utičnice s Google kalendarom: 4 koraka
Arduino kontrolni centar utičnice sa Google kalendarom: U ovom uputstvu ćete naučiti kako izgraditi kontrolni centar za svoj dom pomoću Adapruit Power Relej modula sa 4 utičnice. Trebat će vam Arduino ploča s wifi modulom, poput Adafruit Feather Huzzaha i Adafruit Power Relej modula 4
El-cheapo (vrlo) osnovni aktivni jastučić za hladnjak za prijenosno računalo: 6 koraka (sa slikama)
El-cheapo (vrlo) osnovni aktivni jastučić za hladnjak za prijenosno računalo: Nedavno sam dobio polovni laptop dell inspiron 5100. sada za vas koji ne znate - ovo je laptop koji se zagrijava kao da nema sutra zbog neke greške u dizajnu (mislim da sam negdje pročitao da postoji grupna tužba protiv Dell -a). svejedno besplatno