Zaprezentowana w tym projekcie minimalistyczna klawiatura to prosty układ, który pozwala na automatyczne przesyłanie do komputera kombinacji klawiszy – makr, za pomocą pojedynczego kliknięcia. Poszczególne makra zaprogramowane są w urządzeniu, dzięki czemu wystarczy tylko podłączyć klawiaturę do komputera, a system wykryje ją jako zwykłą klawiaturę USB – nie ma potrzeby instalowania żadnych sterowników.
Konstrukcja powstała po to, aby ułatwić autorowi udział w telekonferencjach w aplikacji Zoom dla systemu Windows. Zaprogramowane w urządzeniu skróty klawiszowe pozwalają włączać i wyłączać wyciszenie mikrofonu, podnosić i opuszczać rękę oraz włączać i wyłączać wideo z naszej kamery. Cały system bazuje na płytce Arduino. Oprogramowanie jest bardzo proste – opracowano je w Arduino IDE z zastosowaniem bibliotek, które ułatwiają obsługę klawiszy i emulację klawiatury komputerowej USB.
Elementy potrzebne do budowy urządzenia
Płytka, która została użyta w tym systemie, jest klonem Arduino Pro Micro. Można użyć oficjalnego modułu lub jej tańszego klona, tak jak w tym projekcie. Ważną rzeczą jest to, aby był to moduł z układem ATmega32U4, który obsługiwany jest przez Arduino IDE i który zapewnia natywną obsługę USB. Na rynku istnieje wiele klonów tego modułu Arduino. Niektóre wersje wyposażone są w micro-USB (taki jak w projekcie), mini-USB i USB typu C. Każda z wymienionych wersji może być zastosowana w tym projekcie.
Oprócz samego modułu Arduino potrzebne są oczywiście przyciski do sterowania układem. Można zamontować dowolne dwuwyprowadzeniowe przyciski chwilowe. Autor zastosował przyciski Gateron Brown, stosowane w klawiaturach mechanicznych dla komputerów PC, jednak można zastosować dowolne inne przyciski, które będą wygodne w tym rozwiązaniu.
Do połączenia wszystkich elementów systemu potrzebny będzie przewód, który pozwoli na podłączenie przycisków do modułu. Autor wykorzystał tutaj cienki drucik pozyskany z przewodu sieciowego (skrętki), ale może być inny podobny przewód. Oczywiście potrzebne będą też podstawowe narzędzia do lutowania itp. Finalnie system trzeba uzupełnić przewodem USB o odpowiednim złączu, dopasowanym do wybranego modułu Arduino.
Obudowa z przyciskami
Obudowa została wykonana w technologii druku 3D i składa się z dwóch części. Głębszy element z wycięciem na port USB służy do montażu elektroniki, a wieczko do instalacji przycisków. Mechaniczne przełączniki umieszczane są w wieczku w kwadratowych otworach 14×14 mm (fotografia 1a). W przypadku wykorzystania innego rodzaju przełączników konieczna może być zmiana wielkości bądź geometrii tych otworów – zostały ode dobrane pod kątem instalacji zwykłych przycisków z mechanicznej klawiatury komputerowej. Przyciski powinny ciasno wchodzić w kwadratowe otwory, jakie dla nich przygotowano, w przeciwnym wypadku mogą one przypadkowo wyczepić się z tego miejsca w czasie użytkowania. Dla ich lepszego umocowania w obudowie autor rekomenduje zalanie luk w górnej pokrywie obudowy klejem na gorąco, aby połączenie to było naprawdę solidne (fotografia 1b). Pliki STL do wydrukowania obudowy załączone są do projektu – można pobrać je ze strony projektu [1] i samodzielnie wydrukować obudowę pokazaną na zdjęciach w artykule.
Podłączenie do Arduino
Każdy przełącznik ma 2 piny. Jeden pin musi być podłączony do masy zasilania układu, a drugi do wyprowadzenia w module Arduino Pro Micro. Tak więc należy połączyć wszystkie wyprowadzenia z jednej strony przycisków do jednego wspólnego przewodu, który zostanie następnie podłączony do masy systemu, jak pokazano na fotografii 2. Następnie należy przygotować trzy krótsze przewody, które podłączone zostaną do drugich wyprowadzeń przycisków. Jak pokazano na fotografii 2, podłączone są one do przeciwnego pinu i po naciśnięciu przycisku zostaną zwarte z masą.
Połączenia te najlepiej jest polutować, aby zapewnić bezawaryjne połączenie. Mechaniczne przełączniki mają raczej małe piny, więc najlepiej użyć szczypiec do zahaczenia i owinięcia końców przewodów wokół niego przed lutowaniem. Każdy z owiniętych przewodem pinów dobrze jest pokryć topnikiem przed ich zlutowaniem w całość. Wystarczy odrobina spoiwa, aby połączyć je w całość, by przewody nie oderwały się przypadkiem podczas eksploatacji. Przewody przycisków można następnie dociąć na równą długość i odizolować z drugiej strony na kilka milimetrów. Ta część przylutowana zostanie do płytki Arduino.
W zasadzie można użyć dowolnych wyprowadzeń wejściowych w module Arduino. Autor wybrał wyprowadzenia 9, 6 oraz 3 – oddzielone na płytce, dzięki czemu łatwiej się je lutuje (fotografia 3). Lutowania należy wykonać bardzo delikatnie, aby nie uszkodzić innych elementów na PCB. Jeśli nie chcemy lutować przewodów na stałe, możliwe jest zamontowanie na przewodach złączy na goldpiny i obsadzenie goldpinów na module Arduino.
Podczas lutowania kluczowe jest odpowiednie unieruchomienie płytki Arduino i przewodów. Najprościej jest zrobić to z wykorzystaniem tzw. piątej ręki, ale jeśli jej nie mamy, to można wspomóc się innymi elementami ułożonymi na biurku warsztatowym.
Przed finalnym montażem i zamknięciem układu w obudowie musimy jeszcze dołączyć do modułu Arduino przewód USB. Musi być zakończony z jednej strony wtyczką pasującą do gniazda w module Pro Micro. Druga strona powinna być zakończona wtyczką USB typu A, którą można podłączyć do komputera. Wtyczki USB mają skłonność do rozłączania się, szczególnie microUSB, zastosowane w jednym z klonów Arduino Pro Micro. Dlatego też należy zabezpieczyć wtyczkę w gnieździe płytki za pomocą odrobiny kleju na ciepło.
Finalny etap prac pokazuje fotografia 4 – cała konstrukcja jest gotowa do zamknięcia obudowy. Natomiast na fotografii 5 widzimy urządzenie z zamkniętą górną pokrywą obudowy. Teraz wystarczy założyć tylko klawisze na przyciski i wgrać oprogramowanie układowe do modułu Arduino.
Firmware
Oprogramowanie dla modułu zostało przygotowane w Arduino IDE. Jest to w pełni darmowy pakiet, który pobrać można ze strony producenta modułów. Można także utworzyć konto w witrynie i używać IDE w wersji online z małym programem zainstalowanym na komputerze, który pozwala na przenoszenie programu do modułów Arduino przez USB.
Po zainstalowaniu środowiska programistycznego należy doinstalować wymagane biblioteki – OneButton i Keyboard, jeśli nie są zainstalowane wraz z instalacją IDE. Jeśli korzystamy z IDE online, nie musimy instalować bibliotek – są one już dostępne.
// Biblioteka emulacji klawiatury
#include <Keyboard.h>
// Biblioteka do obsługi przycisków wejściowych
#include <OneButton.h>
// Stałe konfiguracyjne systemu
char altKey = KEY_LEFT_ALT;
OneButton button1(
9, // Numer pinu dla wyciszenia
true, // Wejście aktywne w stanie niskim
true // Włączenie wewnętrznego opornika podciągającego
);
OneButton button2(
3, // Numer pinu dla podniesienia ręki
true, // Wejście aktywne w stanie niskim
true // Włączenie wewnętrznego opornika podciągającego
);
OneButton button3(
6, // Numer pinu dla sterowania kamerą
true, // Wejście aktywne w stanie niskim
true // Włączenie wewnętrznego opornika podciągającego
);
void setup() {
// Konfiguracja funkcji przycisku 1 – wycisz
button1.attachClick(button1click);
// Konfiguracja funkcji przycisku 2 – podniesienie ręki
button2.attachClick(button2click);
// Konfiguracja funkcji przycisku 3 – włącz/wyłącz wideo
button3.attachClick(button3click);
Keyboard.begin(); // Inicjalizacja emulacji klawiatury
Serial.begin(9600); // Inicjalizacja portu szeregowego
delay(50);
}
void loop() {
// Sprawdzanie stanu przycisków w pętli
button1.tick();
button2.tick();
button3.tick();
}
// Te funkcje zostaną uruchomione
// gdy zostanie naciśnięty przycisk, odpowiednio 1, 2 oraz 3
void button1click() {
Serial.println("Pressing alt+a for Mute/Unmute");
Keyboard.press(altKey);
Keyboard.press(‘a’);
delay(50);
Keyboard.releaseAll();
}
void button2click() {
Serial.println("Pressing alt+y for Hand");
Keyboard.press(altKey);
Keyboard.press(‘y’);
delay(50);
Keyboard.releaseAll();
}
void button3click() {
Serial.println("Pressing alt+v for Video");
Keyboard.press(altKey);
Keyboard.press(‘v’);
delay(50);
Keyboard.releaseAll();
}
Na listingu 1 zaprezentowano kod programu sterującego pracą klawiatury. Składa się z kilku podstawowych sekcji. Dwie kluczowe struktury to funkcje setup() oraz loop(). Pierwsza z nich to funkcja, która jest uruchamiana po włączeniu mikrokontrolera i służy, jak sama nazwa sugeruje, do konfiguracji układu. Druga z wymienionych funkcji to nieskończona pętla, w której znajduje się podstawowa funkcjonalność programu. Oprócz tego znajdują się tam inne elementy, typowe dla kodu pisanego w C – ładowanie bibliotek, stałe konfiguracyjne i dodatkowe funkcje.
Funkcja konfiguracyjna programu jest bardzo prosta – konfiguruje trzy przyciski (zainicjalizowane wcześniej) do wyzwalania zdefiniowanych w dalszej części kodu funkcji button1click(), button2click() oraz button3click().
Są one uruchamiane po przyciśnięciu przycisków, odpowiednio, button1, button2 oraz button3. Finalnie uruchamiany jest także port szeregowy, który służy w tym systemie głównie do debugowania pracy klawiatury.
Biblioteka OneButton wykonuje za nas większość zadań. Po skonfigurowaniu każdego przycisku wbudowany rezystor podciągający jest włączany, dlatego w układzie nie ma potrzeby montowania żadnego fizycznego rezystora. Wbudowany rezystor jest wystarczający. Poszczególne funkcje, wywoływane przez naciśnięcia klawiszy (tj. przez bibliotekę OneButton), wysyłają do komputera sygnały naciśnięcia przycisków klawiatury w odpowiedniej sekwencji. Aby symulować naciskanie przycisków przez człowieka i zagwarantować poprawne wykrycie makra, poszczególne kliknięcia oddzielone są niewielkimi przerwami, realizowanymi za pomocą funkcji delay(), która jako parametr przyjmuje czas podany w milisekundach.
Po podłączeniu Arduino do komputera można wybrać w IDE odpowiedni moduł, a następnie skompilować szkic z listingu 1 i wgrać go do pamięci mikrokontrolera. W Arduino IDE można również uruchomić monitor portu szeregowego, aby podsłuchać komunikaty, jakie wysyła klawiatura, co pozwoli na proste debugowanie układu, gdyby wystąpiły jakieś problemy z jego uruchomieniem.
Podsumowanie
Ten prosty system pozwala na szybkie wprowadzanie skrótów klawiszowych jednym kliknięciem. Autor układu użył go do obsługi telekonferencji na platformie Zoom, ale nic nie stoi na przeszkodzie, aby zastosować go do sterowania innymi aplikacjami, zmieniając zaprogramowane skróty klawiszowe.
Zaprezentowany projekt można zmodyfikować lub rozbudować. Do układu można dołożyć więcej przycisków (system ograniczony jest jedynie liczbą wejść zastosowanego mikrokontrolera). Pewnym ograniczeniem jest konieczność wprowadzenia już na etapie firmware wybranych skrótów klawiszowych. Biblioteka Keyboard.h pozwala na wprowadzanie do komputera nie tylko skrótów klawiszowych, ale także sekwencji naciskania klawiszy.
Oznacza to, że za pomocą podobnego systemu można realizować także np. makra do obsługi różnych programów na komputerze – np. zaprogramować sekwencję kilkukrotnego naciśnięcia tego samego klawisza, co dodatkowo zwiększa możliwości i elastyczność tej mikroklawiatury.
Nikodem Czechowski, EP
Źródła
[1] https://bit.ly/3kbYfzn
[2] https://bit.ly/3xRXhjM