Tartalomjegyzék:
- 1. lépés: Tervezés
- 2. lépés: Prototípus + kód
- 3. lépés: A burkolat
- 4. lépés: Eredmény és lehetséges fejlesztések
Videó: Kézi parancsikonvezérlő (Photoshop + Egyebekhez) [Arduino]: 4 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:41
Múltkor létrehoztam egy apró vezérlőpultot a Photoshopban. Csodát tett, és még mindig használom! De ez is meglehetősen korlátozott, mindössze öt gombbal, valamint a hasznos méretű és átlátszatlanság -tárcsákkal. Még mindig azon kaptam magam, hogy sokat nyúlok a billentyűzethez…
Elkezdtem tehát dolgozni a vezérlőpult következő iterációján, az egyik sokkal több gombbal és funkcióval. Egy vezérlőpult az összes vezérléséhez.
Ez nem az a vezérlőpult. DE bizonyos szempontból jobb lehet.
Mi lenne, ha rengeteg gyorsbillentyűvel rendelkezhetne, de egy szuper kényelmes és könnyű csomagban szabad kezével tarthatja, miközben megszakítás nélkül rajzol? … Rendben, elég az infomercial.
Ez a vezérlő úgy van programozva, hogy mindössze 4 gombbal akár 32 lehetséges parancsikonra is leképezhető! A további ötödik gomb arra szolgál, hogy bármilyen kombinációban használhassam a módosító billentyűket, ami sok program számára hasznos (próbáltad már valaha az Alt-RMB kombinációt PS-ben? Ha még nem, akkor tedd meg. Életmentő). Később elmagyarázom a rendszert.
Mindezek elkészítéséhez szüksége lesz:
- 1 mikrokontroller (én egy Adafruit ItsyBitsy 32u4 -et használtam, de bármelyiknek meg kell tennie, amíg rendelkezik az atmega32u4 chipkel)
- 1 mikro-USB adapter (adat, nem csak tápellátás)
- 5 nyomógomb (lágyakat használtam, mint ezek)
- 10 k ohmos ellenállások (1 gombonként)
- Vezetékek, kenyérlap, forrasztóanyag stb.
- Valami, amivel burkolatot készíthet (3D nyomtató, stb.)
Ez egy középszintű Arduino projekt, és azt javaslom, hogy nézze meg korábbi oktatóanyagomat, hogy jobban megértse, mi folyik itt, mivel ennek nagy része az ott elmagyarázott dolgok megismétlése.
Ok, kezdjük!
1. lépés: Tervezés
Ez egy alaprajz, amit a vezérlőről rajzoltam. Az áramkör nagyon egyszerű, ha összehasonlítja az előző projektemmel! De sokkal többre leszünk képesek azzal a néhány gombbal, amellyel rendelkezik, a kombinált prések erejével!
A vezérlési séma mögött az áll, hogy minden gomb szabadon, lenyomva és felengedve, vagy nyomva tartva. A gomb megnyomása és felengedése aktiválja a parancsikont, míg a gombok lenyomva tartásával hozzáférhetünk a különböző parancsikonokhoz. Tehát ha csak megnyomja az A gombot, akkor aktiválja az A parancsikont, de ha lenyomva tartja a B gombot az A megnyomásakor, akkor más parancsikont kap. Nyomás közben legfeljebb 3 gombot tarthat lenyomva, így ha néhány alapvető kombinációs módszert alkalmaz, látni fogja, hogy hány kombináció lehetséges ezzel a rendszerrel!
Az extra ötödik gomb természetes kiegészítésnek tűnt, tekintettel a kéziszámítógép alakjára, amelyet kitaláltam. Úgy döntöttem, hogy a Photoshop módosító kulcsainak eléréséhez használom. Működési módja kissé eltér a többi gombétól: amikor a hüvelykujj gombot lenyomva tartja, csak módosítókat kell használni. Ezek aktiválódnak, ha lenyomva tartják őket, és több gomb megnyomható. Tehát ha az A gomb Shift, a B gomb pedig a Ctrl, az A és B billentyűk lenyomva tartása olyan lesz, mintha a Shift és a Ctrl billentyűt is megnyomná, de csak addig, amíg a hüvelykujj gombot lenyomva tartja!
A héj ergonomikus és kétoldalú. Nagyon ügyeltem arra, hogy jól illeszkedjen, hogy a kisujj használata ne legyen túl fárasztó, és azoknak is működnie kell, akiknek a keze nagyobb, mint az enyém.
2. lépés: Prototípus + kód
Jó gyakorlat, ha teszteljük a gombokat egy kenyérsütőn. Elég egyszerű, csak csatlakoztassa a gombokat és az ellenállásokat az ábrán látható módon. Itt tesztelheti a kóddal (pastebin link alternatíva):
#befoglalni
// használja a vthisv opciót MacOS esetén:
// char ctrlKey = KEY_LEFT_GUI;
// használja a vthisv opciót Windows és Linux rendszerekhez:
char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT;
// Funkciógombok itt
char Fn1Key = KEY_F2; char Fn2Key = KEY_F3; char Fn3Key = KEY_F4; char Fn4Key = KEY_F5;
const int pins = {9, 10, 11, 12, 13}; // az összes gombcsap tömbje
//Érzékenység
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;
// A keretek lefagyasztása
const int DELAY = 0;
enum Államok {felszabadítva, nyomva, tartva, szabadon engedve};
szerkezet gomb {
int pin; Államok; int timeHeld; }; // hüvelykujj, mutató, középső, gyűrű, kicsi;
gombok [BUTTON_NUM] = {};
gomb initButton (int p) {
b gomb; pinMode (p, INPUT); b.pin = p; b.állam = Államok:: felszabadult; b. timeHeld = 0; visszatérés b; }
void setup () {
// tegye ide a beállítási kódot, hogy egyszer lefusson: Serial.begin (9600); Keyboard.begin ();
while (! Sorozat) {};
// Gombok a (int i = 0; i <(BUTTON_NUM); ++ i) {Serial.print ("set button"); Sorozatnyomat (i); Serial.print ("pin:"); Soros.println (csapok ); //buttons.pin = 1; gombok = initButton (csapok ); Serial.println (gombok .pin); }
}
bool readButton (int pin) {
// check and debounce gomb if (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {return true; }} return false; }
int pintobin (int pin) {
if (pin == pins [0]) return 1; if (pin == pins [1]) return 10; if (pin == pins [2]) return 100; if (pin == csapok [3]) 1000 -et ad vissza; if (pin == pins [4]) return 10000; } gomb buttonStateUpdate (b gomb) {
bool press = readButton (b.pin);
switch (b.state) {esetállapotok:: felszabadítva: b.timeHeld = 0; if (press) b.state = Államok:: lenyomva; szünet; kis- és nagybetűk megnyomása: b.timeHeld+= 1; if (nyomja meg) {if (b.timeHeld> (THRESH_1/(1+DELAY)))) {b.state = Államok:: tartott; }} else {// if (b.timeHeld
int getButtonStateCode (b gomb)
{return b.állapot*pintobin (b.pin); }
int getCodeByButton (int kód, int index) {
int r1, r2, r3, r4, r5; int opStep = BUTTON_NUM - (1+index);
// első művelet
if (opStep == 0) visszatérési kód/10000; r1 = kód%10000;
ha (opStep == 1)
visszatérés r1/1000; r2 = r1%1000; if (opStep == 2) return r2/100; r3 = r2%100; if (opStep == 3) return r3/10; r4 = r3%10; if (opStep == 4) return r4/1; r5 = r4%1; }
void completePress (int pin) {
// Serial.print ("input"); // Sorozat.println (pin); késleltetés (THRESH_3); Keyboard.releaseAll (); }
void doAction (int kód) {
// Módosítók if (getCodeByButton (kód, 0) == 2) {// Serial.println ("--- módosítók ----"); if (getCodeByButton (kód, 1)> 0) {Keyboard.press (altKey); // Sorozat.println ("------- alt ---------"); } else Keyboard.release (altKey); if (getCodeByButton (kód, 2)> 0) {Keyboard.press (ctrlKey); // Serial.println ("-------- ctrl ----------"); } else Keyboard.release (ctrlKey); if (getCodeByButton (kód, 3)> 0) {Keyboard.press (''); } else Keyboard.release (''); if (getCodeByButton (kód, 4)> 0) {Keyboard.press (shiftKey); // Serial.println ("------ shift ------"); } else Keyboard.release (shiftKey); } más {
// feladatot ellát
kapcsoló (kód) {30. eset: // --- | Brush Keyboard.press (shiftKey); Keyboard.print ('b'); completePress (kód); szünet; 300. eset: // --- | Radír Keyboard.press (shiftKey); Keyboard.print ('e'); completePress (kód); szünet; 3000. eset: // --- | Bucket Keyboard.press (shiftKey); Keyboard.print ('g'); completePress (kód); szünet; eset 30000: // --- | Lasso Keyboard.press (shiftKey); Keyboard.print ('l'); completePress (kód); szünet; 320. eset: //-| o Billentyűzet visszavonása.press (ctrlKey); Keyboard.print ('z'); completePress (kód); szünet; eset 3020: //-| -o Újra billentyűzet.press (ctrlKey); Keyboard.print ('y'); completePress (kód); szünet; eset 30020: // | --o Történelem billentyűzet.press (shiftKey); Keyboard.print ('y'); completePress (kód); szünet; 230. eset: //-o | Save Keyboard.press (ctrlKey); Keyboard.print ('s'); completePress (kód); szünet; 3200. eset: //- | o- Gyors-p.webp
int buttonCode = 0;
for (int i = 0; i <BUTTON_NUM; ++ i) {gombok = buttonStateUpdate ( gombok); buttonCode+= getButtonStateCode (gombok ); }
if (buttonCode! = 0) {
Serial.print ("gombkód:"); Serial.println (buttonCode); }
doAction (buttonCode);
// tegye ide a fő kódot az ismételt futtatáshoz: // for (int i = gombok [0]; i <sizeof (gombok)/sizeof (gombok [0])+gombok [0]; ++ i) {/ / // if (readButton (i)) {// doAction (i); //} //}
if (getCodeByButton (buttonCode, 0)! = 2)
Keyboard.releaseAll ();
késleltetés (DELAY);
}
Nincs sok mondanivaló a logikáról, mivel hasonló az utolsó vezérlőmhöz, két figyelemre méltó különbséggel:
- A gombok saját állapotú gépekkel készülnek
- Az állapotokat összegezve létrejön egy kód, amely meghatározza a műveletet
Az elv hasonló a biteltoláshoz, de mivel a gomboknak több állapota van, és nem lehet őket egyszerűen binárisan ábrázolni, helyette tízes hatványokkal szorozzuk őket. Ezután összeadom az összes gombállapotot egyetlen számba, és átadom a doAction () kapcsoló utasításnak, ahol az összes parancsikon kódját elhelyezem.
Mint látható, nem feltérképeztem minden lehetséges kombinációt. Csak néhány kedvenc hivatkozásomat adtam hozzá, a többieket bízom benne, hogy a többit úgy töltse ki, ahogy a legjobbnak látja;)
3. lépés: A burkolat
A burkolathoz 3D nyomtatót használtam. Amint láthatja, a tervezésnek vannak hibái, és MacGyvernek kellett módot adnom arra, hogy csak bezárjam. Tehát a modellfájlt még nem teszem közzé.
A gombokat melegen ragasztják a "padokra", hogy a kupakokat a helyükön tartsák. A puha nyomógombok különösen jók ebben, ezért mindenképpen szerezzen be néhányat, ha az enyémhez hasonló tokot tervez készíteni.
Azt is javaslom, hogy tegyen egy kis súlyt a tokba, mivel nagyon könnyű. A plusz grammok természetesebbé teszik a tartást.
Forrasztjon mindent az ábrán látható módon, és csatlakoztassa az usb kábelt, és mindennek a helyére kell illeszkednie (valamilyen ragasztó segítségével)!
4. lépés: Eredmény és lehetséges fejlesztések
Tessék, itt van! Kézi vezérlő, amellyel egyetlen fontos kézzel elérheti az összes fontos hivatkozást!
A használatához izommemória szükséges, de valóban sokoldalú!
Természetesen nem tökéletes, és most azon gondolkodom, hogy hogyan lehetne javítani. A burkolat javításán és a parancsikonok hozzáadásán kívül azt gondolom, hogy érdekes lenne több alkalmazást támogatni különböző parancsikonokkal. Arra gondolok, hogy van egy gombkombinációm a vezérlési sémák közötti váltáshoz, például 4 gomb egyidejű megnyomásával válthatsz a Photoshop parancsikon-könyvtára és a Maya számára szabott személyre szabott között.
Csak néhány ötlet.
Köszönöm, hogy elolvastad, legközelebb!
Ajánlott:
Arduino kézi ventilátor kapacitív érintőkapcsolóval: 6 lépés
Arduino kézi ventilátor kapacitív érintőkapcsolóval: Ebben az oktatóanyagban megtanuljuk, hogyan lehet be- és kikapcsolni a Hendheld akkumulátorventilátort kapacitív érintésérzékelő, reley modul és Visuino segítségével. Nézzen meg egy bemutató videót
Arduino zongora kézi és 7 előre beállított dallal: 7 lépés
Arduino zongora kézi és 7 előre beállított dallal: Az Arduino Piano billentyűzet és az LCD interfész 2 módban van. A kézi mód & Az előre beállított mód. 7 nyomógombot használtam egy egyszerű 7 billentyűs zongorához, és 1 gombot a Setup Mode -hoz, hogy 7 előre beállított dalra váltsak
Kézi Arduino papír kő olló játék 20x4 LCD kijelző használatával I2C -vel: 7 lépés
Kézi Arduino papír kő olló játék 20x4 -es LCD kijelző használata I2C -vel: Üdvözlök mindenkit, vagy talán azt kellene mondanom: "Hello World!". Nagy örömömre szolgálna, ha megoszthatnék veletek egy olyan projektet, amely sok mindenben az Arduino témája volt. Ez egy kézi Arduino papír kő olló játék I2C 20x4 LCD kijelzővel. ÉN
Automatikus kézi adagoló Arduino -val: 3 lépés
Auto Handgel adagoló Arduino -val: ez a projekt nagyon egyszerű és könnyű ismereteken alapul, amatőrök számára alkalmas, nyílt forráskódokon és könnyen megtalálható alkatrészeken alapul nagyon kedvező áron. A projekt célja, hogy tisztán tartsuk a kezünket a vírusoktól és egyéb kórokozók
Automatikus katapult az állateledel dobásához (kutya, macska, csirke, stb.), Labdák dobásához és egyebekhez!: 4 lépés (képekkel)
Automatikus katapult az állateledel dobásához (kutya, macska, csirke, stb.), Labdák dobásához és még sok máshoz! Kitaláltam, hogyan lassíthatnám ezt, a golyóktól, amelyekben belül van az étel, és az egész udvaron. Csodálatos módon ő