Inhoudsopgave:

Programmeerbaar toetsenbord: 5 stappen (met afbeeldingen)
Programmeerbaar toetsenbord: 5 stappen (met afbeeldingen)

Video: Programmeerbaar toetsenbord: 5 stappen (met afbeeldingen)

Video: Programmeerbaar toetsenbord: 5 stappen (met afbeeldingen)
Video: Dit ging niet zoals ik had verwacht..šŸ˜³ 2024, Juli-
Anonim
Programmeerbaar toetsenbord
Programmeerbaar toetsenbord
Programmeerbaar toetsenbord
Programmeerbaar toetsenbord

In dit project laat ik zien hoe je een relatief eenvoudig en goedkoop programmeerbaar toetsenbord kunt maken voor het in kaart brengen van je meest gebruikte sneltoetsen, applicaties en meer.

Dit toetsenbord wordt gedetecteerd als toetsenbord in alle belangrijke besturingssystemen, er zijn geen extra stuurprogramma's nodig.

Benodigdheden

  • Roterende encoder.
  • Veel (afhankelijk van uw behoeften) drukknoppen.
  • Arduino Pro Micro, Arduino Leonardo of een ander ontwikkelbord met Atmega32U4 MCU.
  • Draad, soldeer, soldeerbout, enz.
  • (Optioneel) Een zware basis om te voorkomen dat het toetsenbord verschuift, ik gebruik een oude 3,5-inch HDD

Stap 1: Elektrisch circuit

Electronisch circuit
Electronisch circuit

Ik koos ervoor om het Arduino Pro Micro-ontwikkelbord te gebruiken met Atmega32U4 MCU met 18 bruikbare digitale pinnen.

De pinnen om drukknoppen en roterende encoder aan te sluiten, zijn geselecteerd zonder een bepaalde volgorde in gedachten, maar er moeten enkele dingen worden opgemerkt:

  1. Alle digitale leesbare pinnen hebben interne pull-ups die het mogelijk maken om externe pull-down-weerstanden te verminderen. Natuurlijk moet de code dienovereenkomstig worden bijgewerkt, omdat het verwacht dat de status van de pin van laag naar hoog gaat wanneer drukknoppen worden ingedrukt.
  2. In het voorbeeld van de encoder.h-bibliotheek werd opgemerkt dat de beste prestaties van de encoder worden bereikt wanneer beide pinnen zijn aangesloten op MCU-pinnen die geschikt zijn voor onderbrekingen. De meeste analoge pinnen van Atmega32U4 hebben geen interruptmogelijkheid.
  3. Exacte pull-down weerstandswaarden doen er niet veel toe, alles van 1 kĪ© tot 100 kĪ© zal prima werken. Grotere weerstandswaarden maken een kleinere vermogensdissipatie mogelijk, maar resulteren in een langzamere pinrespons op spanningsveranderingen. Kies gewoon de weerstanden met de meeste waarde.
  4. Mechanische encoders zijn niet de meest betrouwbare dingen vanwege contactslijtage en stuiteren. Daarom is een goede debouncing-oplossing nodig. Mijn gekozen condensatorwaarden en vertragingstijden in code zullen waarschijnlijk niet de beste resultaten voor u opleveren. Dus een beetje experimenteren is nodig. Of schakel over naar zoiets als optische encoder, maar de prijs is aanzienlijk hoger.

Stap 2: Montage

samenkomst
samenkomst
samenkomst
samenkomst
samenkomst
samenkomst
samenkomst
samenkomst

Ik wilde het toetsenbord er zo schoon mogelijk uit laten zien, dus heb ik alle componenten op de achterkant van het prototypebord gesoldeerd. Ik dacht dat het toetsenbord ergonomischer zou zijn als het onder een kleine hoek omhoog zou worden gebruikt. Daarom heb ik Arduino Pro Micro op een apart bord gesoldeerd en alle digitale pinnen met draad aangesloten op drukknoppen. Het is handiger om op die manier een USB-kabel aan te sluiten.

Ik vond een oude 3,5-inch HDD om te gebruiken als basis voor het toetsenbord, hij is vrij zwaar en voorkomt dat de kaart tijdens het gebruik over het bureau glijdt (antislip-pads helpen ook). Hij heeft ook handige 3 mm-schroefgaten waarin ik messing afstandhouders heb geschroefd en bevestigde het bord in een kleine hoek.

Stap 3: Programmeren

Code is geschreven met Arduino IDE. U moet 2 bibliotheken installeren:

  • Encoder door Paul Stoffregen
  • Toetsenbord door Arduino

Om te compileren voor Atmega32U4 moet je ook het Arduino Pro Micro-bordbestand installeren, Sparkfun heeft een geweldige tutorial om dat te doen.

Een ding om van tevoren op te merken is om ervoor te zorgen dat u geen "toetsen ingedrukt" in uw code laat. Dit overkwam mij en MCU spamde constant een toetscombinatie. De enige manier waarop ik weet hoe ik dit kan oplossen, is door de bootloader opnieuw naar MCU te branden. Als je net als ik eindigt, kun je deze gids volgen om de bootloader te branden, je hebt een ander arduino-bord nodig om als programmeur te gebruiken.

In de hoofdlus leest MCU eerst de status van elke drukknop. Als de statusverandering van LAAG naar HOOG wordt gedetecteerd, wordt de functie keyboard_shortcut(i) uitgevoerd. Variabele i is een id van de ingedrukte knop, het totale aantal drukknoppen wordt bepaald door ALL_BUTTONS (in mijn geval 15). Wanneer uitgevoerd, stuurt keyboard_shortcut(i) CTRL+SHIFT en vervolgens een letter die is toegewezen aan knop-id: 1->A, 2->B, 3->C enz. Sommige combinaties zoals CTRL+SHIFT+N worden weggelaten omdat het standaard al gebruikt in Windows10 (in dit geval om een nieuwe map aan te maken). Hier is de lijst met alle standaard Windows-snelkoppelingen. Na een korte vertraging stuurt de MCU een signaal om alle toetsen los te laten en keert de functie terug naar de hoofdlus.

Nadat alle knoppen zijn aangevinkt, controleert MCU of de positie van de roterende encoder is gewijzigd en als dit het geval is, wordt keyboard_shortcut(i) uitgevoerd met een unieke id.

Encoder-knop indrukken keert encoderButtonFlag Boolean-variabele om. Wanneer de encoder wordt gedraaid, wordt er een andere snelkoppeling naar de pc gestuurd, afhankelijk van de draairichting en de encoderButtonFlag-waarde.

Als debugFlag is ingesteld op 1 worden debug-berichten via UART naar seriƫle monitor verzonden.

Stap 4: Snelkoppelingen configureren

Snelkoppelingen configureren
Snelkoppelingen configureren
Snelkoppelingen configureren
Snelkoppelingen configureren

Wat elke snelkoppeling doet, is aan jou, we hebben allemaal verschillende voorkeuren. Ik zal als voorbeeld geven welke snelkoppelingen ik voor mezelf heb geconfigureerd. Ik gebruik Linux Mint 19.3 met xfce4 desktop manager, dus mijn voorbeelden betreffen voornamelijk bash-scripts, maar ik zal ook enkele basisvoorbeelden voor Windows10 laten zien.

In de eerste afbeelding kun je zien welke scripts ik heb toegewezen aan welke snelkoppelingen. Het wordt gedaan vanuit het xfce-instellingenmenu, het proces hiervoor is eenvoudig. Je kunt deze scripts vinden in mijn GitHub-repository

Kleinere 6 drukknoppen onderaan zijn voor het starten van applicaties zoals een webbrowser of bestandsbeheer, sommige van deze applicaties worden aangeroepen vanuit het start_only_one_app.sh-script, dat alle gestarte applicatienamen krijgt en zoekt naar de applicatie die u wilt starten. Als het toepassingsvenster al bestaat, wordt het gefocust, anders wordt een nieuw exemplaar van een toepassing gestart.

Andere scripts:

  • 2nd_display_control.sh - schakelt de tweede monitor AAN/UIT.
  • moon_lamp.sh - schakelt mijn maanlamp AAN/UIT.
  • pc_load.sh - maakt een meldingsballon met het huidige CPU- en GPU-gebruik en de temperaturen.
  • shutdown.sh - initialiseert het afsluiten van de pc met een vertraging van 1 minuut en creĆ«ert een meldingsballon waarin de resterende tijd wordt weergegeven.
  • spec_vpn.sh - maakt verbinding met een specifieke OpenVPN-server of als de verbinding al bestaat, verbreekt de verbinding met de server.
  • shortcut_controll.sh - neemt commando (plus, min, tab, close) als argument, detecteert welk venster nu gefocust is en als een specifieke applicatie actief wordt gevonden, voert het een controleactie uit. Om bijvoorbeeld een nieuw tabblad in sublieme teksteditor te openen, is de standaardsnelkoppeling "CTRL+N" en in xfce-terminal - "CTRL+T", dus dit script maakt het mogelijk om een nieuw tabblad in subliem en terminal te openen met dezelfde drukknop.

De eerste functie van de roterende encoder is om het volume te regelen, de tweede functie is om de actieve vensterzoom te regelen via shortcut_controll.sh.

Voor Windows OS kunt u snelkoppelingen naar toepassingen toewijzen via het programma-eigenschappenvenster, zoals weergegeven in de tweede afbeelding. Voor al het andere wilt u AutoHotkey gebruiken. Het is de automatiseringsscripttaal voor Windows.

Enkele eenvoudige voorbeelden van AHK-syntaxis:

;Volumeregeling

^+t::Verstuur {Volume_Up}

opbrengst

^+v:: Stuur {Volume_Down}

opbrengst

;Sluit actief venster

^+h::WinGetTitle, Titel, A

PostMessage, 0x112, 0xF060,,, %Titel%

opbrengst

;PC afsluiten

^+b::Uitschakelen /s uitvoeren

Stap 5: Verbeteringen

Verbeteringen
Verbeteringen

Enkele mogelijke verbeteringen:

  • Drukknoppen van betere kwaliteit.
  • Prototype PCB buigt behoorlijk door als er op knoppen wordt gedrukt.
  • RGB-verlichting om van kleur te veranderen afhankelijk van op welke functie de encoder is ingesteld.
  • Meer knoppen (gebruik IO expander IC).
  • Betere roterende encoder (of betere debouncing-oplossing).

Aanbevolen: