Мазмұны:
- 1 -қадам: Жоспарлау
- 2 -қадам: Прототип + код
- 3 -қадам: корпус
- 4 -қадам: Нәтиже және мүмкін болатын жақсартулар
Бейне: Қолмен жұмыс жасайтын пернелер тірегі (Photoshop + Қосымша үшін) [Arduino]: 4 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:25
Соңғы рет мен Photoshop -та қолдануға арналған шағын басқару тақтасын жасадым. Бұл керемет болды, мен оны әлі де қолданамын! Бірақ бұл өте шектеулі, тек бес түйме және пайдалы өлшемі мен мөлдір емес терулер. Мен әлі де пернетақтаға көп қол созатынымды таптым …
Сондықтан мен басқару тақтасының келесі итерациясында жұмыс істей бастадым, оның бірі батырмалары мен функционалдығы. Барлығын басқаратын бір басқару тақтасы.
Бұл басқару тақтасы емес. БІРАҚ, бұл жақсы болар еді.
Егер сізде көптеген төте жолдар болса, не істеу керек, бірақ өте ыңғайлы және жеңіл пакетте сіз бос қолыңызбен ұстап тұра аласыз, егер сіз үзіліссіз сурет салсаңыз? … жарайды, ақпараттық коммерциямен жеткілікті.
Бұл контроллер тек 4 түйменің көмегімен 32 ықтимал таңбашамен салыстыруға болатындай бағдарламаланған! Қосымша 5-ші түйме көптеген бағдарламалар үшін пайдалы болатын кез келген комбинацияда өзгертуші пернелерді қолдануға мүмкіндік береді (сіз Alt-RMB комбинациясын PS-де қолданып көрдіңіз бе? Егер жоқ болса, өтінемін. Бұл құтқарушы). Мен жүйені кейінірек түсіндіремін.
Мұның бәрін жасау үшін сізге қажет:
- 1 Микроконтроллер (мен Adafruit ItsyBitsy 32u4 қолдандым, бірақ кез келген адамда atmega32u4 чипі болғанша істеу керек)
- 1 микро-USB адаптері (деректер тек қуат үшін емес)
- 5 түйме (мен жұмсақ түймелерді қолдандым)
- 10 к Ом резисторы (1 түйме үшін)
- Сымдар, нан тақтасы, дәнекерлеу материалы және т.б.
- Қабық жасау керек нәрсе (3D принтер және т.
Бұл орта деңгейдегі Arduino жобасы, мен не болып жатқанын жақсы түсіну үшін өткен оқулығымды қарауды ұсынамын, себебі бұл жерде мен түсіндірген нәрселердің қайталануы.
Жарайды, бастайық!
1 -қадам: Жоспарлау
Бұл мен контроллердің негізгі сызбасы. Егер сіз менің алдыңғы жобамен салыстырсаңыз, схема өте қарапайым! Бірақ біз бірнеше түйменің көмегімен, комбинацияланған престердің күшімен көп нәрсені жасай аламыз!
Басқару схемасының идеясы - әр түймені босатуға, басуға және босатуға немесе басуға және ұстап тұруға болады. Басу мен босату - бұл төте жолды іске қосады, ал түймелерді басып тұру бізге әр түрлі тіркесімдерге қол жеткізуге мүмкіндік береді. Егер сіз жай ғана А түймесін бассаңыз, сіз А пернелер тіркесімін қосасыз, бірақ егер А түймесін басқанда В түймесін басып тұрсаңыз, басқа таңбашаны аласыз. Басу кезінде бірден 3 түймені ұстап тұруға болады, сондықтан сіз бірнеше негізгі комбинаториканы қолданғанда, сіз бұл жүйемен қанша комбинация мүмкін екенін көресіз!
Қосымша бесінші түйме, мен ойлап тапқан портативті форманы ескере отырып, табиғи қосымша ретінде сезілді. Мен оны фотошоптағы модификациялық пернелерге қол жеткізу үшін қолдануды шештім. Оның жұмыс істеу әдісі басқа түймелерден біршама ерекшеленеді: бас бармақ басылған кезде тек модификаторлар қолданылады. Олар ұсталған кезде іске қосылады және бірнеше басуға болады. Егер А батырмасы Shift, ал В батырмасы Ctrl болса, А және В түймелерін басып тұрғанда, бұл Shift пен Ctrl екеуін де басқанмен бірдей болады, бірақ бас бармақ басылғанша ғана!
Қабық эргономикалық және екіжақты болуға арналған. Кішкентай саусақты қолдану шаршатпайтындай етіп, мен оны ұқыпты етіп қоюға өте мұқият болдым, және ол менің қолымнан үлкенірек адамдарға да жұмыс істеуі керек.
2 -қадам: Прототип + код
Нан тақтасындағы түймелерді тексеру жақсы тәжірибе. Бұл өте қарапайым, түймелер мен резисторларды суреттегідей жалғаңыз. Сіз оны мына кодпен тексере аласыз (pastebin сілтемесінің баламасы):
#қосу
// MacOS үшін vthisv опциясын қолданыңыз:
// char ctrlKey = KEY_LEFT_GUI;
// Windows және Linux үшін vthisv опциясын қолданыңыз:
char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT;
// Функционалды пернелер осында
char Fn1Key = KEY_F2; char Fn2Key = KEY_F3; char Fn3Key = KEY_F4; char Fn4Key = KEY_F5;
const int түйреуіштері = {9, 10, 11, 12, 13}; // барлық түйме түйреуіштерінің жиымы
// Сезімталдық
const int THRESH_0 = 10; const int THRESH_1 = 20; const int THRESH_2 = 25; const int THRESH_3 = 50; const int THRESH_4 = 100; const int THRESH_5 = 200;
const int BUTTON_NUM = 5;
// Фреймдерді қатыру
const int DELAY = 0;
enum мемлекеттері {босатылды, басылды, ұсталды, босатылды};
құрылым түймесі {
int pin; Штаттар мемлекеті; int timeHelld; }; // бас бармақ, индекс, ортаңғы, сақина, кішкентай;
түйме түймелері [BUTTON_NUM] = {};
initButton батырмасы (int p) {
b түймесі; pinMode (p, INPUT); b.pin = p; b.state = мемлекеттер:: босатылды; b.timeHeld = 0; қайтару b; }
жарамсыз орнату () {
// орнату кодын осында қойыңыз, бір рет іске қосылады: Serial.begin (9600); Keyboard.begin ();
while (! сериялық) {};
// (int i = 0; i <(BUTTON_NUM); ++ i) {Serial.print («орнату түймесі») түймелері; Serial.print (i); Serial.print («түйреуіште:»); Serial.println (түйреуіштер ); // түймелер .pin = 1; түймелер = initButton (түйреуіштер ); Serial.println (түймелер .pin); }
}
bool readButton (int pin) {
// тексеру және шығару түймелері if (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {true қайтару; }} false қайтару; }
int pintobin (int pin) {
if (pin == pins [0]) 1 қайтару; if (pin == pins [1]) 10 қайтару; if (pin == pins [2]) 100 қайтару; if (pin == pins [3]) 1000 қайтару; if (pin == pins [4]) 10000 қайтару; } түймешігіStateUpdate (b түймесі) {
bool press = readButton (b.pin);
switch (b.state) {жағдай мемлекеттері:: босатылды: b.timeHeld = 0; if (press) b.state = States:: pressed; үзіліс; басылған жағдай: b.timeHeld+= 1; if (басыңыз) {if (b.timeHeld> (THRESH_1/(1+DELAY)))) {b.state = States:: hold; }} басқа {// if (b.timeHeld
int getButtonStateCode (b түймесі)
{қайтару b.state*pintobin (b.pin); }
int getCodeByButton (int коды, int индексі) {
int r1, r2, r3, r4, r5; int opStep = BUTTON_NUM - (1+индекс);
// бірінші операция
if (opStep == 0) қайтару коды/10000; r1 = коды%10000;
егер (opStep == 1)
қайтару r1/1000; r2 = r1%1000; if (opStep == 2) r2/100 қайтару; r3 = r2%100; if (opStep == 3) r3/10 қайтару; r4 = r3%10; if (opStep == 4) r4/1 қайтару; r5 = r4%1; }
void completePress (int pin) {
// Serial.print («енгізу»); // Serial.println (түйреуіш); кідіріс (THRESH_3); Keyboard.releaseAll (); }
жарамсыз doAction (int коды) {
// Модификаторлар if (getCodeByButton (код, 0) == 2) {// Serial.println («--- өзгертушілер ----»); if (getCodeByButton (код, 1)> 0) {Keyboard.press (altKey); // Serial.println («------- альт ---------»); } else Keyboard.release (altKey); if (getCodeByButton (код, 2)> 0) {Keyboard.press (ctrlKey); // Serial.println («-------- ctrl ----------»); } else Keyboard.release (ctrlKey); if (getCodeByButton (код, 3)> 0) {Keyboard.press (''); } else Keyboard.release (''); if (getCodeByButton (код, 4)> 0) {Keyboard.press (shiftKey); // Serial.println («------ ауысым ------»); } else Keyboard.release (shiftKey); } басқа {
// тапсырмаларды орындау
қосқыш (код) {30 жағдай: // --- | Brush Keyboard.press (shiftKey); Keyboard.print ('b'); аяқтау (код); үзіліс; жағдай 300: // --- | Eraser Keyboard.press (shiftKey); Keyboard.print ('e'); аяқтау (код); үзіліс; жағдай 3000: // --- | Шелек пернетақтасы.press (shiftKey); Keyboard.print ('g'); аяқтау (код); үзіліс; жағдай 30000: // --- | Lasso Keyboard.press (shiftKey); Keyboard.print ('l'); аяқтау (код); үзіліс; Case 320: //-| o Keyboard.press-ті болдырмау (ctrlKey); Keyboard.print ('z'); аяқтау (код); үзіліс; case 3020: //-| -o Keyo.o қайталауды қайталау (ctrlKey); Keyboard.print ('y'); аяқтау (код); үзіліс; case 30020: // | --o History Keyboard.press (shiftKey); Keyboard.print ('y'); аяқтау (код); үзіліс; жағдай 230: //-o | Keyboard.press (ctrlKey) сақтау; Keyboard.print ('s); аяқтау (код); үзіліс; жағдай 3200: //- | o- Жылдам-p.webp
int buttonCode = 0;
for (int i = 0; i <BUTTON_NUM; ++ i) {түймелері = buttonStateUpdate ( түймелері); buttonCode+= getButtonStateCode ( түймелері); }
егер (buttonCode! = 0) {
Serial.print («түйме коды:»); Serial.println (buttonCode); }
doAction (buttonCode);
// бірнеше рет іске қосу үшін негізгі кодты осында қойыңыз: // for (int i = түймелері [0]; i <sizeof (түймелері)/sizeof (түймелері [0])+түймелері [0]; ++ i) {/ / // if (readButton (i)) {// doAction (i); //} //}
if (getCodeByButton (buttonCode, 0)! = 2)
Keyboard.releaseAll ();
кешіктіру (КЕШІКТІРУ);
}
Логика туралы көп нәрсе айтуға болмайды, себебі ол менің соңғы контроллеріме ұқсас, екі маңызды айырмашылығы бар:
- Түймелер - өздерінің мемлекеттік машиналары бар құрылымдар
- Штаттар әрекетті анықтайтын код жасау үшін жинақталады
Бұл принцип бит ауыстыруға ұқсас, бірақ түймелер бірнеше күйге ие болғандықтан және оларды екілік санау арқылы көрсете алмайтындықтан, олардың орнына ондық дәрежеге көбейтіледі. Содан кейін мен түйменің барлық күйлерін бір санға қосып, оны doAction () коммутаторының мәлімдемесіне жіберемін, онда мен барлық тіркесімдер кодын қоямын.
Көріп отырғаныңыздай, мен барлық мүмкін комбинацияны салыстырмадым. Мен өзіме ұнайтын бірнеше жарлықты ғана қостым, қалғандарын өздеріңе қалай сәйкес келетінін толтыруды өздеріңе қалдырамын;)
3 -қадам: корпус
Мен корпус үшін 3D принтерді қолдандым. Көріп отырғаныңыздай, дизайнда кемшіліктер бар, сондықтан мен оны MacGyver -ге жабуға тура келді. Мен модельдік файлды әлі жарияламаймын.
Түймелер қақпақтарды орнында ұстау үшін «орындықтарға» ыстық желіммен жабыстырылады. Жұмсақ түймелер әсіресе жақсы, сондықтан менікіне ұқсас корпус жасауды жоспарласаңыз, олардың кейбірін алыңыз.
Сонымен қатар, мен корпустың ішіне сәл салмақ қосуды ұсынамын, себебі ол өте жеңіл. Қосымша граммдар оны ұстап тұруды табиғи етеді.
Көрсетілгендей бәрін дәнекерлеңіз және USB кабелін қосыңыз, және бәрі орнына сәйкес келуі керек (желімнің көмегімен)!
4 -қадам: Нәтиже және мүмкін болатын жақсартулар
Міне, сізде! Барлық маңызды тіркесімдерге бір қолмен қол жеткізуге болатын қолмен басқарылатын контроллер!
Қолдану үшін бұлшық ет жады қажет, бірақ бұл әмбебап!
Әрине, бұл мінсіз емес, мен дәл қазір оны жақсартудың кейбір жолдарын ойлаймын. Қаптаманы жақсартудан және жарлықтарды қосудан басқа, әр түрлі тіркесімдермен бірнеше қосымшаларды қолдау қызықты болар еді деп ойлаймын. Мен басқару схемалары арасында ауысу үшін батырмалар комбинациясын қолдануды ойлаймын, мысалы, Photoshop тіркесімінің кітапханасы мен Майяға арналған тігіншіге ауысу үшін бір уақытта 4 түймені басу.
Тек кейбір идеялар.
Келесі кездескенше оқығаныңызға рахмет!
Ұсынылған:
Қолмен жұмыс жасайтын гамбол машинасы: 18 қадам (суреттермен)
Қолмен жұмыс жасамайтын гамбол машинасы: Біз микро: бит, Crazy Circuits бит тақтасы, қашықтық сенсоры, серво және картонды қолданып сенсорсыз гамбол машинасын жасадық. Оны жасау және қолдану - «BLAST» болды! ? ? Қолыңызды ракетаның түбіне қойғанда, қашықтық сенсоры
RetroPie көмегімен DIY қолмен жұмыс жасайтын ойын консолі: 7 қадам
RetroPie көмегімен DIY портативті ойын консолі: Бұл жобаны жақсы түсіну үшін жоғарыдағы бейнені қараңыз. Жақсы. Сізді бастау уақыты келді! Ең алдымен, біз RetroPie қолданамыз. Бұл бізге екі нұсқа қалдырады. Егер біз Raspbian -ды SD картасына орнатқан болсақ, онда біз RetroP -ты орната аламыз
Python жүйесімен жұмыс жасайтын қолмен USB және Bluetooth пернетақтасы: 5 қадам
Қолмен сымды USB және Bluetooth пернетақтасы Python арқылы жұмыс істейді: бұл қолмен механикалық пернетақта. Ол USB мен Bluetooth -ды қолдайды және Python пернетақтаның микроконтроллерінде жұмыс істейді. Сіз бұл қалай жұмыс істейтініне таң қалуыңыз мүмкін. Біреуді құру үшін қадамдарды орындаңыз, сіз оны білесіз
Ескі DVD дискісінен қолмен жұмыс жасайтын шам: 6 қадам
Ескі DVD дискісінен қолмен жұмыс жасайтын фонарь: Сәлем балалар, мен Мануэльмін және жасыл энергияға қатысты басқа жобаға қош келдіңіздер. Бүгін біз ескі DVD ойнатқыштан кішкентай қолмен крандық шам жасаймыз және ол төтенше жағдайларда сенімді серіктес бола алады. Мен бұл мүмкін еместігін білемін
Қолмен жұмыс жасайтын консоль: 12 қадам (суреттермен)
Қолмен жұмыс жасайтын консоль: Raspberry Pi 3 пен Retropie эмуляциялық бағдарламалық жасақтамасы бар DIY GameBoy -ды қалай жасау керектігі туралы менің қадамдық нұсқаулығыма қош келдіңіз. Бұл жобаны бастамас бұрын менде таңқурай пи, ретропи, дәнекерлеу, 3D басып шығару тәжірибесі болмады. немесе электр