Spisu treści:

Programowalna klawiatura: 5 kroków (ze zdjęciami)
Programowalna klawiatura: 5 kroków (ze zdjęciami)

Wideo: Programowalna klawiatura: 5 kroków (ze zdjęciami)

Wideo: Programowalna klawiatura: 5 kroków (ze zdjęciami)
Wideo: Jak zrobić customową klawiaturę? ⌨️ 2024, Lipiec
Anonim
Programowalna klawiatura
Programowalna klawiatura
Programowalna klawiatura
Programowalna klawiatura

W tym projekcie pokażę, jak zrobić stosunkowo prostą i niedrogą programowalną klawiaturę do mapowania najczęściej używanych skrótów klawiaturowych, aplikacji i nie tylko.

Ta klawiatura jest wykrywana jako klawiatura we wszystkich głównych systemach operacyjnych, nie są potrzebne żadne dodatkowe sterowniki.

Kieszonkowe dzieci

  • Enkoder obrotowy.
  • Wiele (w zależności od potrzeb) przycisków.
  • Arduino Pro Micro, Arduino Leonardo lub dowolna inna płytka deweloperska z mikrokontrolerem Atmega32U4.
  • Drut, lut, lutownica itp.
  • (Opcjonalnie) Ciężka podstawa zapobiegająca przesuwaniu się klawiatury, używam starego dysku twardego 3,5"

Krok 1: Obwód elektryczny

Obwód elektryczny
Obwód elektryczny

Wybrałem płytkę rozwojową Arduino Pro Micro z mikrokontrolerem Atmega32U4, który ma 18 użytecznych cyfrowych pinów.

Piny do podłączenia przycisków i enkodera obrotowego zostały wybrane bez szczególnej kolejności, ale należy zwrócić uwagę na kilka rzeczy:

  1. Wszystkie piny z możliwością odczytu cyfrowego mają wewnętrzne pull-upy, co pozwala złagodzić zewnętrzne rezystory pull-down. Oczywiście kod powinien zostać odpowiednio zaktualizowany, ponieważ oczekuje, że stan pinu zmieni się z niskiego na wysoki po naciśnięciu przycisków.
  2. W przykładzie biblioteki encoder.h zauważono, że najlepszą wydajność enkodera uzyskuje się, gdy oba piny podłączone do pinów MCU mogących przerywać. Większość pinów analogowych Atmega32U4 nie ma możliwości przerwania.
  3. Dokładne wartości rezystorów pull-down nie mają większego znaczenia, wszystko od 1 kΩ do 100 kΩ będzie działać dobrze. Większe wartości rezystancji pozwalają na mniejsze rozpraszanie mocy, ale powodują wolniejszą reakcję pinów na zmiany napięcia. Po prostu wybierz rezystory o dowolnej wartości, które masz najwięcej.
  4. Enkodery mechaniczne nie są najbardziej niezawodne ze względu na zużycie styków i odbijanie. Dlatego potrzebne jest dobre rozwiązanie do usuwania odbić. Wybrane przeze mnie wartości kondensatorów i czasy opóźnień w kodzie prawdopodobnie nie zapewnią ci najlepszych wyników. Potrzeba więc trochę eksperymentów. Albo przejść na coś w rodzaju enkodera optycznego, ale jego cena jest znacznie wyższa.

Krok 2: Montaż

montaż
montaż
montaż
montaż
montaż
montaż
montaż
montaż

Chciałem, aby klawiatura wyglądała tak czysto, jak to tylko możliwe, dlatego wszystkie elementy przylutowałem z tyłu płytki prototypowej. Pomyślałem, że klawiatura byłaby bardziej ergonomiczna, gdyby była używana pod niewielkim kątem. Dlatego przylutowałem Arduino Pro Micro na osobnej płytce i podłączyłem wszystkie piny cyfrowe przewodem do przycisków. W ten sposób wygodniej jest podłączyć kabel USB.

Znalazłem stary 3,5-calowy dysk twardy do użycia jako podstawa pod klawiaturę, jest dość ciężki i zapobiega przesuwaniu się płyty po biurku podczas pracy (pomagają też podkładki antypoślizgowe). naprawiono deskę pod niewielkim kątem.

Krok 3: Programowanie

Kod pisany jest w środowisku Arduino IDE. Będziesz musiał zainstalować 2 biblioteki:

  • Koder autorstwa Paula Stoffregen
  • Klawiatura Arduino

Aby skompilować dla Atmega32U4 musisz również zainstalować plik płytki Arduino Pro Micro, Sparkfun ma świetny poradnik, jak to zrobić.

Jedną rzeczą, na którą należy zwrócić uwagę z góry, jest ostrożność, aby nie pozostawić „wciśniętych klawiszy” w kodzie. Zdarzyło mi się to, a MCU ciągle spamowało kombinację klawiszy. Jedynym sposobem, w jaki wiem, jak to naprawić, jest ponowne nagranie programu ładującego do MCU. Jeśli skończysz tak jak ja, możesz postępować zgodnie z tym przewodnikiem, aby nagrać boot-loader, będziesz potrzebować innej płyty arduino do użycia jako programista.

W pętli głównej MCU najpierw odczytuje stan każdego przycisku, jeśli zostanie wykryta zmiana stanu z NISKIEGO na WYSOKI, wykonywana jest funkcja keyboard_shortcut(i). Zmienna i jest identyfikatorem wciśniętego przycisku, całkowita liczba przycisków jest określona przez ALL_BUTTONS (w moim przypadku 15). Po wykonaniu, keyboard_shortcut(i) wysyła CTRL+SHIFT, a następnie literę, która jest mapowana na identyfikator przycisku: 1->A, 2->B, 3->C itd. Niektóre kombinacje, takie jak CTRL+SHIFT+N, są pomijane, ponieważ już używany w Windows10 domyślnie (w tym przypadku do utworzenia nowego folderu). Oto lista wszystkich domyślnych skrótów Windows. Po krótkim czasie MCU wysyła sygnał do zwolnienia wszystkich klawiszy i funkcja wychodzi z powrotem do głównej pętli.

Po sprawdzeniu wszystkich przycisków, MCU sprawdza, czy zmieniła się pozycja enkodera obrotowego, a jeśli tak, keyboard_shortcut(i) jest wykonywany z unikalnym identyfikatorem.

Naciśnięcie przycisku kodera odwraca zmienną logiczną encoderButtonFlag. Gdy enkoder jest obracany, do komputera wysyłany jest inny skrót, w zależności od kierunku obrotu i wartości encoderButtonFlag.

Jeśli debugFlag jest ustawiony na 1 komunikaty debugowania są wysyłane przez UART do monitora szeregowego.

Krok 4: Konfiguracja skrótów

Konfiguracja skrótów
Konfiguracja skrótów
Konfiguracja skrótów
Konfiguracja skrótów

To, co robi każdy skrót, zależy od Ciebie, wszyscy mamy inne preferencje. Jako przykład podam skróty, które skonfigurowałem dla siebie. Używam Linux Mint 19.3 z menedżerem pulpitu xfce4, więc moje przykłady dotyczą głównie skryptów bash, ale pokażę też kilka podstawowych przykładów dla Windows10.

Na pierwszym obrazku widać, które skrypty zmapowałem do których skrótów. Odbywa się to z menu ustawień xfce, proces jest prosty. Możesz znaleźć te skrypty w moim repozytorium GitHub

Mniejsze 6 przycisków na dole służy do uruchamiania aplikacji, takich jak przeglądarka internetowa lub menedżer plików, niektóre z tych aplikacji są wywoływane ze skryptu start_only_one_app.sh, który pobiera nazwy wszystkich uruchomionych aplikacji i wyszukuje aplikacje, które chcesz uruchomić. Jeśli okno aplikacji już istnieje, zostaje aktywowane, w przeciwnym razie uruchamiana jest nowa instancja aplikacji.

Inne skrypty:

  • 2nd_display_control.sh - włącza/wyłącza drugi monitor.
  • moon_lamp.sh - włącza/wyłącza moją lampę księżycową.
  • pc_load.sh - tworzy dymek powiadomień z aktualnym użyciem procesora i GPU oraz temperaturami.
  • shutdown.sh - inicjuje wyłączenie komputera z 1-minutowym opóźnieniem i tworzy dymek powiadomienia, w którym wyświetlany jest pozostały czas.
  • spec_vpn.sh - łączy się z określonym serwerem OpenVPN lub jeśli połączenie już istnieje, rozłącza się z serwerem.
  • short_controll.sh - przyjmuje komendę (plus, minus, tab, close) jako argument, wykrywa które okno jest teraz aktywne i jeśli konkretna aplikacja jest aktywna, wykonuje akcję kontrolną. Na przykład, aby otworzyć nową zakładkę w edytorze tekstu sublime, domyślnym skrótem jest "CTRL+N", aw terminalu xfce - "CTRL+T", więc ten skrypt pozwala otworzyć nową zakładkę w sublime i terminalu za pomocą tego samego przycisku.

Pierwszą funkcją enkodera obrotowego jest sterowanie głośnością, drugą funkcją jest sterowanie aktywnym powiększeniem okna za pomocą skrótu_controll.sh.

W przypadku systemu operacyjnego Windows możesz mapować skróty do aplikacji za pomocą okna właściwości programu, jak pokazano na drugim rysunku. Do wszystkiego innego będziesz chciał użyć AutoHotkey. Jest to język skryptowy automatyzacji dla systemu Windows.

Kilka prostych przykładów składni AHK:

;Kontrola głośności

^+t::Wyślij {Zwiększenie głośności}

powrót

^+v:: Wyślij {Volume_Down}

powrót

;Zamknij aktywne okno

^+h::WinGetTitle, Tytuł, A

Wiadomość pocztowa, 0x112, 0xF060,,, %Tytuł%

powrót

;Wyłączanie komputera

^+b::Uruchom zamknięcie /s

Krok 5: Ulepszenia

Ulepszenia
Ulepszenia

Niektóre możliwe ulepszenia:

  • Przyciski lepszej jakości.
  • Prototypowa płytka drukowana dość mocno się wygina pod naciskiem przycisków.
  • Podświetlenie RGB do zmiany koloru w zależności od ustawionej funkcji enkodera obrotowego.
  • Więcej przycisków (użyj IC ekspandera IO).
  • Lepszy enkoder obrotowy (lub lepsze rozwiązanie odbicia).

Zalecana: