Satura rādītājs:
- 1. solis: plānošana
- 2. darbība: prototips + kods
- 3. solis: korpuss
- 4. darbība. Rezultāts un iespējamie uzlabojumi
Video: Rokas saīsnes kontrolieris (Photoshop + vairāk) [Arduino]: 4 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:56
Iepriekšējā reizē es izveidoju nelielu vadības spilventiņu, ko izmantot Photoshop. Tas darīja brīnumus, un es to joprojām izmantoju! Bet tas ir arī diezgan ierobežots, tikai ar piecām pogām un noderīga izmēra un necaurredzamības ciparripām. Es joprojām atklāju, ka daudz ķeras pie tastatūras…
Tāpēc es sāku strādāt pie nākamās vadības spilventiņa iterācijas - viena ar vairāk pogām un funkcionalitāti. Viens vadības bloks, lai tos visus pārvaldītu.
Tas nav tas vadības bloks. BET savā ziņā tas varētu būt labāk.
Ko darīt, ja jums varētu būt daudz īsinājumtaustiņu, bet īpaši ērtā un vieglā iepakojumā jūs varat turēt ar brīvo roku, kamēr zīmējat nepārtraukti? … Labi, pietiek ar informatīvo reklāmu.
Šis kontrolieris ir ieprogrammēts tā, ka tikai ar 4 pogām to var kartēt līdz pat 32 iespējamiem īsceļiem! Papildu piektā poga ir paredzēta, lai ļautu man izmantot modifikācijas taustiņus jebkurā kombinācijā, kas ir noderīga daudzām programmām (vai jūs kādreiz esat mēģinājis Alt-RMB kombināciju PS? Ja neesat to izdarījis, lūdzu, dariet to. Tas ir glābējs). Vēlāk es izskaidrošu sistēmu.
Lai to visu izdarītu, jums būs nepieciešams:
- 1 mikrokontrolleris (es izmantoju Adafruit ItsyBitsy 32u4, bet jebkuram vajadzētu darīt, ja vien tam ir atmega32u4 mikroshēma)
- 1 mikro-USB adapteris (dati, nevis tikai barošana)
- 5 spiedpogas (es izmantoju tādas mīkstas)
- 10 kΩ rezistori (1 uz vienu pogu)
- Vadi, maizes dēlis, lodēšanas materiāls utt.
- Kaut kas, ar ko izgatavot apvalku (3D printeris utt.)
Šis ir vidēja līmeņa Arduino projekts, un es iesaku aplūkot savu iepriekšējo pamācību, lai labāk izprastu notiekošo, jo liela daļa no tā atkārtojas tur izskaidrotajām lietām.
Labi, sāksim!
1. solis: plānošana
Šī ir kontroliera pamata shēma. Ķēde ir patiešām vienkārša, ja salīdzina to ar manu iepriekšējo projektu! Bet mēs varēsim paveikt daudz vairāk ar dažām pogām, kas tam ir, ar kombinēto preses spēku!
Kontroles shēmas ideja ir tāda, ka katra poga var būt brīva, nospiesta un atlaista, vai nospiesta un turēta. Nospiežot un atlaižot, tas faktiski aktivizēs saīsni, bet, turot nospiestu pogas, mēs varēsim piekļūt dažādiem īsceļiem. Tātad, ja jūs vienkārši nospiedīsiet pogu A, jūs aktivizēsit īsceļu A, bet, turot nospiestu B, nospiežot A, jūs saņemsiet citu saīsni. Nospiežot, jūs varat vienlaikus turēt līdz 3 pogām, tāpēc, pielietojot dažas pamata kombinatorikas, jūs redzēsit, cik daudz kombināciju ir iespējama ar šo sistēmu!
Papildu piektā poga jutās kā dabisks papildinājums, ņemot vērā rokas formu, kuru es izdomāju. Es nolēmu to izmantot, lai piekļūtu modifikācijas taustiņiem Photoshop. Tās darbības veids nedaudz atšķiras no citām pogām: ikreiz, kad tiek turēta īkšķa poga, tiks izmantoti tikai pārveidotāji. Tie tiks aktivizēti, kad tie tiek turēti, un var nospiest vairākus. Tātad, ja poga A ir Shift un poga B ir Ctrl, turot nospiestu A un B, tas būs kā nospiest gan Shift, gan Ctrl, bet tikai tik ilgi, kamēr tiek turēta īkšķa poga!
Korpuss ir veidots gan ergonomisks, gan abpusējs. Es ļoti rūpējos, lai tas būtu cieši pieguļošs, lai mazā pirkstiņa lietošana nebūtu pārāk nogurdinoša, un tam vajadzētu darboties arī tiem, kuru rokas ir lielākas par manējo.
2. darbība: prototips + kods
Laba prakse ir pārbaudīt maizes dēļa pogas. Tas ir diezgan vienkārši, vienkārši pievienojiet pogas un rezistorus, kā parādīts attēlā. To var pārbaudīt ar kodu šeit (alternatīva pastebin link):
#iekļaut
// izmantojiet opciju vthisv operētājsistēmai MacOS:
// char ctrlKey = KEY_LEFT_GUI;
// izmantojiet opciju vthisv operētājsistēmai Windows un Linux:
char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT;
// Funkciju taustiņi šeit
char Fn1Key = KEY_F2; char Fn2Key = KEY_F3; char Fn3Key = KEY_F4; char Fn4Key = KEY_F5;
const int tapas = {9, 10, 11, 12, 13}; // visu pogu tapu masīvs
// Jutīgums
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;
// Iesaldēt rāmjus
const int DELAY = 0;
enum valstis {atbrīvotas, presētas, turētas, atbrīvotas};
strukturēšanas poga {
int pin; Štati; int timeHeld; }; // īkšķis, rādītājs, vidus, gredzens, maz;
pogu pogas [BUTTON_NUM] = {};
poga initButton (int p) {
poga b; pinMode (p, INPUT); b.pin = p; b.valsts = Valstis:: atbrīvots; b. timeHeld = 0; atgriešanās b; }
void setup () {
// ielieciet šeit savu iestatīšanas kodu, lai palaistu vienu reizi: Serial.begin (9600); Keyboard.begin ();
while (! Serial) {};
// Pogas priekš (int i = 0; i <(BUTTON_NUM); ++ i) {Serial.print ("iestatīšanas poga"); Sērijas nospiedums (i); Serial.print ("pie tapas:"); Sērijas.println (tapas ); //pogas.pin = 1; pogas = initButton (tapas ); Serial.println (pogas .pin); }
}
bool readButton (int pin) {
// pārbaudes un debounce pogas, ja (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {return true; }} atgriezt nepatiesu; }
int pintobin (int pin) {
if (pin == pins [0]) return 1; ja (pin == tapas [1]) atgriežas 10; if (pin == pins [2]) return 100; if (pin == pins [3]) return 1000; if (pin == pins [4]) return 10000; } pogas pogaStateUpdate (poga b) {
bool press = readButton (b.pin);
slēdzis (b.valsts) {lietu valstis:: atbrīvots: b.timeHeld = 0; ja (prese) b.valsts = valstis:: nospiests; pārtraukums; burts nospiests: b.timeHeld+= 1; ja (nospiediet) {if (b.timeHeld> (THRESH_1/(1+DELAY)))) {b.state = States:: aizturēts; }} cits {// ja (b.timeHeld
int getButtonStateCode (poga b)
{return b.valsts*pintobīns (b.pin); }
int getCodeByButton (int kods, int indekss) {
int r1, r2, r3, r4, r5; int opStep = BUTTON_NUM - (1+indekss);
// pirmā darbība
ja (opStep == 0) atgriešanās kods/10000; r1 = kods%10000;
ja (opStep == 1)
atgriešanās r1/1000; r2 = r1%1000; ja (opStep == 2) atgriežas r2/100; r3 = r2%100; ja (opStep == 3) atgriežas r3/10; r4 = r3%10; ja (opStep == 4) atgriežas r4/1; r5 = r4%1; }
void completePress (int pin) {
// Serial.print ("ievade"); // Serial.println (pin); kavēšanās (THRESH_3); Keyboard.releaseAll (); }
void doAction (int kods) {
// Modifikatori if (getCodeByButton (kods, 0) == 2) {// Serial.println ("--- modifikatori ----"); if (getCodeByButton (kods, 1)> 0) {Keyboard.press (altKey); // Serial.println ("------- alt ---------"); } cits Keyboard.release (altKey); if (getCodeByButton (kods, 2)> 0) {Keyboard.press (ctrlKey); // Serial.println ("-------- ctrl ----------"); } cits Keyboard.release (ctrlKey); if (getCodeByButton (kods, 3)> 0) {Keyboard.press (''); } cits Keyboard.release (''); if (getCodeByButton (kods, 4)> 0) {Keyboard.press (shiftKey); // Serial.println ("------ maiņa ------"); } cits Keyboard.release (shiftKey); } vēl {
// veikt uzdevumus
slēdzis (kods) {gadījums 30: // --- | Brush Keyboard.press (shiftKey); Keyboard.print ('b'); completePress (kods); pārtraukums; 300. gadījums: // --- | Dzēšgumijas tastatūra. Nospiediet (shiftKey); Keyboard.print ('e'); completePress (kods); pārtraukums; gadījums 3000: // --- | Bucket Keyboard.press (shiftKey); Keyboard.print ('g'); completePress (kods); pārtraukums; lieta 30000: // --- | Lasso Keyboard.press (shiftKey); Keyboard.print ('l'); completePress (kods); pārtraukums; gadījums 320: //-| o Undo Keyboard.press (ctrlKey); Keyboard.print ('z'); completePress (kods); pārtraukums; gadījums 3020: //-| -o Redo Keyboard.press (ctrlKey); Keyboard.print ('y'); completePress (kods); pārtraukums; gadījums 30020: // | --o Vēsture Keyboard.press (shiftKey); Keyboard.print ('y'); completePress (kods); pārtraukums; 230. gadījums: //-o | Saglabāt Keyboard.press (ctrlKey); Keyboard.print ('s'); completePress (kods); pārtraukums; 3200. gadījums: //- | o- Ātrā-p.webp
int buttonCode = 0;
for (int i = 0; i <BUTTON_NUM; ++ i) {pogas = buttonStateUpdate (pogas ); buttonCode+= getButtonStateCode (pogas ); }
ja (buttonCode! = 0) {
Serial.print ("pogas kods:"); Serial.println (buttonCode); }
doAction (buttonCode);
// ievietojiet savu galveno kodu šeit, lai to palaistu atkārtoti: // for (int i = pogas [0]; i <sizeof (pogas)/sizeof (pogas [0])+pogas [0]; ++ i) {/ / // if (readButton (i)) {// doAction (i); //} //}
ja (getCodeByButton (buttonCode, 0)! = 2)
Keyboard.releaseAll ();
kavēšanās (DELAY);
}
Nav daudz ko teikt par loģiku, jo tā ir līdzīga manam pēdējam kontrolierim ar divām ievērojamām atšķirībām:
- Pogas ir veidotas ar savām valsts mašīnām
- Štati tiek apkopoti kopā, lai izveidotu kodu, kas nosaka darbību
Princips ir līdzīgs bitu maiņai, taču, tā kā pogām ir vairāki stāvokļi un tās nevar vienkārši attēlot ar bināro, tās tiek reizinātas ar desmit pilnvarām. Pēc tam visus pogu stāvokļus sasummēju vienā skaitlī un nododu to doAction () slēdža paziņojumam, kur ievietoju visu īsceļu kodu.
Kā redzat, es neizklāstīju visas iespējamās kombinācijas. Es pievienoju tikai dažus no saviem iecienītākajiem īsceļiem, atstāju jūsu ziņā aizpildīt pārējo, kā jums vislabāk šķiet;)
3. solis: korpuss
Korpusam es izmantoju 3D printeri. Kā redzat, dizainā ir daži trūkumi, un man bija MacGyver veids, kā to vienkārši aizvērt. Tāpēc es vēl nepublicēšu modeļa failu.
Pogas ir karsti pielīmētas uz "soliņiem", lai tās turētu vāciņus vietā. Mīkstās spiedpogas ir īpaši labas, tāpēc noteikti iegādājieties dažas no tām, ja plānojat izgatavot man līdzīgu futrāli.
Turklāt es iesaku korpusam pievienot nelielu svaru, jo tas ir ļoti viegls. Papildu grami ļaus turēt to dabiskāku.
Lodējiet visu, kā parādīts attēlā, un pievienojiet usb kabeli, un visam vajadzētu ievietoties vietā (ar kādu līmi)!
4. darbība. Rezultāts un iespējamie uzlabojumi
Tur jums tas ir! Rokas kontrolieris, kuru varat izmantot, lai piekļūtu visiem svarīgākajiem īsceļiem tikai ar vienu roku!
Lai izmantotu muskuļu atmiņu, tā ir daudzpusīga!
Protams, tas nav ideāli, un šobrīd es domāju par dažiem veidiem, kā to uzlabot. Papildus korpusa uzlabošanai un īsceļu pievienošanai es domāju, ka man būtu interesanti atbalstīt vairākas lietojumprogrammas ar dažādiem īsceļiem. Es domāju izveidot pogu kombināciju, lai pārslēgtos starp vadības shēmām, piemēram, nospiest 4 pogas vienlaicīgi, lai pārslēgtos starp Photoshop īsinājumtaustiņu bibliotēku un pielāgotu Maya.
Tikai dažas idejas.
Paldies, ka izlasījāt, līdz nākamajai reizei!
Ieteicams:
Vairāk salātu audzēšana mazāk vietas vai Salātu audzēšana kosmosā, (vairāk vai mazāk): 10 soļi
Vairāk salātu audzēšana mazāk vietas vai … Salātu audzēšana kosmosā, (vairāk vai mazāk) .: Šis ir profesionāls iesniegums augošajai zemei, Maker Contest, kas iesniegts, izmantojot Instructables. Es nevarēju būt vairāk satraukti par to, ka plānoju kosmosa kultūraugu ražošanu un ievietoju savu pirmo Instructable. Lai sāktu, konkursā mums tika lūgts
Rokas joslas kontrolieris, izmantojot PLUTOX: 4 soļi
ROKASLIETAS KONTROLIERIS, KAS LIETO PLUTOX: PrimusX ir lidojuma kontrolieris, ko izmanto PlutoX dronā. PrimusX dēlis sazinās, izmantojot ESP8266-12F. Tam ir arī MPU un barometrs, tāpēc es domāju, kāpēc nevadīt bezpilota lidaparātu, izmantojot tikai PrimusX plāksni, un piestiprināt dēli pie plaukstas locītavas un kontrolēt
DIY spēļu kontrolieris uz Arduino bāzes - Arduino PS2 spēļu kontrolieris - Spēlējot Tekken ar DIY Arduino Gamepad: 7 soļi
DIY spēļu kontrolieris uz Arduino bāzes | Arduino PS2 spēļu kontrolieris | Spēlēt Tekken ar DIY Arduino Gamepad: Sveiki, puiši, spēlēt spēles vienmēr ir jautri, bet spēlēt ar savu DIY pielāgoto spēļu kontrolieri ir jautrāk. Tāpēc šajā instrukcijā mēs izveidosim spēles kontrolieri, izmantojot arduino pro micro
Klēpjdatora saīsnes kaste: 3 soļi (ar attēliem)
Klēpjdatora saīsnes kaste: Materiāli: mezgls MCU esp8266 Maizes dēlis 5x 6 mm pogu slēdži ⅛ ” saplākšņa loksne 3mm akrila plastmasas loksne 11x vadi Lodāmurs + lodmetāls Lāzera griezējs Karstā līme Koka līme Koka urbis
Rokas tahikometrs uz rokas: 9 soļi
Rokas tahometrs, kas balstīts uz IR: šī pamācība ir balstīta uz ķēdi, ko portatīvajā digitālajā tahometrā ir aprakstījis electro18. Es domāju, ka būtu lietderīgi iegūt rokas ierīci un ka tas būtu jautrs projekts. Man patīk, kā ierīce izrādījās - dizains varētu būt