Innehållsförteckning:

Programmerbar knappsats: 5 steg (med bilder)
Programmerbar knappsats: 5 steg (med bilder)

Video: Programmerbar knappsats: 5 steg (med bilder)

Video: Programmerbar knappsats: 5 steg (med bilder)
Video: 💦Blackview BV9200 ЧЕСТНЫЙ ОБЗОР ПРОТИВОУДАРНОГО 2024, Juli
Anonim
Programmerbar knappsats
Programmerbar knappsats
Programmerbar knappsats
Programmerbar knappsats

I det här projektet kommer jag att visa hur du gör relativt enkla och billiga programmerbara knappsatser för att kartlägga dina mest använda kortkommandon, applikationer och mer.

Denna knappsats identifieras som tangentbord i alla större operativsystem, inga ytterligare drivrutiner behövs.

Tillbehör

  • Roterande pulsgivare.
  • Massor av (beroende på dina behov) tryckknappar.
  • Arduino Pro Micro, Arduino Leonardo eller andra dev -kort med Atmega32U4 MCU.
  • Tråd, löd, lödkolv etc.
  • (Valfritt) Någon tung bas för att knappsatsen inte ska glida, jag använder en gammal 3,5 "hårddisk

Steg 1: Elektrisk krets

Elektrisk krets
Elektrisk krets

Jag valde att använda Arduino Pro Micro dev -kort med Atmega32U4 MCU som har 18 användbara digitala stift.

Stiften för att ansluta tryckknappar och vridkodare valdes utan särskild ordning i åtanke, men några saker bör noteras:

  1. Alla digitala lässtabila stift har interna pull-ups som gör det möjligt att mildra externa neddragningsmotstånd. Naturligtvis bör koden uppdateras i enlighet därmed, eftersom den förväntar sig att stiftets tillstånd går från lågt till högt när tryckknappar trycks in.
  2. I biblioteksexempel noterade biblioteksexempel att kodarens bästa prestanda uppnås när båda stiften är anslutna till MCU -avbrytbara stift. De flesta analoga stift på Atmega32U4 har inte avbrottsfunktion.
  3. Exakta neddragningsmotståndsvärden spelar ingen roll, allt från 1 kΩ till 100 kΩ kommer att fungera bra. Större motståndsvärden tillåter mindre effektförlust men resulterar i långsammare stiftrespons på spänningsförändringar. Välj bara vilket värdemotstånd du har mest.
  4. Mekaniska kodare är inte de mest pålitliga sakerna på grund av kontaktslitage och studs. Därför behövs en bra avstötningslösning. Mina valda kondensatorvärden och fördröjningstider i koden ger förmodligen inte de bästa resultaten för dig. Så lite experiment behövs. Eller byt till något som optisk kodare, men priset är betydligt högre.

Steg 2: Montering

hopsättning
hopsättning
hopsättning
hopsättning
hopsättning
hopsättning
hopsättning
hopsättning

Jag ville göra knappsatsen så ren som möjligt, så jag lödde alla komponenter på baksidan av prototypkortet. Jag tänkte att knappsatsen skulle vara mer ergonomisk om den användes förhöjd i liten vinkel. Det är därför jag lödde Arduino Pro Micro på separat kort och kopplade alla digitala stift med tråd till tryckknappar. Det är mer bekvämt att ansluta USB -kabel på det sättet.

Jag hittade en gammal 3,5 hårddisk att använda som bas för knappsatsen, den är ganska tung och förhindrar att formen glider över skrivbordet vid användning (antisladdkuddar hjälper också). Den har också praktiska 3 mm skruvhål i vilka jag skruvade mässingsavstånd och fixade brädan i liten vinkel.

Steg 3: Programmering

Koden är skriven med Arduino IDE. Du måste installera två bibliotek:

  • Encoder av Paul Stoffregen
  • Tangentbord från Arduino

För att kompilera för Atmega32U4 måste du också installera Arduino Pro Micro -kortfil, Sparkfun har bra handledning hur du gör det.

En sak att notera i förväg är att vara försiktig så att du inte lämnar "tangenterna intryckta" i din kod. Detta hände mig och MCU spammade ständigt någon tangentkombination. Det enda sättet jag är medveten om hur jag åtgärdar detta är att bränna om startladdaren till MCU. Om du kommer att sluta som jag, kan du följa den här guiden för att bränna boot-loader, du behöver ett annat arduino-kort för att använda som programmerare.

I huvudslingan läser MCU först varje tryckknappsläge, om tillståndsförändring från LÅG till HÖG upptäcks, körs funktionen tangentbordskort (i). Variabel i är ett ID för den tryckta knappen, det totala tryckknappnumret definieras av ALL_BUTTONS (i mitt fall 15). När den körs skickar keyboard_shortcut (i) CTRL+SHIFT och sedan en bokstav som mappas till knapp-id: 1-> A, 2-> B, 3-> C etc. Vissa kombinationer som CTRL+SHIFT+N utelämnas eftersom det är redan används i Windows10 som standard (i det här fallet för att skapa en ny mapp). Här är listan över alla standardgenvägar i Windows. Efter kort fördröjning sänder MCU signal för att släppa alla tangenter och funktionen går tillbaka till huvudslingan.

När alla knappar har kontrollerats kontrollerar MCU om roterande kodarposition ändrats och om den gör det, utförs keyboard_shortcut (i) med unikt id.

Encoder -knapptryckning inverterar encoderButtonFlag boolean variabel. När kodare roteras skickas olika genvägar till PC, beroende på rotationsriktning och encoderButtonFlag -värde.

Om debugFlag satt till 1 debugmeddelanden skickas via UART till seriell bildskärm.

Steg 4: Konfigurera genvägar

Konfigurera genvägar
Konfigurera genvägar
Konfigurera genvägar
Konfigurera genvägar

Vad varje genväg gör är också upp till dig, vi har alla olika preferenser. Jag kommer att ge vilka genvägar jag konfigurerade för mig själv som ett exempel. Jag använder Linux Mint 19.3 med xfce4 desktop manager, så mina exempel innebär främst bash -skript, men jag kommer också att visa några grundläggande exempel för Windows10.

På den första bilden kan du se vilka skript jag mappade till vilka genvägar. Det är gjort från xfce -inställningsmenyn, processen för detta är rakt fram. Du kan hitta dessa skript i mitt GitHub -arkiv

Mindre 6 tryckknappar längst ner är för att starta applikationer som webbläsare eller filhanterare, några av dessa applikationer kallas från start_only_one_app.sh -skriptet, som får alla startade applikationsnamn och söker efter program du vill starta. Om applikationsfönstret redan finns blir det fokuserat, annars startas en ny instans av en applikation.

Andra skript:

  • 2nd_display_control.sh - kopplar till/från andra bildskärmen.
  • moon_lamp.sh - slår på/stänger av min Moon Lamp.
  • pc_load.sh - skapar meddelandebubbla med aktuell CPU och GPU -användning och temperaturer.
  • shutdown.sh - initierar PC -avstängning med 1 minuts fördröjning och skapar meddelandebubbla där återstående tid visas.
  • spec_vpn.sh - ansluter till en specifik OpenVPN -server eller om anslutningen redan finns kopplas den från servern.
  • shortcut_controll.sh - tar kommando (plus, minus, flik, stäng) som argument, upptäcker vilket fönster som nu är fokuserat och om specifikt program hittas aktivt utför kontrollåtgärd. Till exempel för att öppna ny flik i sublim textredigerare är standardgenvägen "CTRL+N" och i xfce terminal - "CTRL+T", så detta skript tillåter att öppna ny flik i sublim och terminal med samma tryckknapp.

Den första funktionen hos den roterande kodaren är att styra volymen, den andra funktionen är att styra aktiv fönsterszoom via shortcut_controll.sh.

För Windows OS kan du mappa genvägar till applikationer via fönstret för programegenskaper som visas på den andra bilden. För allt annat vill du använda AutoHotkey. Det är automatiseringsskriptspråk för Windows.

Några enkla exempel på AHK -syntax:

;Volymkontroll

^+t:: Skicka {Volume_Up}

lämna tillbaka

^+v:: Skicka {Volume_Down}

lämna tillbaka

; Stäng aktivt fönster

^+h:: WinGetTitle, titel, A

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

lämna tillbaka

;Stäng av PC

^+b:: Kör avstängning /s

Steg 5: Förbättringar

Förbättringar
Förbättringar

Några möjliga förbättringar:

  • Tryckknappar av bättre kvalitet.
  • Prototyp PCB flexar ganska mycket när knapparna trycks in.
  • RGB -belysning för att ändra färg beroende på vilken funktion roterande givare är inställd på.
  • Fler knappar (använd IO expander IC).
  • Bättre roterande kodare (eller bättre avstängningslösning).

Rekommenderad: