Cuprins:

Tastatură programabilă: 5 pași (cu imagini)
Tastatură programabilă: 5 pași (cu imagini)

Video: Tastatură programabilă: 5 pași (cu imagini)

Video: Tastatură programabilă: 5 pași (cu imagini)
Video: 32 de combinații secrete pe tastatura ta 2024, Iulie
Anonim
Tastatură programabilă
Tastatură programabilă
Tastatură programabilă
Tastatură programabilă

În acest proiect voi arăta cum să realizez o tastatură programabilă relativ simplă și ieftină pentru cartografierea celor mai utilizate comenzi rapide de la tastatură, aplicații și multe altele.

Această tastatură este detectată ca tastatură în toate sistemele de operare majore, nu este nevoie de drivere suplimentare.

Provizii

  • Rotativ.
  • O mulțime de butoane (depinde de nevoile dvs.).
  • Arduino Pro Micro, Arduino Leonardo sau orice altă placă dev cu MCU Atmega32U4.
  • Sârmă, lipit, lipit etc.
  • (Opțional) O bază grea pentru a împiedica alunecarea tastaturii, folosesc un hard disk vechi de 3,5"

Pasul 1: Circuit electric

Circuit electric
Circuit electric

Am ales să folosesc placa de dezvoltare Arduino Pro Micro cu Atmega32U4 MCU care are 18 pini digitali utilizabili.

Pinii pentru conectarea butoanelor și a codificatorului rotativ au fost selectați fără a avea în vedere o anumită ordine, dar unele lucruri ar trebui menționate:

  1. Toți pinii cu capacitate de citire digitală au extrageri interne care permit atenuarea rezistențelor extragere externe. Desigur, codul ar trebui să fie actualizat în consecință, deoarece se așteaptă ca starea pinului să treacă de la scăzut la înalt când sunt apăsate butoanele.
  2. În exemplul bibliotecii encoder.h, s-a observat că cea mai bună performanță a codificatorului este atinsă atunci când ambii pini conectați la MCU întrerup pinii capabili. Majoritatea pinilor analogici ai Atmega32U4 nu au capacitate de întrerupere.
  3. Valorile exacte ale rezistenței de tragere nu contează prea mult, orice de la 1 kΩ la 100 kΩ va funcționa bine. Valorile de rezistență mai mari permit o disipare mai mică a puterii, dar rezultă un răspuns mai lent al pinului la schimbările de tensiune. Alegeți orice rezistență de valoare aveți cel mai mult.
  4. Codificatoarele mecanice nu sunt cele mai fiabile lucruri din cauza uzurii de contact și a respingerii. De aceea este nevoie de o soluție bună de dezbatere. Valorile condensatorului ales de mine și timpii de întârziere în cod probabil nu vă vor oferi cele mai bune rezultate. Deci este nevoie de un pic de experimentare. Sau treceți la ceva de genul codificatorului optic, dar prețul său este semnificativ mai mare.

Pasul 2: Asamblare

Asamblare
Asamblare
Asamblare
Asamblare
Asamblare
Asamblare
Asamblare
Asamblare

Am vrut să fac tastatura cât mai curată posibil, așa că am lipit toate componentele de pe spatele plăcii prototip. M-am gândit că tastatura ar fi mai ergonomică dacă ar fi folosită ridicată la unghi mic. De aceea am lipit Arduino Pro Micro pe o placă separată și am conectat toți pinii digitali cu fir pentru a apăsa butoanele. Este mai convenabil să conectați cablul USB în acest fel.

Am găsit un HDD vechi de 3,5 de utilizat ca bază pentru tastatură, este destul de greu și împiedică alunecarea formei plăcii pe birou atunci când funcționează (tampoanele antiderapante ajută și ele). a fixat placa la un unghi ușor.

Pasul 3: Programare

Codul este scris cu Arduino IDE. Va trebui să instalați 2 biblioteci:

  • Codificator de Paul Stoffregen
  • Tastatură de Arduino

Pentru a compila pentru Atmega32U4, trebuie să instalați și fișierul de placă Arduino Pro Micro, Sparkfun are un tutorial excelent despre cum să faceți acest lucru.

Un lucru de remarcat în avans este să aveți grijă să nu lăsați „tastele apăsate” în cod. Mi s-a întâmplat acest lucru și MCU spammează în mod constant o combinație de apăsare a tastelor. Singurul mod în care știu cum să remediez acest lucru este să re-ardeți încărcătorul de încărcare pe MCU. Dacă veți ajunge ca mine, puteți urma acest ghid pentru a arde boot-loader, veți avea nevoie de o altă placă arduino pentru a o folosi ca programator.

În bucla principală MCU citește mai întâi fiecare stare a butonului, dacă se detectează schimbarea stării de la LOW la HIGH, funcția keyboard_shortcut (i) este executată. Variabila i este un ID al butonului apăsat, numărul total al butonului este definit de ALL_BUTTONS (în cazul meu 15). Când este executat, keyboard_shortcut (i) trimite CTRL + SHIFT și apoi o literă care este mapată la butonul id: 1-> A, 2-> B, 3-> C etc. Unele combinații precum CTRL + SHIFT + N sunt omise deoarece este deja utilizat în Windows10 în mod implicit (în acest caz pentru a crea un folder nou). Iată lista tuturor comenzilor rapide Windows implicite. După o scurtă întârziere, MCU trimite semnal pentru a elibera toate tastele și funcția iese din nou în bucla principală.

După ce toate butoanele sunt verificate, MCU verifică dacă s-a schimbat poziția codificatorului rotativ și dacă se modifică, keyboard_shortcut (i) este executat cu un id unic.

Apăsați pe butonul codificatorului inversează variabila booleană encoderButtonFlag. Când codorul este rotit, o scurtătură diferită este trimisă către PC, în funcție de direcția de rotație și de valoarea codificatorului ButonFlag.

Dacă debugFlag setat la 1, mesajele de depanare sunt trimise prin UART către monitorul serial.

Pasul 4: Configurarea comenzilor rapide

Configurarea comenzilor rapide
Configurarea comenzilor rapide
Configurarea comenzilor rapide
Configurarea comenzilor rapide

Ceea ce face fiecare comandă rapidă este și tu, toate avem preferințe diferite. Voi furniza ce comenzi rapide am configurat pentru mine ca exemplu. Folosesc Linux Mint 19.3 cu xfce4 desktop manager, deci exemplele mele implică în principal scripturi bash, dar voi arăta și câteva exemple de bază pentru Windows10.

În prima imagine puteți vedea ce scripturi am mapat la ce comenzi rapide. Se face din meniul de setări xfce, procesul pentru aceasta este direct. Puteți găsi aceste scripturi în depozitul meu GitHub

Cele 6 butoane mai mici din partea de jos sunt pentru pornirea aplicațiilor precum browserul web sau managerul de fișiere, unele dintre aceste aplicații sunt apelate din scriptul start_only_one_app.sh, care obține toate numele aplicațiilor pornite și caută aplicația pe care doriți să o porniți. Dacă fereastra aplicației există deja, aceasta se concentrează, altfel se începe o nouă instanță a unei aplicații.

Alte scripturi:

  • 2nd_display_control.sh - pornește / oprește al doilea monitor.
  • moon_lamp.sh - pornește / oprește lampa Moon.
  • pc_load.sh - creează bule de notificare cu utilizarea și temperaturile curente ale procesorului și GPU-ului.
  • shutdown.sh - inițializează oprirea PC-ului cu o întârziere de 1 minut și creează bule de notificare în care este afișat timpul rămas.
  • spec_vpn.sh - se conectează la un server OpenVPN specific sau dacă conexiunea există deja, se deconectează de la server.
  • shortcut_controll.sh - preia comanda (plus, minus, tab, închidere) ca argument, detectează ce fereastră este acum focalizată și dacă aplicația specifică este găsită activă execută acțiunea de control. De exemplu, pentru a deschide o filă nouă în comanda rapidă implicită a editorului de text sublim este „CTRL + N” și în terminalul xfce - „CTRL + T”, deci acest script vă permite să deschideți filă nouă în sublim și terminal cu același buton.

Prima funcție a codificatorului rotativ este de a controla volumul, a doua funcție este de a controla zoomul activ al ferestrei prin shortcut_controll.sh.

Pentru sistemul de operare Windows puteți asocia comenzi rapide către aplicații prin fereastra de proprietăți a programului, așa cum se arată în imaginea a doua. Pentru orice altceva veți dori să utilizați AutoHotkey. Este un limbaj de scripturi de automatizare pentru Windows.

Câteva exemple simple de sintaxă AHK:

;Controlul volumului

^ + t:: Trimiteți {Volume_Up}

întoarcere

^ + v:: Trimiteți {Volume_Down}

întoarcere

; Închide fereastra activă

^ + h:: WinGetTitle, Titlu, A

PostMessage, 0x112, 0xF060,,,% Title%

întoarcere

;Stinge calculatorul

^ + b:: Executați oprire / s

Pasul 5: Îmbunătățiri

Îmbunătățiri
Îmbunătățiri

Câteva îmbunătățiri posibile:

  • Butoane de calitate mai bună.
  • Prototipul PCB se flexează destul de mult atunci când butoanele sunt apăsate.
  • Iluminarea RGB pentru a schimba culoarea în funcție de funcția codificatorului rotativ setat.
  • Mai multe butoane (utilizați IO expansor IC).
  • Un codificator rotativ mai bun (sau o soluție de descompunere mai bună).

Recomandat: