Sommario:

Tastiera programmabile: 5 passaggi (con immagini)
Tastiera programmabile: 5 passaggi (con immagini)

Video: Tastiera programmabile: 5 passaggi (con immagini)

Video: Tastiera programmabile: 5 passaggi (con immagini)
Video: #5 Come usare la tastiera | Corso di Computer Base | Stagione 2017/18 | Daniele Castelletti 2024, Novembre
Anonim
Tastiera programmabile
Tastiera programmabile
Tastiera programmabile
Tastiera programmabile

In questo progetto mostrerò come realizzare una tastiera programmabile relativamente semplice ed economica per mappare le scorciatoie da tastiera, le applicazioni e altro ancora più utilizzate.

Questa tastiera viene rilevata come tastiera in tutti i principali sistemi operativi, non sono necessari driver aggiuntivi.

Forniture

  • Encoder rotativo.
  • Molti pulsanti (dipende dalle tue esigenze).
  • Arduino Pro Micro, Arduino Leonardo o qualsiasi altra scheda di sviluppo con MCU Atmega32U4.
  • Filo, saldatura, saldatore, ecc.
  • (Opzionale) Una base pesante per evitare che la tastiera scivoli, sto usando un vecchio HDD da 3,5"

Passaggio 1: circuito elettrico

Circuito elettrico
Circuito elettrico

Ho scelto di utilizzare la scheda di sviluppo Arduino Pro Micro con MCU Atmega32U4 che ha 18 pin digitali utilizzabili.

I pin per collegare i pulsanti e l'encoder rotativo sono stati selezionati senza un ordine particolare in mente, ma è necessario notare alcune cose:

  1. Tutti i pin con capacità di lettura digitale hanno pull-up interni che consentono di mitigare i resistori di pull-down esterni. Ovviamente il codice dovrebbe essere aggiornato di conseguenza, perché si aspetta che lo stato del pin vada da basso ad alto quando vengono premuti i pulsanti.
  2. Nell'esempio della libreria encoder.h si è notato che le migliori prestazioni dell'encoder vengono raggiunte quando entrambi i pin sono collegati ai pin in grado di interrompere l'MCU. La maggior parte dei pin analogici di Atmega32U4 non ha capacità di interruzione.
  3. I valori esatti del resistore pull-down non contano molto, qualsiasi cosa da 1 kΩ a 100 kΩ funzionerà bene. Valori di resistenza più grandi consentono una minore dissipazione di potenza, ma comportano una risposta dei pin più lenta alle variazioni di tensione. Basta scegliere qualsiasi resistore di valore che hai di più.
  4. Gli encoder meccanici non sono le cose più affidabili a causa dell'usura dei contatti e dei rimbalzi. Ecco perché è necessaria una buona soluzione antirimbalzo. I valori dei condensatori scelti e i tempi di ritardo nel codice probabilmente non forniranno i migliori risultati per te. Quindi è necessaria un po' di sperimentazione. Oppure passa a qualcosa come l'encoder ottico, ma il suo prezzo è significativamente più alto.

Passaggio 2: assemblaggio

Assemblea
Assemblea
Assemblea
Assemblea
Assemblea
Assemblea
Assemblea
Assemblea

Volevo rendere la tastiera più pulita possibile, quindi ho saldato tutti i componenti sul retro della scheda prototipo. Ho pensato che la tastiera sarebbe stata più ergonomica se fosse stata usata sollevata con una piccola angolazione. Ecco perché ho saldato Arduino Pro Micro su una scheda separata e ho collegato tutti i pin digitali con un filo ai pulsanti. È più comodo collegare il cavo USB in questo modo.

Ho trovato il vecchio HDD da 3,5 da utilizzare come base per la tastiera, è piuttosto pesante e impedisce alla scheda di scivolare sulla scrivania durante il funzionamento (anche i pad antiscivolo aiutano). Inoltre ha dei comodi fori per viti da 3 mm in cui ho avvitato i distanziatori in ottone e fissato la scheda con una leggera angolazione.

Passaggio 3: programmazione

Il codice è scritto con Arduino IDE. Dovrai installare 2 librerie:

  • Encoder di Paul Stoffregen
  • Tastiera di Arduino

Per compilare per Atmega32U4 devi anche installare il file della scheda Arduino Pro Micro, Sparkfun ha un ottimo tutorial su come farlo.

Una cosa da notare in anticipo è fare attenzione a non lasciare "tasti premuti" nel codice. Questo è successo a me e MCU ha costantemente inviato spam a una combinazione di tasti. L'unico modo in cui sono a conoscenza di come risolvere questo problema è rimasterizzare il bootloader su MCU. Se finirete come me, potete seguire questa guida per masterizzare bootloader, vi servirà un'altra scheda arduino da usare come programmatore.

Nel loop principale MCU legge prima lo stato di ogni pulsante, se viene rilevato un cambiamento di stato da LOW a HIGH, viene eseguita la funzione keyboard_shortcut(i). La variabile i è un id del pulsante premuto, il numero totale del pulsante è definito da ALL_BUTTONS (nel mio caso 15). Quando viene eseguito, keyboard_shortcut(i) invia CTRL+SHIFT e poi una lettera che viene mappata all'id del pulsante: 1->A, 2->B, 3->C ecc. Alcune combinazioni come CTRL+SHIFT+N vengono omesse perché è già utilizzato in Windows10 per impostazione predefinita (in questo caso per creare una nuova cartella). Ecco l'elenco di tutte le scorciatoie di Windows predefinite. Dopo un breve ritardo, l'MCU invia il segnale per rilasciare tutti i tasti e la funzione torna al loop principale.

Dopo che tutti i pulsanti sono stati controllati, MCU controlla se la posizione dell'encoder rotativo è cambiata e, in caso affermativo, keyboard_shortcut(i) viene eseguito con un ID univoco.

La pressione del pulsante dell'encoder inverte la variabile booleana encoderButtonFlag. Quando l'encoder viene ruotato, al PC viene inviata una scorciatoia diversa, a seconda della direzione di rotazione e del valore dell'encoderButtonFlag.

Se debugFlag è impostato su 1, i messaggi di debug vengono inviati tramite UART al monitor seriale.

Passaggio 4: configurazione delle scorciatoie

Configurazione delle scorciatoie
Configurazione delle scorciatoie
Configurazione delle scorciatoie
Configurazione delle scorciatoie

Quello che fa ogni scorciatoia dipende anche da te, abbiamo tutti preferenze diverse. Fornirò quali scorciatoie ho configurato per me stesso come esempio. Sto usando Linux Mint 19.3 con xfce4 desktop manager, quindi i miei esempi riguardano principalmente script bash, ma mostrerò anche alcuni esempi di base per Windows10.

Nella prima immagine puoi vedere quali script ho mappato a quali scorciatoie. È fatto dal menu delle impostazioni di xfce, il processo per questo è semplice. Puoi trovare questi script nel mio repository GitHub

I 6 pulsanti più piccoli in basso servono per avviare applicazioni come browser Web o file manager, alcune di queste applicazioni vengono chiamate dallo script start_only_one_app.sh, che ottiene tutti i nomi delle applicazioni avviate e cerca l'applicazione che si desidera avviare. Se la finestra dell'applicazione esiste già, viene focalizzata, altrimenti viene avviata una nuova istanza di un'applicazione.

Altri script:

  • 2nd_display_control.sh - attiva/disattiva il secondo monitor.
  • moon_lamp.sh - accende/spegne la mia lampada lunare.
  • pc_load.sh: crea una bolla di notifica con l'utilizzo e le temperature correnti di CPU e GPU.
  • shutdown.sh - inizializza lo spegnimento del PC con 1 minuto di ritardo e crea un fumetto di notifica in cui viene visualizzato il tempo rimanente.
  • spec_vpn.sh - si connette a un server OpenVPN specifico o se la connessione esiste già, si disconnette dal server.
  • scorciatoia_controll.sh - prende il comando (più, meno, tab, chiudi) come argomento, rileva quale finestra è ora focalizzata e se viene trovata un'applicazione specifica attiva esegue l'azione di controllo. Ad esempio, per aprire una nuova scheda nell'editor di testo sublime, la scorciatoia predefinita è "CTRL+N" e nel terminale xfce - "CTRL+T", quindi questo script consente di aprire una nuova scheda in sublime e terminale con lo stesso pulsante.

La prima funzione del codificatore rotante è controllare il volume, la seconda funzione è controllare lo zoom della finestra attiva tramite scorciatoia_controll.sh.

Per il sistema operativo Windows è possibile mappare i collegamenti alle applicazioni tramite la finestra delle proprietà del programma come mostrato nella seconda immagine. Per qualsiasi altra cosa vorrai usare AutoHotkey. È il linguaggio di scripting di automazione per Windows.

Alcuni semplici esempi di sintassi AHK:

;Controllo del volume

^+t::Invia {Volume_Up}

Restituzione

^+v:: Invia {Volume_Giù}

Restituzione

;Chiudi finestra attiva

^+h::WinGetTitle, Titolo, A

PostMessage, 0x112, 0xF060,,, %Titolo%

Restituzione

;Spegni il PC

^+b::Esegui spegnimento /s

Passaggio 5: miglioramenti

Miglioramenti
Miglioramenti

Alcuni possibili miglioramenti:

  • Pulsanti di migliore qualità.
  • Il PCB del prototipo si flette parecchio quando vengono premuti i pulsanti.
  • Illuminazione RGB per cambiare colore a seconda della funzione su cui è impostato il codificatore rotante.
  • Più pulsanti (usa l'IC di espansione IO).
  • Encoder rotativo migliore (o soluzione antirimbalzo migliore).

Consigliato: