Spisu treści:
- Krok 1: Prototypowanie panelu sterowania
- Krok 2: Przyciski
- Krok 3: Potencjometr
- Krok 4: Enkoder obrotowy
- Krok 5: Składanie wszystkiego razem
- Krok 6: Kod + demonstracja
Wideo: Mini Control Pad dla Photoshopa (Arduino): 6 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
Tutaj pokażę ci, jak stworzyć małe narzędzie, które pomoże ci szybciej pracować w Photoshopie!
Klawiatury stworzone specjalnie dla PS nie są nowe, ale nie oferują dokładnie tego, czego potrzebuję. Jako malarz, większość mojego czasu w Photoshopie spędzam na dopasowywaniu ustawień pędzla i myślę, że proste przyciski skrótów nie dają mi kontroli, która pasowałaby do mojego przepływu pracy. Postanowiłem więc stworzyć własną klawiaturę, która jest mała, dyskretna i ma pokrętła, aby zapewnić mi tę analogową interakcję, której zawsze chciałem.
Sposób działania jest prosty: aby mikrokontroler współpracował z Photoshopem, korzystamy z domyślnych skrótów. Z płytą, którą komputer może odczytać jako klawiatura/mysz, wystarczy użyć kilku prostych linii kodu, aby komputer odczytał każde wejście jako kombinację naciśnięć klawiszy. Teraz przycisk cofania to tylko jedno naciśnięcie przycisku!
Zacznijmy! Do tego projektu potrzebujesz:
- 1 Sparkfun ProMicro (lub Arduino Leonardo, niezalecany)
- 1 przejściówka micro-USB
- 6 przycisków (lub dowolną liczbę)
- Rezystory 10k Ohm (1 na każdy przycisk)
- 1 potencjometr
- 1 enkoder obrotowy
- przewody, płytka stykowa, płyta perfboard, lut, kołki nagłówka itp.
Do tego projektu można użyć Arduino Leonardo, ale ProMicro jest znacznie tańszą alternatywą, która wykorzystuje ten sam układ atmega32u4, ma więcej pinów i jest znacznie mniejszy, dzięki czemu idealnie nadaje się do klawiatury.
Aby zaprogramować ProMicro w Arduino IDE, może być konieczne skonfigurowanie kilku rzeczy. Więcej na ten temat przeczytasz w poradniku SparkFun:
Jeśli komputer ma problemy ze znalezieniem urządzenia, upewnij się, że używany port micro-USB nie jest zasilany i obsługuje przesyłanie danych.
To jest mój pierwszy projekt Arduino i jest odpowiedni dla początkujących.
Krok 1: Prototypowanie panelu sterowania
Zalecam przetestowanie programu na płytce prototypowej przed rozpoczęciem lutowania.
Tutaj możesz zobaczyć mój schemat.
Przyciski 1 i 2 to Cofnij i Ponów, 3 do 5 to narzędzia Pędzel, Gumka i Lasso, przycisk 6 to przycisk szybkiego zapisu. Enkoder i potencjometr kontrolują odpowiednio rozmiar i krycie.
Zauważ, że jestem leworęczny i zaprojektowałem układ w sposób, który jest dla mnie najwygodniejszy w użyciu. Potraktuj moment, w którym używasz płytki prototypowej, jako okazję do zastanowienia się, jakie funkcje chcesz mieć w swoim kontrolerze, co działa najlepiej dla Ciebie i ewentualnie, czy będziesz potrzebować dodatkowych części do jego wykonania.
Krok 2: Przyciski
Przyciski są najprostsze do zaimplementowania. Rzućmy okiem na kod:
#włączać
const int przyciski = {2, 3, 4, 5, 6, 7, 8, 9}; // tablica wszystkich pinów przycisków char ctrlKey = KEY_LEFT_GUI; // użyj tej opcji dla Windows i Linux: //char ctrlKey = KEY_LEFT_CTRL; klawisz zmiany znaku = KEY_LEFT_SHIFT; altKey = KEY_LEFT_ALT; void setup() { // wstaw tutaj swój kod konfiguracyjny do jednorazowego uruchomienia: Serial.begin(9600); Klawiatura.początek(); //Buttons -- pętla przez tablicę i sprawdzanie naciśnięć for(int i = buttons[0]; i < (sizeof(buttons)/sizeof(buttons[0]))+buttons[0]; ++i) { pinMode(i, INPUT); } } boolean readButton(int pin) { // przyciski sprawdzania i odrzucania if (digitalRead(pin) == HIGH) { delay(10); if (digitalRead(pin) == HIGH) { return true; } } return false; } void doAction(int pin) { // wykonanie zadania switch (pin) { // ----Skróty---- //Cofnij przypadek 4: Keyboard.press(ctrlKey); Klawiatura.print('z'); Serial.print ("wejście"); Serial.println(pin); opóźnienie(200); Keyboard.releaseAll(); przerwa; //Ponów przypadek 5: Keyboard.press(ctrlKey); Keyboard.print('y'); Serial.print ("wejście"); Serial.println(pin); opóźnienie(200); Keyboard.releaseAll(); przerwa; //Sprawa pędzla 6: Keyboard.press('b'); Serial.print ("wejście"); Serial.println(pin); opóźnienie(200); Keyboard.releaseAll(); przerwa; //Przypadek gumki 7: Keyboard.press('e'); Serial.print ("wejście"); Serial.println(pin); opóźnienie(200); Keyboard.releaseAll(); przerwa; //Lasso przypadek 8: Keyboard.press('l'); Serial.print ("wejście"); Serial.println(pin); opóźnienie(200); Keyboard.releaseAll(); przerwa; //Zapisz przypadek 9: Keyboard.press(ctrlKey); Klawiatura.print('s'); Serial.print ("wejście"); Serial.println(pin); opóźnienie(200); Keyboard.releaseAll(); przerwa; domyślnie: Keyboard.releaseAll(); przerwa; } }
pusta pętla () {
// umieść tutaj swój główny kod, aby uruchamiać się wielokrotnie:
for(int i = przyciski[0]; i < rozmiar(przycisków)/rozmiar(przycisków[0])+przyciski[0]; ++i) { if (odczytajPrzycisk(i)) { doAction(i); } } //Resetuj modyfikatory Keyboard.releaseAll();
}
Są dość proste. Aby komputer rozpoznał naciśnięcie przycisku jako naciśnięcie klawisza, po prostu używamy funkcji Keyboard.press(). Aby aktywować skrót Cofnij (ctrl+z), po prostu używamy Keyboard.press(ctrlKey), a następnie Keyboard.press('z'). Pamiętaj, że aby uzyskać dostęp do tych funkcji, musisz dołączyć Keyboard.h i zainicjować klawiaturę.
Piny wejściowe są przechowywane w tablicy, więc możesz łatwo przejść przez nie wszystkie w funkcji loop(). Jeden łatwy sposób na dostęp i długość tablicy w c++ poprzez podzielenie rozmiaru całej tablicy przez element tablicy plus jeden element. Przechodzimy przez wszystkie przyciski, aby sprawdzić, czy któryś został wciśnięty.
Aby wszystko było zorganizowane, zapisałem wszystkie akcje mojego przycisku w instrukcji switch funkcji, która przyjmuje numer pin jako argument.
Jeśli chcesz, aby Twoje przyciski robiły różne rzeczy lub chcesz dodać więcej przycisków, po prostu edytuj zawartość funkcji doAction!
Ze względu na to, jak działają fizyczne przyciski, będziemy musieli je odrzucić. Ma to zapobiec odczytaniu przez program niechcianych naciśnięć spowodowanych sprężystością przycisków. Można to zrobić na wiele sposobów, ale dodałem prostą funkcję readButton(), która się tym zajmuje.
Po prostu podłącz swoje przyciski za pomocą rezystorów 10k i powinieneś być złoty!
Krok 3: Potencjometr
Teraz na potencjometr:
#włączać
wewn. dial0 = 0; void setup() { // wstaw tutaj swój kod konfiguracyjny do jednorazowego uruchomienia: Serial.begin(9600); Klawiatura.początek(); //Wybiera dial0= analogRead(0); dial0= mapa(wybierz0, 0, 1023, 1, 20); } void dialAction(int dial, int newVal, int lastVal) { switch (dial) { //Opacity case 0: delay(200); if (nowaWart!=ostatniaWart) { int decim = ((nowaWart*5)/10); int jednostka = ((nowaWart *5)% 10); if (nowaWarta==20) { Klawiatura.write(48+0); Klawiatura.zapis(48+0); Serial.println("maks. wybieranie 1"); } else { decym=ograniczenie(decym, 0, 9); jednostka=ograniczenie(jednostka, 0, 9); Serial.println(nowaWart*2); Klawiatura.zapis(48+decym); Klawiatura.zapis(48+jednostka); } } dial0=nowaWarta; przerwa; domyślnie: przerwa; } } //------------------PĘTLA GŁÓWNA------------------------- void loop() { // umieść tutaj swój główny kod, aby uruchamiał się wielokrotnie: //Opacity //delay(500); int val0 = analogRead(0); wart0 = mapa(wart0, 0, 1023, 1, 20); //Serial.print ("dial0: "); //Serial.println(val0); if (val0!=dial0) { //Zrób coś dialAction(0, val0, dial0); } }
Potencjometr działa zgodnie z tą samą logiką, ale jest to trochę trudniejsze.
Najpierw spójrzmy, jak chcemy, żeby to działało: Photoshop ma kilka przydatnych skrótów do zmiany krycia pędzla. Jeśli naciśniesz dowolny klawisz numeryczny, krycie będzie równe tej liczbie*10. Ale jeśli naciśniesz dwie liczby, odczyta drugą liczbę jako jednostkę, dając ci bardziej precyzyjną kontrolę.
Więc chcemy, aby nasz potencjometr odwzorowywał swoją rotację na procent, ale nie chcemy robić tego cały czas, ponieważ byłoby to głupie. Chcemy zmienić przezroczystość tylko podczas obracania potencjometru. Przechowujemy więc dodatkową wartość, którą porównujemy z wartością analogRead() i uruchamiamy skrypt akcji tylko wtedy, gdy jest różnica.
Kolejną kwestią, z którą się spotkamy, jest to, w jaki sposób zamieniamy powrót analogRead na int jako dane wejściowe. Ponieważ nie ma łatwego sposobu na przekształcenie int w łańcuch, będziemy musieli użyć samego int. Jednakże, jeśli po prostu napiszesz Keyboard.press(int), zauważysz, że dane wejściowe nie będą takie, jak chciałeś, a zamiast tego zostanie naciśnięty inny klawisz.
Dzieje się tak, ponieważ wszystkie klawisze na klawiaturze są zakodowane jako liczby całkowite, a każdy klawisz ma swój własny indeks. Aby poprawnie użyć klucza num, będziesz musiał wyszukać ich indeks w tabeli ASCII:
Jak widać, klawisze numeryczne zaczynają się od indeksu 48. Aby nacisnąć właściwy klawisz, wystarczy dodać wartość tarczy do 48. Wartości dziesiętne i jednostkowe są oddzielnymi naciśnięciami.
Na koniec potrzebujemy sposobu, aby wartość nie przeskakiwała tam iz powrotem. Ponieważ jeśli spróbujesz użyć tarczy z map(val0, 0, 1023, 0, 100), okaże się, że wyniki będą bardzo roztrzęsione. Podobnie jak w przypadku odbicia przycisków, naprawimy to, poświęcając część dokładności. Odkryłem, że mapowanie go na 1-20, a następnie pomnożenie wartości argumentów przez 5 jest akceptowalnym kompromisem.
Aby podłączyć potencjometr wystarczy podłączyć przewód 5V, przewód uziemiający i przewód wejścia analogowego i nie powinno być żadnych problemów.
Ciekawostka: jeśli użyjesz tego skrótu, gdy wybrane jest narzędzie takie jak Lasso, zamiast tego zmieni to krycie warstwy. Coś, na co warto zwrócić uwagę.
Krok 4: Enkoder obrotowy
Enkodery obrotowe są trochę jak potencjometry, ale bez ograniczeń co do tego, jak bardzo mogą się obracać. Zamiast wartości analogowej będziemy patrzeć cyfrowo na kierunek obrotu enkodera. Nie będę wdawać się w szczegóły, jak to działa, ale musisz wiedzieć, że używa dwóch pinów wejściowych na arduino, aby powiedzieć, w którym kierunku jest obracany. Enkoder obrotowy może być trudniejszy w obsłudze, różne enkodery mogą wymagać różnych konfiguracji. Dla ułatwienia kupiłem taki z płytką PCB, który jest gotowy do zaczepienia żeńskimi pinami. Teraz kod:
#włączać
//Enkoder obrotowy #define outputA 15 #define outputB 14 int counter = 0; int stan; int aOstatni Stan; void setup() { // wstaw tutaj swój kod konfiguracyjny do jednorazowego uruchomienia: //Rotary pinMode (outputA, INPUT); pinMode (wyjścieB, WEJŚCIE); // Odczytuje stan początkowy wyjściaA aLastState = digitalRead(wyjścieA); } void rotationAction(int dir) { if (dir>0) { Keyboard.press(']'); } else { Keyboard.press('['); } Keyboard.releaseAll(); } //------------------PĘTLA GŁÓWNA------------------------ void pętla () { // umieść tutaj swój główny kod, aby uruchamiać się wielokrotnie: //Size aState = digitalRead(outputA); if (aState != aLastState){ if (digitalRead(outputB) != aState) { //licznik ++; ObrotowyAkcja(1); } else { //licznik --; obrotowaAkcja(-1); } //Serial.print("Pozycja: "); //Serial.println(licznik); } aLastState = aState; }
Domyślnie skróty] i [w Photoshopie zwiększają i zmniejszają rozmiar pędzla. Tak jak poprzednio, chcemy je wprowadzać jako naciśnięcia klawiszy. Enkoder wysyła liczbę wejść na obrót (co zależy od modelu), a my chcemy zwiększyć/zmniejszyć rozmiar pędzla dla każdego z tych wejść, aby można było naprawdę szybko przekręcić pokrętło w górę lub w dół, ale także móc kontrolować go powoli z wielką precyzją.
Podobnie jak w przypadku potencjometru, chcemy uruchomić akcję tylko wtedy, gdy pokrętło jest przekręcane. W przeciwieństwie do potencjometru, jak wyjaśniłem wcześniej, enkoder obrotowy ma dwa naprzemienne wejścia. Patrzymy, które z nich się zmieniły, aby ustalić kierunek, w którym obraca się tarcza.
Następnie w zależności od kierunku naciskamy właściwy klawisz.
Dopóki nie masz problemów z kontaktem, powinno działać.
Krok 5: Składanie wszystkiego razem
Teraz przejdźmy do lutowania. Najpierw wiercimy w płycie perforowanej dwa otwory, aby pasowały do dwóch tarcz. lutujemy przyciski i odpowiadające im rezystory. Wywierciłem dwa dodatkowe małe otwory, aby przewody wejściowe przeszły na górze, aby zaoszczędzić miejsce pod spodem, ale nie jest to konieczne. Nie ma wielu przewodów wejściowych, więc przewody GND i 5V biegną równolegle, ale jeśli czujesz się sprytny, możesz zrobić matrycę. Przylutowałem mikrokontroler do innej, mniejszej płytki perfboardowej, która mieściła się pod spodem obok enkodera i potencjometru. Teraz lutuję wszystkie przewody do ProMicro. Nie trzeba być kreatywnym, po prostu musiałem postępować zgodnie z tym samym schematem, co ten na płytce stykowej, ale lutowanie w tak małym miejscu, co zrozumiałe, może być żmudne. Nie bądź taki jak ja, używaj ściągacza izolacji i dobrego lutu!
Na koniec możesz chcieć zrobić ładne etui dla swojego nowego kumpla z Photoshopa. Przynajmniej jeden lepszy od mojego!
Ale jeśli chcesz go wypróbować, użyj kartonu i taśmy i podłącz mikro-USB.
Krok 6: Kod + demonstracja
Pamiętaj, aby testować program panelu sterowania podczas wykonywania projektu, aby uniknąć niespodzianek!
Oto pełny kod:
Dziękuję bardzo za przeczytanie!
Zalecana:
Początkowe malowanie światłem (bez Photoshopa): 5 kroków (ze zdjęciami)
Początki malowania światłem (bez Photoshopa): Niedawno kupiłem nowy aparat i badałem niektóre z jego funkcji, kiedy natknąłem się na malowanie światłem lub fotografię z długim czasem naświetlania w Internecie. Większość z nas widziała już podstawową formę malowania światłem ze zdjęciem w mieście z drogą
Ręczny kontroler skrótów (dla Photoshopa i innych) [Arduino]: 4 kroki
Ręczny kontroler skrótów (dla Photoshopa i innych) [Arduino]: Ostatnim razem stworzyłem mały panel kontrolny do użycia w Photoshopie. Zdziałało cuda i nadal go używam! Ale jest też dość ograniczony, z zaledwie pięcioma przyciskami i użytecznymi tarczami rozmiaru i przezroczystości. Wciąż często sięgałem po klawiaturę… Więc
Użyj 1 wejścia analogowego dla 6 przycisków dla Arduino: 6 kroków
Użyj 1 wejścia analogowego dla 6 przycisków dla Arduino: Często zastanawiałem się, jak mogę uzyskać więcej wejść cyfrowych dla mojego Arduino. Niedawno przyszło mi do głowy, że powinienem móc użyć jednego z wejść analogowych do wprowadzenia wielu wejść cyfrowych. Zrobiłem szybkie wyszukiwanie i znalazłem, gdzie ludzie byli a
Jak usunąć tło za pomocą Photoshopa: 4 kroki
Jak usunąć tło za pomocą programu Photoshop: Oto kilka prostych kroków, aby usunąć tło z obrazu za pomocą programu Adobe Photoshop CC. Pamiętaj, aby obejrzeć film podczas wykonywania czynności, aby pracować z tymi samymi plikami ćwiczeń
Twórz pliki ikon Windows za pomocą Photoshopa: 5 kroków
Twórz pliki ikon systemu Windows za pomocą programu Photoshop: Oto jak tworzyć pliki ikon systemu Windows za pomocą programu Photoshop. Jest to prosty proces, taki jak tworzenie obrazu, ale potrzebujesz wtyczki. Dołączona jest wtyczka. Jak utworzyć kursor: Dowiedz się zrobić własny kursor