Სარჩევი:

ხელის მალსახმობის კონტროლერი (Photoshop + - ისთვის) [Arduino]: 4 ნაბიჯი
ხელის მალსახმობის კონტროლერი (Photoshop + - ისთვის) [Arduino]: 4 ნაბიჯი

ვიდეო: ხელის მალსახმობის კონტროლერი (Photoshop + - ისთვის) [Arduino]: 4 ნაბიჯი

ვიდეო: ხელის მალსახმობის კონტროლერი (Photoshop + - ისთვის) [Arduino]: 4 ნაბიჯი
ვიდეო: ლეპტოპის დაშლა, გაწმენდა და აწყობა 12 წუთში 2024, ივლისი
Anonim
ხელის მალსახმობების კონტროლერი (Photoshop + - ისთვის) [Arduino]
ხელის მალსახმობების კონტროლერი (Photoshop + - ისთვის) [Arduino]

ბოლო დროს შევქმენი პატარა საკონტროლო ბალიში Photoshop– ში გამოსაყენებლად. მან საოცრება მოახდინა და მე მაინც ვიყენებ მას! მაგრამ ის ასევე საკმაოდ შეზღუდულია, მხოლოდ ხუთი ღილაკით და სასარგებლო ზომის და გამჭვირვალე ამომრთველით. მე მაინც აღმოვჩნდი, რომ ბევრს ვწვდი კლავიატურას…

ასე რომ, მე დავიწყე მუშაობა საკონტროლო ბალიშის მომდევნო გამეორებაზე, ერთი უფრო მეტი ღილაკით და ფუნქციონირებით. ერთი საკონტროლო ბალიში, რომ მართოს ყველა.

ეს არ არის ის საკონტროლო ბალიში. მაგრამ გარკვეულწილად შეიძლება უკეთესი იყოს.

რა მოხდება, თუ გექნებათ უამრავი მალსახმობი, მაგრამ სუპერ კომფორტულ და მსუბუქ პაკეტში შეგიძლიათ დაიჭიროთ თქვენი თავისუფალი ხელით, სანამ ხატავთ შეუფერხებლად? … კარგი, საკმარისია ინფომერსიალით.

ეს კონტროლერი ისეა დაპროგრამებული, რომ მხოლოდ 4 ღილაკით, მისი ასახვა შესაძლებელია 32 -მდე შესაძლო მალსახმობზე! დამატებითი მე -5 ღილაკი არის იმის საშუალება, რომ გამოვიყენო მოდიფიკატორების ღილაკები ნებისმიერი კომბინაციით, რაც სასარგებლოა მრავალი პროგრამისთვის (ოდესმე სცადეთ Alt-RMB კომბინაცია PS- ში? თუ არ გექნებათ, გთხოვთ. ეს არის სიცოცხლის გადასარჩენად). მე ავხსნი სისტემას მოგვიანებით.

ამ ყველაფრის დასამზადებლად დაგჭირდებათ:

  • 1 მიკროკონტროლი (მე ვიყენებ Adafruit ItsyBitsy 32u4 მაგრამ ნებისმიერმა უნდა გააკეთოს მანამ, სანამ მას აქვს atmega32u4 ჩიპი)
  • 1 მიკრო USB ადაპტერი (მონაცემები, არა მხოლოდ ენერგიისათვის)
  • 5 ღილაკი (მე გამოვიყენე რბილი, მსგავსი)
  • 10k Ohm რეზისტორები (1 ღილაკზე)
  • მავთულები, პურის დაფა, გასაყიდი მასალა და ა.
  • გარსაცმის გაკეთება (3D პრინტერი და ა.

ეს არის შუალედური დონის არდუინოს პროექტი და მე გირჩევთ გადახედოთ ჩემს წარსულ გაკვეთილს, რათა უკეთ გაიგოთ რა ხდება, რადგან ეს არის ბევრი რამის განმეორება, რაც მე ავუხსენი იქ.

კარგი, დავიწყოთ!

ნაბიჯი 1: დაგეგმვა

დაგეგმვა
დაგეგმვა

ეს არის კონტროლერის ძირითადი სქემატური სქემა, რომელიც მე დავხატე. წრე მართლაც მარტივია, როდესაც შეადარებ ჩემს წინა პროექტს! მაგრამ ჩვენ შევძლებთ ბევრად მეტის გაკეთებას მისი რამდენიმე ღილაკით, კომბინირებული პრესის სიმძლავრით!

საკონტროლო სქემის უკან არის იდეა, რომ თითოეული ღილაკი შეიძლება იყოს თავისუფალი, დაჭერილი და გათავისუფლებული, ან დაჭერილი და გამართული. დაჭერა და გაშვება არის ის, რაც რეალურად გაააქტიურებს მალსახმობას, ხოლო ღილაკების დაჭერა მოგვცემს წვდომას სხვადასხვა მალსახმობებზე. ასე რომ, თუ თქვენ უბრალოდ დააჭირეთ ღილაკს A, თქვენ გაააქტიურებთ მალსახმობას A, მაგრამ თუ თქვენ დააჭირეთ B ღილაკს A დაჭერისას, თქვენ მიიღებთ სხვა მალსახმობს. დაჭერისას შეგიძლიათ ერთდროულად დაიჭიროთ 3 -მდე ღილაკი, ასე რომ, როდესაც გამოიყენებთ ძირითად კომბინატორიკას, ნახავთ რამდენი კომბინაციაა შესაძლებელი ამ სისტემით!

დამატებითი მეხუთე ღილაკი იგრძნო, როგორც ბუნებრივი დამატება, იმ ხელის ფორმის გათვალისწინებით, რომლითაც მოვედი. მე გადავწყვიტე გამოვიყენო ის Photoshop– ის მოდიფიკატორ კლავიშებზე წვდომისათვის. მისი მუშაობის მეთოდი ოდნავ განსხვავდება სხვა ღილაკებისგან: როდესაც ცერა თითის დაჭერაა, მხოლოდ მოდიფიკატორები იქნება გამოყენებული. ეს გააქტიურდება, როდესაც ისინი გამართულია და მრავალჯერადი დაჭერით შეიძლება. ასე რომ, თუ ღილაკი A არის Shift და ღილაკი B არის Ctrl, A და B დაჭერისას ეს იქნება როგორც Shift- ის, ასევე Ctrl- ის დაჭერა, მაგრამ მხოლოდ იმდენ ხანს, რამდენადაც თითის ღილაკი გამართულია!

ჭურვი შექმნილია როგორც ერგონომიული, ასევე ამბიდექსტრული. მე ძალიან ვზრუნავდი, რომ ის მჭიდროდ მოერგოს ისე, რომ პატარა თითის გამოყენება არ იყოს ძალიან დამღლელი და ის უნდა იმუშაოს მათთვისაც, ვისაც ჩემზე დიდი ხელები აქვს.

ნაბიჯი 2: პროტოტიპი + კოდი

პროტოტიპი + კოდი
პროტოტიპი + კოდი

კარგი პრაქტიკაა ღილაკების შემოწმება პურის დაფაზე. ეს საკმაოდ მარტივია, უბრალოდ დააკავშირეთ ღილაკები და რეზისტორები, როგორც ნაჩვენებია. თქვენ შეგიძლიათ შეამოწმოთ იგი კოდით (პასტინის ბმულის ალტერნატივა):

#ჩართეთ

// გამოიყენეთ vthisv ვარიანტი MacOS– ისთვის:

// char ctrlKey = KEY_LEFT_GUI;

// გამოიყენეთ vthisv ვარიანტი Windows და Linux:

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 timeHeld; }; // ცერა თითი, ინდექსი, შუა, ბეჭედი, პატარა;

ღილაკების ღილაკები [BUTTON_NUM] = {};

ღილაკი initButton (int p) {

ღილაკი b; pinMode (p, INPUT); b.pin = p; b.state = შტატები:: გათავისუფლებულია; b.timeHeld = 0; დაბრუნება ბ; }

void setup () {

// განათავსეთ თქვენი კონფიგურაციის კოდი აქ, ერთხელ გასაშვებად: Serial.begin (9600); კლავიატურა. დაწყება ();

ხოლო (! სერიული) {};

// ღილაკები (int i = 0; i <(BUTTON_NUM); ++ i) {Serial.print ("ღილაკის დაყენება"); სერიული. ბეჭდვა (i); Serial.print ("at pin:"); Serial.println (ქინძისთავები ); // ღილაკები ღილაკები = initButton (ქინძისთავები ); Serial.println (ღილაკები . Pin); }

}

bool readButton (int pin) {

// შეამოწმეთ და გააუქმეთ ღილაკები if (digitalRead (pin) == HIGH) {დაგვიანებით (10); if (digitalRead (pin) == HIGH) {დაბრუნება true; }} დაბრუნება false; }

int pintobin (int pin) {

თუ (pin == ქინძისთავები [0]) დააბრუნეთ 1; თუ (pin == ქინძისთავები [1]) დააბრუნეთ 10; თუ (pin == ქინძისთავები [2]) დააბრუნეთ 100; თუ (pin == ქინძისთავები [3]) დააბრუნე 1000; თუ (pin == ქინძისთავები [4]) დააბრუნეთ 10000; } ღილაკი buttonStateUpdate (ღილაკი b) {

bool press = readButton (b.pin);

გადართვა (b.state) {case შტატები:: გათავისუფლებულია: b.timeHeld = 0; თუ (დააჭირეთ) b.state = შტატები:: დაპრესილი; შესვენება; საქმე დაჭერილია: b.timeHeld+= 1; if (დააჭირეთ) {if (b.timeHeld> (THRESH_1/(1+DELAY))) {b.state = შტატები:: გამართული; }} სხვა {// if (ძვ. timeHeld

int getButtonStateCode (ღილაკი ბ)

{დაბრუნება 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 (); }

void doAction (int კოდი) {

// მოდიფიკატორები if (getCodeByButton (კოდი, 0) == 2) {// Serial.println ("--- მოდიფიკატორები ----"); if (getCodeByButton (კოდი, 1)> 0) {Keyboard.press (altKey); // Serial.println ("------- alt ---------"); } else Keyboard.release (altKey); if (getCodeByButton (კოდი, 2)> 0) {Keyboard.press (ctrlKey); // Serial.println ("-------- ctrl ----------"); } სხვა 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: // --- | ფუნჯი Keyboard.press (shiftKey); Keyboard.print ('b'); სრული პრესა (კოდი); შესვენება; საქმე 300: // --- | Eraser Keyboard.press (shiftKey); Keyboard.print ('e'); სრული პრესა (კოდი); შესვენება; საქმე 3000: // --- | Bucket Keyboard.press (shiftKey); Keyboard.print ('g'); სრული პრესა (კოდი); შესვენება; საქმე 30000: // --- | Lasso Keyboard.press (shiftKey); Keyboard.print ('l'); სრული პრესა (კოდი); შესვენება; საქმე 320: //-| o გაუქმება Keyboard.press (ctrlKey); Keyboard.print ('z'); სრული პრესა (კოდი); შესვენება; საქმე 3020: //-| -o Redo Keyboard.press (ctrlKey); Keyboard.print ('y'); სრული პრესა (კოდი); შესვენება; საქმე 30020: // | --o ისტორია Keyboard.press (shiftKey); Keyboard.print ('y'); სრული პრესა (კოდი); შესვენება; საქმე 230: //-o | შეინახეთ Keyboard.press (ctrlKey); Keyboard.print ('s'); სრული პრესა (კოდი); შესვენება; საქმე 3200: //- | o- სწრაფი-p.webp

int ღილაკი კოდი = 0;

for (int i = 0; i <BUTTON_NUM; ++ i) {buttons = buttonStateUpdate (ღილაკები ); buttonCode+= getButtonStateCode (ღილაკები ); }

თუ (ღილაკი კოდი! = 0) {

Serial.print ("ღილაკის კოდი:"); Serial.println (buttonCode); }

doAction (ღილაკის კოდი);

// განათავსეთ თქვენი მთავარი კოდი აქ, განმეორებით გასაშვებად: // for (int i = buttons [0]; i <sizeof (buttons)/sizeof (buttons [0])+buttons [0]; ++ i) {/ / // if (readButton (i)) {// doAction (i); //} //}

if (getCodeByButton (buttonCode, 0)! = 2)

Keyboard.releaseAll ();

დაგვიანება (დაგვიანებით);

}

ლოგიკაზე ბევრი არაფერია ნათქვამი, რადგან ის ჰგავს ჩემს ბოლო კონტროლერს, ორი შესამჩნევი განსხვავებით:

  1. ღილაკები არის სტრუქტურები საკუთარი სახელმწიფო მანქანებით
  2. სახელმწიფოები შეჯამებულია ერთად, რათა შეიქმნას კოდი, რომელიც განსაზღვრავს მოქმედებას

პრინციპი ბიტის გადაადგილების მსგავსია, მაგრამ იმის გამო, რომ ღილაკებს აქვთ მრავალი მდგომარეობა და არ შეიძლება უბრალოდ ორობითი გამოსახული იყოს, ისინი გამრავლებულია ათზე. შემდეგ ვამატებ ღილაკის ყველა მდგომარეობას ერთ რიცხვში და გადავიტან მას doAction () გადამრთველში, სადაც ვდებ ყველა მალსახმობის კოდს.

როგორც ხედავთ, მე არ დავსახე ყველა შესაძლო კომბინაცია. მე დავამატე მხოლოდ რამოდენიმე ჩემი საყვარელი მალსახმობი, დანარჩენს თქვენზე ვტოვებ, რომ შეავსოთ დანარჩენი ისე, როგორც საუკეთესოდ მიგაჩნიათ;)

ნაბიჯი 3: გარსაცმები

გარსაცმები
გარსაცმები
გარსაცმები
გარსაცმები
გარსაცმები
გარსაცმები

გარსაცმისთვის გამოვიყენე 3D პრინტერი. როგორც ხედავთ, დიზაინს აქვს გარკვეული ნაკლოვანებები და მე მომიწია MacGyver– მა მისი დახურვის საშუალება. ასე რომ, მე ჯერ არ გამოვაქვეყნებ მოდელის ფაილს.

ღილაკები ცხელ-წებოვანია "სკამებზე" ისე, რომ ისინი თავსახურს იტოვებენ. რბილი ღილაკები განსაკუთრებით კარგია ამაში, ასე რომ დარწმუნდით, რომ მიიღებთ ზოგიერთ მათგანს, თუ აპირებთ ჩემი მსგავსი საქმის დამზადებას.

ასევე, მე გირჩევთ დაამატოთ ცოტა წონა საქმის შიგნით, რადგან ის ძალიან მსუბუქია. დამატებითი გრამი გახდის მის შეგრძნებას უფრო ბუნებრივად.

შეაერთეთ ყველაფერი ისე, როგორც ნაჩვენებია და შეაერთეთ usb კაბელი და ყველაფერი უნდა მოთავსდეს თავის ადგილას (წებოს დახმარებით)!

ნაბიჯი 4: შედეგი და შესაძლო გაუმჯობესება

შედეგი და შესაძლო გაუმჯობესება
შედეგი და შესაძლო გაუმჯობესება
შედეგი და შესაძლო გაუმჯობესება
შედეგი და შესაძლო გაუმჯობესება
შედეგი და შესაძლო გაუმჯობესება
შედეგი და შესაძლო გაუმჯობესება

აი ეს გაქვს! ხელის კონტროლერი, რომლის საშუალებითაც შეგიძლიათ გამოიყენოთ თქვენი ყველა მნიშვნელოვანი მალსახმობი მხოლოდ ერთი ხელით!

მის გამოყენებას გარკვეული კუნთოვანი მეხსიერება სჭირდება, მაგრამ ის მართლაც მრავალმხრივია!

რა თქმა უნდა, ეს არ არის სრულყოფილი და ახლა მე ვფიქრობ მისი გაუმჯობესების რამდენიმე გზაზე. გარსაცმის გაუმჯობესებისა და მალსახმობების დამატების გარდა, ვფიქრობ, საინტერესო იქნებოდა მრავალი პროგრამის მხარდაჭერა სხვადასხვა მალსახმობებით. მე ვფიქრობ, რომ მქონდეს ღილაკების კომბინაცია საკონტროლო სქემებს შორის გადასასვლელად, მაგალითად, 4 ღილაკის დაჭერით ერთდროულად Photoshop- ის მალსახმობების ბიბლიოთეკას შორის გადასატანად მაიასთვის.

მხოლოდ რამდენიმე იდეა.

მადლობა რომ კითხულობ, მომავალ დრომდე!