Indholdsfortegnelse:

Programmerbart tastatur: 5 trin (med billeder)
Programmerbart tastatur: 5 trin (med billeder)

Video: Programmerbart tastatur: 5 trin (med billeder)

Video: Programmerbart tastatur: 5 trin (med billeder)
Video: 🐍 Python 101: изучение основ Python для начинающих [ПОЛНЫЙ курс] 2024, November
Anonim
Programmerbart tastatur
Programmerbart tastatur
Programmerbart tastatur
Programmerbart tastatur

I dette projekt vil jeg vise, hvordan du laver relativt enkle og billige programmerbare tastaturer til kortlægning af dine mest brugte tastaturgenveje, applikationer og mere.

Dette tastatur registreres som tastatur i alle større operativsystemer, og der kræves ingen yderligere drivere.

Forbrugsvarer

  • Roterende encoder.
  • Masser af (afhænger af dine behov) trykknapper.
  • Arduino Pro Micro, Arduino Leonardo eller ethvert andet dev -bord med Atmega32U4 MCU.
  • Tråd, lodde, loddejern mv.
  • (Valgfrit) En tung base til at forhindre tastaturet i at glide, jeg bruger gammel 3,5 "HDD

Trin 1: Elektrisk kredsløb

Elektrisk kredsløb
Elektrisk kredsløb

Jeg valgte at bruge Arduino Pro Micro dev board med Atmega32U4 MCU som har 18 brugbare digitale pins.

Stifterne til at forbinde trykknapper og roterende encoder blev valgt uden nogen bestemt rækkefølge i tankerne, men nogle ting skal bemærkes:

  1. Alle stifter med digital læsning har interne pull-ups, som gør det muligt at afbøde eksterne pull-down modstande. Koden skal selvfølgelig opdateres i overensstemmelse hermed, fordi den forventer, at nålens tilstand går fra lav til høj, når der trykkes på trykknapper.
  2. I bibliotekseksempel bemærkede biblioteket, at encoderens bedste ydeevne nås, når begge stifter, der er forbundet til MCU, kan afbryde stifter. De fleste af analoge stifter af Atmega32U4 har ikke afbrydelse.
  3. Nøjagtige pull-down modstandsværdier betyder ikke meget, alt fra 1 kΩ til 100 kΩ vil fungere fint. Større modstandsværdier tillader mindre effekttab, men resulterer i langsommere benreaktion på spændingsændringer. Vælg bare den værdi modstand du har mest.
  4. Mekaniske encodere er ikke de mest pålidelige ting på grund af kontaktslitage og hoppende. Derfor er der brug for en god debouncing -løsning. Mine valgte kondensatorværdier og forsinkelsestider i kode giver sandsynligvis ikke de bedste resultater for dig. Så der er brug for en lille smule eksperimentering. Eller skift til noget som optisk encoder, men prisen er betydeligt højere.

Trin 2: Montering

montage
montage
montage
montage
montage
montage
montage
montage

Jeg ville gøre tastaturet så rent som muligt, så jeg loddet alle komponenter på bagsiden af prototypekortet. Jeg regnede med, at tastaturet ville være mere ergonomisk, hvis det blev brugt forhøjet i lille vinkel. Derfor lodde jeg Arduino Pro Micro på separat bord og tilsluttede alle digitale ben med ledning til trykknapper. Det er mere bekvemt at tilslutte USB -kabel på den måde.

Jeg fandt en gammel 3,5 HDD til at bruge som en base for tastaturet, den er ret tung og forhindrer, at tavlen glider hen over skrivebordet under betjening (skridsikre puder hjælper også). Den har også praktiske 3 mm skruehuller, hvor jeg skruede messingstandoffs og fikseret brættet i en lille vinkel.

Trin 3: Programmering

Koden er skrevet med Arduino IDE. Du skal installere 2 biblioteker:

  • Encoder af Paul Stoffregen
  • Tastatur fra Arduino

For at kompilere til Atmega32U4 skal du også installere Arduino Pro Micro -kortfil, Sparkfun har en god vejledning i, hvordan du gør det.

En ting at bemærke på forhånd er at være forsigtig med ikke at lade "taster trykkes" i din kode. Dette skete for mig, og MCU spammede konstant en tastetrykskombination. Den eneste måde, jeg er klar over, hvordan jeg løser dette, er at genbrænde boot-loader til MCU. Hvis du ender som mig, kan du følge denne vejledning for at brænde boot-loader, du skal bruge et andet arduino-kort til at bruge som programmerer.

I hovedsløjfe læser MCU først hver trykknapstilstand, hvis tilstandsændring fra LOW til HIGH registreres, udføres funktion keyboard_shortcut (i). Variabel i er et id for den trykte knap, det samlede trykknapnummer er defineret af ALL_BUTTONS (i mit tilfælde 15). Når den er udført, sender tastatur_shortcut (i) CTRL+SHIFT og derefter et bogstav, der knyttes til knap-id: 1-> A, 2-> B, 3-> C osv. Nogle kombinationer som CTRL+SHIFT+N udelades, fordi det er allerede brugt i Windows10 som standard (i dette tilfælde for at oprette en ny mappe). Her er listen over alle standardgenveje til Windows. Efter kort forsinkelse sender MCU signal om at slippe alle taster og funktionen forlader tilbage til hovedsløjfen.

Efter at alle knapper er markeret, kontrollerer MCU, om roterende encoderposition er ændret, og hvis den gør det, udføres keyboard_shortcut (i) med unikt id.

Encoder -tastetryk inverterer encoderButtonFlag boolsk variabel. Når encoder roteres, sendes en anden genvej til pc'en afhængigt af rotationsretning og encoderButtonFlag -værdi.

Hvis debugFlag indstillet til 1 debugmeddelelser sendes via UART til seriel monitor.

Trin 4: Konfiguration af genveje

Konfiguration af genveje
Konfiguration af genveje
Konfiguration af genveje
Konfiguration af genveje

Hvad hver genvej gør, er også op til dig, vi har alle forskellige præferencer. Jeg vil give de genveje, jeg konfigurerede til mig selv som et eksempel. Jeg bruger Linux Mint 19.3 med xfce4 desktop manager, så mine eksempler involverer hovedsageligt bash -scripts, men jeg vil også vise nogle grundlæggende eksempler til Windows10.

På det første billede kan du se, hvilke scripts jeg kortlagde til hvilke genveje. Det er gjort fra xfce -indstillingsmenuen, processen til dette er ligetil. Du kan finde disse scripts i mit GitHub -lager

Mindre 6 trykknapper i bunden er til start af applikationer som webbrowser eller filhåndtering, nogle af disse applikationer kaldes fra start_only_one_app.sh script, som får alle startede applikationsnavne og søgning efter applikationer, du vil starte. Hvis programvinduet allerede findes, bliver det fokuseret, ellers starter en ny forekomst af et program.

Andre scripts:

  • 2._display_control.sh - tænder/slukker for anden skærm.
  • moon_lamp.sh - tænder/slukker min Moon Lamp.
  • pc_load.sh - opretter notifikationsboble med nuværende CPU- og GPU -brug og temperaturer.
  • shutdown.sh - initialiserer pc -lukning med 1 minuts forsinkelse og opretter meddelelsesboble, hvor resterende tid vises.
  • spec_vpn.sh - opretter forbindelse til en specifik OpenVPN -server, eller hvis forbindelsen allerede findes, afbrydes forbindelsen til serveren.
  • shortcut_controll.sh - tager kommando (plus, minus, fane, luk) som argument, registrerer hvilket vindue der nu er fokuseret, og hvis et bestemt program findes aktivt, udfører kontrolhandling. For eksempel for at åbne ny fane i sublim tekst editor standardgenvej er "CTRL+N" og i xfce terminal - "CTRL+T", så dette script giver mulighed for at åbne ny fane i sublim og terminal med den samme trykknap.

Den første funktion af den roterende encoder er at styre lydstyrken, den anden funktion er at styre aktiv vindueszoom via shortcut_controll.sh.

For Windows OS kan du kortlægge genveje til applikationer via vinduet med programegenskaber som vist på det andet billede. Til alt andet vil du gerne bruge AutoHotkey. Det er automatiserings scriptsprog til Windows.

Nogle enkle eksempler på AHK -syntaks:

; Lydstyrkekontrol

^+t:: Send {Volume_Up}

Vend tilbage

^+v:: Send {Volume_Down}

Vend tilbage

; Luk aktivt vindue

^+h:: WinGetTitle, titel, A

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

Vend tilbage

; Luk pc

^+b:: Kør nedlukning /s

Trin 5: Forbedringer

Forbedringer
Forbedringer

Nogle mulige forbedringer:

  • Trykknapper i bedre kvalitet.
  • Prototype PCB bøjer ret meget, når der trykkes på knapper.
  • RGB -belysning for at ændre farve afhængigt af hvilken funktion roterende encoder er indstillet til.
  • Flere knapper (brug IO -ekspander IC).
  • Bedre roterende encoder (eller bedre debouncing -løsning).

Anbefalede: