Taula de continguts:
Vídeo: Controlador de drecera de mà (per a Photoshop + Més) [Arduino]: 4 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:14
La darrera vegada vaig crear un minúscul bloc de control per utilitzar-lo a Photoshop. Va funcionar de meravella i encara ho faig servir. Però també és bastant limitat, amb només cinc botons i els dials de mida i opacitat útils. Encara em vaig trobar buscant molt el teclat …
Així que vaig començar a treballar en la següent iteració del control pad, una amb molts botons i funcionalitat. Un coixinet de control per governar-los tots.
Això no és aquest bloc de control. PERUT en certa manera podria ser millor.
Què passa si poguessis tenir un munt de dreceres, però en un paquet molt còmode i lleuger pots aguantar amb la mà lliure mentre dibuixes sense interrupcions? … d'acord, prou amb la publicitat infomercial.
Aquest controlador està programat de manera que, amb només 4 botons, es pot assignar fins a 32 dreceres possibles. El cinquè botó addicional hi és per permetre'm utilitzar tecles modificadores en qualsevol combinació, cosa que és útil per a molts programes (alguna vegada heu provat el combinat Alt-RMB a PS? Si no ho heu fet, si us plau, feu-ho. És un salvavides). Més endavant explico el sistema.
Per fer tot això, necessitareu:
- 1 microcontrolador (he utilitzat un Adafruit ItsyBitsy 32u4 però qualsevol ha de fer-ho sempre que tingui el xip atmega32u4)
- 1 adaptador micro-USB (dades, no només alimentació)
- 5 polsadors (n'he utilitzat de suaus, com aquests)
- Resistències de 10 k ohmis (1 per botó)
- Filferros, taulers de pa, material de soldadura, etc.
- Alguna cosa amb què fer una carcassa (impressora 3D, etc.)
Es tracta d’un projecte Arduino de nivell intermedi i us suggereixo mirar el meu tutorial passat per entendre millor què passa, ja que bona part d’això és una repetició de les coses que hi vaig explicar.
D’acord, comencem!
Pas 1: planificació
Aquest és un esquema bàsic que vaig dibuixar del controlador. El circuit és realment senzill si el compareu amb el meu projecte anterior. Però podrem fer molt més amb els pocs botons que té, amb la potència de les premses combinades.
La idea darrere de l’esquema de control és que cada botó pot ser lliure, premut i alliberat, o bé mantingut premut. Premeu i deixeu anar el que realment activarà la drecera, mentre manteniu premuts els botons ens donarà accés a diferents dreceres. Per tant, si només premeu el botó A, activareu la drecera A, però si manteniu premut B en prémer A, obtindreu una drecera diferent. Podeu mantenir fins a 3 botons alhora alhora de prémer, de manera que quan apliqueu una combinatòria bàsica, veureu quantes combinacions són possibles amb aquest sistema.
El cinquè botó addicional em va semblar un complement natural, donada la forma del dispositiu de mà que em va semblar. Vaig decidir utilitzar-lo per accedir a les tecles modificadores de Photoshop. El seu funcionament és lleugerament diferent dels altres botons: sempre que es manté premut el botó polze, només s’utilitzaran modificadors. Aquests s'activaran quan es mantenen premuts i es poden prémer diversos. Per tant, si el botó A és Maj i el botó B és Ctrl, quan mantingueu premudes A i B serà com prémer Maj i Ctrl, però només mentre es mantingui premut el botó polze.
La carcassa està dissenyada per ser ergonòmica i ambidiestra. Vaig tenir molta cura de fer que encaixés perfectament de manera que fer servir el dit petit no resultés massa cansat i hauria de funcionar també per a aquells amb mans més grans que les meves.
Pas 2: prototip + codi
És una bona pràctica provar els botons d’una taula de treball. És bastant senzill, només cal que connecteu els botons i les resistències tal com es mostra. Podeu provar-ho amb el codi aquí (alternativa a l'enllaç pastebin):
#incloure
// utilitzeu l'opció vthisv per a MacOS:
// char ctrlKey = KEY_LEFT_GUI;
// utilitzeu l'opció vthisv per a Windows i Linux:
char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT;
// Tecles de funció aquí
char Fn1Key = KEY_F2; char Fn2Key = KEY_F3; char Fn3Key = KEY_F4; char Fn4Key = KEY_F5;
const int pins = {9, 10, 11, 12, 13}; // matriu de tots els pins dels botons
// Sensibilitat
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;
// Congelar fotogrames
const int DELAY = 0;
enum States {alliberat, pressionat, retingut, alliberat};
botó struct {
int pin; Estats estatals; int timeHeld; }; // polze, índex, mitjà, anell, poc;
botons de botó [BUTTON_NUM] = {};
botó initButton (int p) {
botó b; pinMode (p, INPUT); b.pin = p; b.state = Estats:: alliberat; b.timeHeld = 0; retorn b; }
configuració nul·la () {
// poseu aquí el vostre codi de configuració per executar-lo una vegada: Serial.begin (9600); Keyboard.begin ();
while (! Serial) {};
// Botons per a (int i = 0; i <(BUTTON_NUM); ++ i) {Serial.print ("botó de configuració"); Serial.print (i); Serial.print ("al pin:"); Serial.println (pins ); //butons.pin = 1; botons = initButton (pins ); Serial.println (botons .pin); }
}
bool readButton (pin int) {
// comproveu i rebutgeu els botons si (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {return true; }} retornar fals; }
int pintobin (int pin) {
if (pin == pins [0]) retorna 1; if (pin == pins [1]) retorna 10; if (pin == pins [2]) retorna 100; if (pin == pins [3]) retorna 1000; if (pin == pins [4]) retorna 10000; } botó buttonStateUpdate (botó b) {
bool press = readButton (b.pin);
switch (b.state) {case States:: alliberat: b.timeHeld = 0; if (premeu) b.state = Estats:: premut; trencar; majúscules i minúscules: b.timeHeld + = 1; if (premeu) {if (b.timeHeld> (THRESH_1 / (1 + DELAY))) {b.state = States:: held; }} else {// if (b.timeHeld
int getButtonStateCode (botó b)
{retorn b.state * pintobin (b.pin); }
int getCodeByButton (codi int, índex int) {
int r1, r2, r3, r4, r5; int opStep = BUTTON_NUM - (1 + índex);
// primera operació
if (opStep == 0) return code / 10000; r1 = codi% 10000;
if (opStep == 1)
retorn r1 / 1000; r2 = r1% 1000; if (opStep == 2) retorna r2 / 100; r3 = r2% 100; if (opStep == 3) retorna r3 / 10; r4 = r3% 10; if (opStep == 4) retorna r4 / 1; r5 = r4% 1; }
void completePress (int pin) {
// Serial.print ("entrada"); // Serial.println (pin); retard (THRESH_3); Keyboard.releaseAll (); }
void doAction (codi int) {
// Modificadors if (getCodeByButton (code, 0) == 2) {// Serial.println ("--- modificadors ----"); if (getCodeByButton (code, 1)> 0) {Keyboard.press (altKey); // Serial.println ("------- alt ---------"); } else Keyboard.release (altKey); if (getCodeByButton (code, 2)> 0) {Keyboard.press (ctrlKey); // Serial.println ("-------- ctrl ----------"); } else Keyboard.release (ctrlKey); if (getCodeByButton (code, 3)> 0) {Keyboard.press (''); } else Keyboard.release (''); if (getCodeByButton (code, 4)> 0) {Keyboard.press (shiftKey); // Serial.println ("------ shift ------"); } else Keyboard.release (shiftKey); } més {
// realitzar tasques
commutador (codi) {cas 30: // --- | Pinzell Keyboard.press (shiftKey); Keyboard.print ('b'); completePress (codi); trencar; cas 300: // --- | Eraser Keyboard.press (shiftKey); Keyboard.print ('e'); completePress (codi); trencar; cas 3000: // --- | Bucket Keyboard.press (shiftKey); Keyboard.print ('g'); completePress (codi); trencar; cas 30000: // --- | Lasso Keyboard.press (shiftKey); Keyboard.print ('l'); completePress (codi); trencar; cas 320: // - | o Desfés Keyboard.press (ctrlKey); Keyboard.print ('z'); completePress (codi); trencar; case 3020: // - | -o Refés el teclat.press (ctrlKey); Keyboard.print ('y'); completePress (codi); trencar; case 30020: // | --o History Keyboard.press (shiftKey); Keyboard.print ('y'); completePress (codi); trencar; cas 230: // - o | Desa Keyboard.press (ctrlKey); Keyboard.print ('s'); completePress (codi); trencar; case 3200: // - | o- Quick-p.webp
int buttonCode = 0;
for (int i = 0; i <BUTTON_NUM; ++ i) {botons = buttonStateUpdate (botons ); buttonCode + = getButtonStateCode (botons ); }
if (ButtonCode! = 0) {
Serial.print ("codi de botó:"); Serial.println (buttonCode); }
doAction (buttonCode);
// posa el codi principal aquí, per executar-lo repetidament: // per (int i = botons [0]; i <sizeof (botons) / sizeof (botons [0]) + botons [0]; ++ i) {/ / // if (readButton (i)) {// doAction (i); //} //}
if (getCodeByButton (buttonCode, 0)! = 2)
Keyboard.releaseAll ();
retard (DELAY);
}
No hi ha molt a dir sobre la lògica, ja que és similar a la del meu darrer controlador, amb dues diferències notables:
- Els botons són estructures amb les seves pròpies màquines d'estat
- Els estats es sumen junts per crear un codi que determina l'acció
El principi és similar al canvi de bits, però com que els botons tenen diversos estats i no es poden representar simplement amb un binari, es multipliquen per potències de deu. A continuació, afegeixo tots els estats del botó en un sol número i el passo a la instrucció doAction () switch, on he posat tots els codis de dreceres.
Com podeu veure, no he mapat totes les combinacions possibles. Només he afegit algunes de les meves dreceres preferides, deixo a vosaltres que ompliu la resta de la manera que millor cregueu convenient;)
Pas 3: la carcassa
Vaig utilitzar una impressora 3D per a la carcassa. Com podeu veure, el disseny té alguns defectes i he tingut a MacGyver una manera de tancar-lo. Per tant, encara no publicaré el fitxer model.
Els botons s’enganxen en calent als "bancs" per mantenir els taps al seu lloc. Els polsadors suaus són especialment bons per això, així que assegureu-vos d’obtenir alguns d’aquests si teniu previst fer un cas similar al meu.
A més, suggereixo afegir una mica de pes dins de la caixa, ja que és molt lleuger. Els grams addicionals faran que la seva celebració se senti més natural.
Soldeu-ho tot tal com es mostra i connecteu el cable USB i tot hauria d’encaixar al seu lloc (amb l’ajut d’alguna cola).
Pas 4: Resultat i possibles millores
Aquí el teniu! Un controlador de mà que podeu utilitzar per accedir a totes les dreceres importants amb una sola mà.
Es necessita una mica de memòria muscular, però és molt versàtil.
Per descomptat, no és perfecte i ara mateix estic pensant en algunes maneres de millorar-lo. A part de millorar la carcassa i afegir dreceres, crec que seria interessant donar suport a diverses aplicacions amb dreceres diferents. Estic pensant en tenir una combinació de botons per canviar entre esquemes de control, com prémer 4 botons al mateix temps per canviar entre una biblioteca de dreceres de Photoshop a una feta a mida per a Maya.
Només algunes idees.
Gràcies per llegir, fins a la propera!
Recomanat:
Teclat de drecera Arduino (AutoCAD): 3 passos
Teclat de drecera d'Arduino (AutoCAD): Hola a tots, després de navegar durant moltes hores i dissenyar moltes coses interessants, finalment vaig aconseguir construir alguna cosa. Per tant, prepareu-vos per la meva primera instrucció! Passo moltes de les meves hores, tant professionalment com per diversió, fent gargots
Creix més enciam en menys espai o Creix enciam a l’espai, (més o menys) .: 10 passos
Cultivar més enciam en menys espai o … Cultivar enciam a l’espai, (més o menys): es tracta d’una presentació professional al Concurs de fabricants de Growing Beyond Earth, enviat a través d’Instrumentsables. No podia estar més emocionat de dissenyar per a la producció de cultius espacials i publicar el meu primer Instructable. Per començar, el concurs ens va demanar que
Registre d'ECG d'alta velocitat o altres dades, de manera contínua durant més d'un mes: 6 passos
Registre d’ECG d’alta velocitat o altres dades, durant més d’un mes contínuament: aquest projecte es va desenvolupar per donar suport a un equip d’investigació mèdica de la universitat que necessitava un dispositiu portàtil que pogués registrar 2 x senyals d’ECG a 1000 mostres / segon cadascuna (2 K de mostres / segon en total) contínuament durant 30 dies, per tal de detectar arítmies. El projecte presenta
Quadre de drecera per a portàtils: 3 passos (amb imatges)
Quadre de drecera per a ordinadors portàtils: Materials: node MCU esp8266 Tauler de pa interruptors de botó 5x 6mm ⅛ ” full de fusta contraxapada 3mm Full de plàstic acrílic 11x cables Fil soldador + soldador Tallador làser Cola calenta Cola de fusta Trepant de fusta
Arduino més barat -- Arduino més petit -- Arduino Pro Mini -- Programació -- Arduino Neno: 6 passos (amb imatges)
Arduino més barat || Arduino més petit || Arduino Pro Mini || Programació || Arduino Neno: …………………………. SUBSCRIU-SE Al meu canal de YouTube per obtenir més vídeos ……. Aquest projecte tracta sobre com connectar un arduino més petit i barat de la història. L’arduino més petit i barat és arduino pro mini. És similar a arduino