Skocz do zawartości

Klawiatura makro - wersja 1.0


Pomocna odpowiedź

Wrzucam wpis tu, bo technicznie jest to jeszcze work in progress, ale w praktyce czeka tylko na przyjście części i zlutowanie i skręcenie w jedną całość.

Zainspirowany różnymi urządzeniami pokroju Stream Deck, postanowiłem skonstruować własną klawiaturę makro. Przyjąłem kilka założeń.

 

1. Zwykłe klawisze (tzn. Cherry MX). Po prostu są wygodne.

2. Maksymalna modularność. Zależy mi na tym, by na małej powierzchni otrzymać dużą funkcjonalność. W konsekwencji każdy klawisz będzie miał wiele funkcji.

3. Opisy klawiszy. Przyklejone etykietki nie wchodzą w grę. Klawisze bez opisów też, bo równie dobrze mógłbym nauczyć się na pamięć skrótów klawiaturowych.

4. Przeprogramowywanie akcji bez przeprogramowywania kontrolera. Dzięki temu będzie można taką klawiaturę podpiąć do innego komputera i mieć swój zestaw skrótów.

 

Zrobiłem mały research związany z montowaniem wyświetlaczy OLED w klawiszach (jak np. w Optimus Maximus), ale po pierwsze nie znalazłem wystarczająco małych ekranów, a po drugie takie urządzenie świeciłoby pewnie całymi dniami i wyświetlacze by się powoli wypalały (wiem, bo wypalił mi się ekran komórki od nadużywanych Google Maps :))

Dlatego zdecydowałem się na następujące rozwiązanie:

* Kontrolerem jest Teensy 3.6, którego po pierwsze mam na stanie, po drugie ma całe mnóstwo RAMu (260 kB + 1 Mb flash, a to się przyda), po trzecie jest wyposażone we wbudowany czytnik kart micro SD, po czwarte jest szybkie (180 Mhz) a po piąte ma całą masę pinów, dzięki którym mogę wpiąć klawisze w piny bezpośrednio, nie bawiąc się w wiersze/kolumny (ułatwia implementację i oszczędza niektórych problemów)

* Opisy pod klawiszami realizowane są na ekranie e-papierowym. Zdecydowałem się na Waveshare 2.9" z kilku powodów; po pierwsze jest jednocześnie wystarczająco duży i wystarczająco mały (wiadomo, o co chodzi), po drugie ma bardzo zadowalające czasy odświeżania (2s pełne, 0.3s częściowe) oraz pozwala na częściowe odświeżanie (tzn fragmentów obrazu albo nawet całego obrazu bez pełnego cyklu czarny/biały/czarny/biały)

* Klawisze to Cherry MX Brown (wybrane w dużej mierze z uwagi na to, że są ciche - moją ulubioną klawiaturą jest prawie bezgłośny Microsoft Surface Keyboard)

* Do tego, aby zwiększyć funkcjonalność, doszedł enkoder, który będzie mógł robić za klawisze kursora, mysz, scroll itp.

Ponieważ w przypadku większych projektów mam silną alergię na lutowanie pajęczyny przewodzików, zaprojektowałem płytkę w Eagle i zamówiłem w JLCPCB (będzie w piątek).

Board.thumb.png.748e3923a9f3219101f22c2f4936d254.png

Płytka jest też automatycznie ściągą - przy konkretnych elementach nadrukowany jest numer pinu, do którego są one podłączone.

 

Potem zabrałem się za oprogramowywanie całego projektu. Flow jest taki:

1. Przygotowujemy prosty plik XML na komputerze. Zawiera on definicje ekranów (4x3 ikony) wraz z listami akcji, wśród których w tej chwili są:

a) Przyciśnięcie klawisza

b) Wciśnięcie klawisza modyfikatora (Shift, Ctrl, Alt)

c) Puszczenie klawisza modyfikatora

d) Przełączenie na inny ekran

e) Zmiana trybu pracy enkodera

Każda z akcji ma też swoją monochromatyczną ikonę 32x32px. Akcje można łączyć łańcuchowo w dowolny sposób (np. wciśnij klawisz, a następnie przejdź do kolejnego ekranu). Jeżeli chcemy zaprogramować skrót, na przykład Ctrl+C, musimy dodać trzy akcje: Wciśnięcie Ctrl, Przyciśnięcie C, Puszczenie Ctrl.

2. Przepuszczamy XML przez mój programik, który generuje dwa pliki wynikowe:

a) Keyboard.def - ten plik umieszczamy na karcie SD

b) Keyboard.map - jest to plik tekstowy, który bajt po bajcie dokładnie opisuje (wygenerowany) Keyboard.def - przydatne podczas debuggowania. Jeśli jesteście zainteresowani, załączam przykładowe pliki - możecie zobaczyć, jak wygląda docelowy format. Zdecydowałem się na binarny, bo w środowisku embedded rozmiary i prostota wczytywania są ważniejsze niż czytelność.

3. Wrzucamy Keyboard.def na kartę SD, a tę umieszczamy w Teensy

4. Uruchamiamy Teensy i podziwiamy efekty.

 

Z bardziej rzetelnym testowaniem obu aplikacji czekam na przyjście płytki, bo symulować wciśnięcie klawisza mogę tylko ręcznie zwierając konkretny pin z masą. Ale jakieś efekty już są.

MacroKeyboard.thumb.jpg.f46ca082f1e711a07ee945a5037bad68.jpg

Dla zainteresowanych, jeden ekran zajmuje w pamięci mniej więcej 1kb. W tej chwili wczytuję wszystkie ekrany hurtem do RAMu, ale w przyszłości, jeśli zajdzie taka potrzeba, można stosunkowo łatwo przeprogramować aplikację, by trzymała osobne ekrany w osobnych plikach i wtedy ograniczeniem ilości ekranów będzie efektywnie rozmiar karty SD. Ale patrząc realnie, przy 260 kb RAMu Teensy 3.6 i przy założeniu, że aplikacja pożre 60 kb (z grubą górką), mamy do dyspozycji mniej więcej 200 ekranów, czyli 2400 akcji - powinno wystarczyć aż zanadto nawet najbardziej wymagającym osobom (to jest równowartość mniej więcej 23 pełnych klawiatur).

Wczoraj wieczorem zabrałem się do projektowania obudowy w Fusion (eksport płytki z Eagle'a do Fusion - bajka).

I się załamałem.

Zaprojektowałem płytkę zbyt ciasno. Zależało mi na kompaktowych rozmiarach całego urządzenia, ale nie wziąłem pod uwagę, że przez to wszystko będzie zależało od wszystkiego. Mam tu na myśli na przykład to, że kontroler jest strasznie blisko przycisków, przez co nie mam za bardzo jak go schować wewnątrz obudowy (chyba, że go przylutuję na stałe, ale tego akurat chciałbym uniknąć). Czeka mnie więc zaprojektowanie drugiej płytki i złożenie kolejnego zamówienia. Kolejna nauczka, żeby się nie spieszyć i zaprojektować wszystko najpierw od początku do końca, szczególnie, że mam dostęp do profesjonalnych narzędzi, które na to pozwalają (Eagle, Fusion360).

Na chwilę obecną mam następujący pomysł na obudowę dla wersji 1.0:

MacroKeyboardCase.thumb.png.31e9347a21535fe85ebe0b8cf22d1a15.png

Gdy płytki przyjdą w piątek i wszystko polutuję, postaram się nagrać jakiś filmik z działania.

Jeżeli znajdą się chętni, mogę udostępnić wszystkie elementy projektu - płytkę, programy, obudowę itp. Zachęcam też do komentarzy i dodawania pomysłów. Mam ambicje zaprojektować the-ultimate-macro-keyboard i tak naprawdę jestem też bardzo otwarty na wszelką współpracę.

Minusem projektu są koszty. Jeśli ktoś chciałby odtworzyć go 1:1, musi wydać:

* 180 PLN na Teensy 3.6

* ok. 150 PLN na 12 przełączników Cherry MX + 12 klawiszy (keycaps)

* 88.5 PLN za wyświetlacz (znalazłem go na elty.pl)

* Druk płytki to 7.50 USD, czyli 30 PLN, ale do tego dochodzi przesyłka, która jest dobre 3x droższa. Alternatywnie można zamówić płytkę w polskiej firmie (planowałem drukować ją w Satlandzie) i wtedy to wydatek rzędu 80 PLN z przesyłką, ale i z czasem oczekiwania 15 dni na rozpoczęcie produkcji (w JLCPCB rozpoczęli produkcję literalnie 4h po złożeniu zamówienia).

* Enkoder i pokrywa to sprawy "groszowe", czyli <10 PLN

Kwoty można próbować optymalizować na przykład przez zdecydowanie się na prostszy mikrokontroler i przejście na model wiersze/kolumny (wtedy potrzebne będzie 7 cyfrowych pinów zamiast 12). Ważny jest jednak RAM, w szczególności trzymam pełny bufor ekranu w pamięci, jest to 296*128/8 = 4736b, a jest to wartość mimo wszystko dosyć duża. Konieczne może się okazać zrealizowanie częściowego renderowania, to z kolei spowolni proces i skomplikuje program... więc chyba jednak lepiej zostać przy Teensy.

Keyboard.zip

  • Lubię! 2
Link do komentarza
Share on other sites

@spook super projekt 🙂 przenoszę tylko do działu z worklogiem, bo jak rozumiem nie jest jeszcze skończony.

Temat klawiatur pojawiał się już kilka razy, szczególnie @deshipu sporo działał w tym temacie.

7 godzin temu, spook napisał:

ok. 150 PLN na 12 przełączników Cherry MX + 12 klawiszy (keycaps)

Myślę, że możesz upolować gdzieś tańsze. Sam kupiłem 30 przycisków na Ali i o dziwo nie były to byle jakie podróby. Do tego znalazłem całą klawiaturę za 10zł.

7 godzin temu, spook napisał:

Konieczne może się okazać zrealizowanie częściowego renderowania, to z kolei spowolni proces

Myślę że wyświetlanie czegoś na einku i tak jest tragicznie powolne, więc chyba gorzej nie będzie 🙂 

Link do komentarza
Share on other sites

Wymierzyłem sobie wszystko i rozrysowałem na kartce. W efekcie mamy nową (i już zamówioną) płytkę z większymi odstępami, wyrównanym enkoderem i kilkoma pomocniczymi prowadnicami:

MacroKeyboard-Board1.1.thumb.png.c05185d008da567d5dc25db91091e21d.png

Dzięki temu mogłem przygotować nową obudowę. Kontroler jest wciąż odsłonięty, ale pokrywkę do niego chcę zrobić w formie opcjonalnej klapki, którą będzie można przykręcić na dwie skrajne śruby M3.

MacroKeyboard1.1.thumb.png.932c9fdb65251bba04fce9972b1c93c5.png

Bez reweli, ale nie mam już lepszych pomysłów. Zależało mi bardzo na schowaniu przewodów z ekranu do płytki głównej oraz na tym, żeby ekran był nachylony pod kątem. Chciałem też, żeby był równo nad przyciskami - łatwiej w ten sposób powiązać konkretny przycisk z opisem. Tylko ceną za to jest fakt, że (prawie) zakrywa port USB kontrolera i mógłby być wtedy problem z podłączeniem. Obudowa ekranu jest jednak modularna i można ją dosyć łatwo wymienić na inną, bo przykręcona jest do reszty dwiema M3kami.

MacroKeyboard2.thumb.png.1ba8774b924f789eb289ce33204d51d2.png

Na szybko machnięty przykład płaskiego montażu ekranu:

MacroKeyboard3.thumb.png.c18763f8785e039ea112d53ea3f94704.png

Które mocowanie ekranu jest lepsze?

A może macie jeszcze jakiś inny pomysł?

Tu widać, którędy idą kable do wyświetlacza:

Crosssection.thumb.png.ae6b267c2b3cc4c20cb63184fb0ecf54.png

Pozdrawiam -- Spook.

Link do komentarza
Share on other sites

Doszły pierwsze płytki (te zbyt ciasne).

 

20220303_101820.thumb.jpg.ff2e4e45f11bc8b29fb7555f2006bcc6.jpg

Najprawdopodobniej ich nie wykorzystam, więc jeśli ktoś ma ochotę zbudować własną klawiaturę makro według mojego projektu (lub podobną, np. bez ekranu), to dajcie znać, mogę sprzedać po kosztach.

Pozdrawiam -- Spook.

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

(edytowany)

No więc wydarzenia przybrały bardzo ciekawy obrót. Zamówiłem w JLCPCB nowe płytki i miały dojść w poniedziałek, ale doszły dziś. Czyli generalnie dobra wiadomość.

Gdyby nie to, że to nie są moje płytki.

Skontaktowałem się z JLCPCB i obiecali wydrukować je ponownie i wysłać ekspresem, ale trochę później na StackOverflow (ale między innymi dzięki temu wątkowi) skontaktował się ze mną właściciel płytek, który z kolei dostał moje. Kolega elektronik siedzi w UK, więc się najprawdopodobniej płytkami wymienimy - być może dzięki temu uda mi się wznowić projekt w przyszłym tygodniu. Wszystko jest w zasadzie gotowe, czekam tylko na te nieszczęsne płytki.

Pozdrawiam -- Spook.

Edytowano przez spook
Link do komentarza
Share on other sites

W czasie, gdy czekam na przyjście tych nieszczęsnych płytek, wydrukowałem już całą obudowę. Będzie wyglądać mniej więcej tak (wersja z pochylonym ekranem):

20220315_134152.thumb.jpg.0c5de1c0331e35e7ad0ee5fb468b6572.jpg

A kolega elektronik - jak się okazało, student, wysłał moje płytki... pocztą. Także czeka mnie chyba trochę więcej czekania niż bym sobie tego życzył. Ale co poradzić.

Link do komentarza
Share on other sites

(edytowany)

I jeszcze jeden update. Ponieważ mam nadmiar płytek i jeden zapasowy Teensy, przygotowałem wersję bez ekranu.

20220323_233211.thumb.jpg.a8505f6f75e7a3c22eb0d7b177cc4731.jpg

Kontroler ma nieco zmodyfikowane oprogramowanie i wymagane jest uruchomienie na komputerze aplikacji-satelity. Tym sposobem obraz, który normalnie wyświetlony zostałby na ekranie e-papierowym, pojawia się nad systemowym trayem.

Satellite.thumb.png.5f821ef7cbb42e646f1f26ba96c87b87.png

W ten sposób można normalnie używać nieco bardziej kompaktowej, ale jednak wciąż w pełni funkcjonalnej wersji klawiatury.

Edytowano przez spook
  • Lubię! 1
Link do komentarza
Share on other sites

Dochodzą nowe funkcjonalności, na przykład mogę teraz uruchomić dowolne polecenie po wciśnięciu przycisku. Napisałem też na mojej stronie domowej obszerny wpis, jak zbudować moją klawiaturę samodzielnie. Na GitLab wrzuciłem płytkę w formacie Eagle wraz z Gerberami, archiwum Fusion360 z obudową i wszystkie potrzebne kody źródłowe.

Wpis na mojej stronie jest na razie tylko po angielsku: https://spooksoft.pl/macro-keyboard 

Pozdrawiam -- Spook.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.