Split Klavye Maceram
Osman /Uzun süredir klavye/mouse kullanırken sağ bilek ve dirsek ağrısı yaşıyorum. Çözüm için bir kaç yıl önce standart klavye/mouse’dan Logitech MX serisine geçmiştim. Standart klavye/mouse’lara göre çok iyi ama ağrıları azaltmaya yardımcı olmadı. Ayrıca mouse yerine Mac’de trackpad de kullandım bir süre ama bu da beklediğim etkiyi yaratmadı.
Ağrılar için denemek istediğim şey ise split klavye. Belki trackball entegreli bir split keyboard ile alışkanlıkları değiştirebilirim diye düşündüm. Tabi bunu yaparken mouse kullanımını en aza indirmeye uğraşıyorum. Geniş tek bir monitörde (DELL U 34") mouse ile hareket ettiğim mesafe de artıyor, dolayısıyla pencerelerin dizilimi önem kazanıyor. Geçişleri klavyeden daha verimli yapabilmek için bir tiling manager Aerospace kullanmaya başladım yakın zamanda.
Türkiye’de kolayca bir split klavye bulmak mümkün değil. Bu klavyeler zaten genel olarak pahalı, mevcut gümrük kanunlarından dolayı kolayca yurt dışından getirmek de zor. Bu yüzden bir süre önce klavye araştırmalarına başladım ve sonunda Reddit gruplarında aldığım gazla ErgoMechKeyboards kendi klavyemi yapmaya karar verdim.
İlk Adımlar
Evde bir adet havya ve basit Arduino malzemeleri vardı fakat uzun yıllardır uğraşmamıştım. Çok yeni olduğum bir konu olduğu için bir sürü hata yaptım. Bu hataları buradan yazarak kayıt altına almaya karar verdim.
Öncelikle klavye board seçimi ile başladım. Yeni başlayanlar için önerilen birkaç meşhur board var: Lily58, Corne ve Sofle bunlardan bir kaçı. Ben de yaklaşık olarak bu boyutlarda bir klavye yapmak istedim. Sofle ve Lily58 birbirine çok benzer klavyeler. Corne ise onların bir sıra eksiği gibi düşünebilirsiniz.
Lily58’den gitme kararı aldım. Karar verdikten sonra ilgili boardun PCB’sini üretmek için Gerber dosyalarını ararken Lotus58 isimli proje ile karşılaştım. Bu da Lily58 bazlı bir klavye ama aktif olarak geliştirilen bir board olarak gördüm. Gerber dosyaları, release’leri vs. daha derli toplu ve güncel olduğunu düşündüğüm için bu board ile ilerlemeye karar verdim.
Repodan USB-C release’ini alıp (ki ben bunu ilk okuduğumda kontrolcünün USB-C olduğu version gibi düşündüm ama aslında boardların birbirleri ile iletişimi için kullanılan arayüz USB-C imiş, ileride değineceğim) üretmek için JLCPCB sitesine gittim. Bu konuda dünyada bir kaç firmadan birisi, PCBWay bir diğeri. İkisi de Çin merkezli. JLCPCB ile ilgili daha güzel yorumlar okudum ve fiyat da biraz daha ucuz olduğundan burada üretmeye karar verdim. İndirdiğiniz Gerber dosyasını bu siteye eklediğinizde direkt boardu görebilirsiniz ve wizard ile hiç bir değişiklik yapmadan kolayca üretim aşamasına geçebilirsiniz. En az 5 adet üretim yapıyorlar, bu 2,5 klavyeye denk geliyor fakat benim gibi acemi iseniz daha fazla ürettirip test edebilirsiniz.
Aldığım gün itibariyle $9.7 board ücreti ve $18 kargo ücreti ödedim. İlk sipariş için $10 indirim yaptılar ve toplamda $18’a kargo dahil 5 board ürettirdim. Üretim yaklaşık 2 gün sürdü ve 3. günde kargoya teslim edildi. Bu $18’a gümrük vergisi dahil değil ve AliExpress gibi gümrüğü bu aşamada ödeyemedim, belki benim kargo tercihim (FedEx)'den kaynaklı olabilir.
Kargoya verildikten 3 gün sonra ürün ülkeye giriş yaptı fakat gümrüğe takıldı ve vergisinin ödenmesi gerektiği ile ilgili bir update gördüm:
“Delivery exception, Held, unable to collect payment”
Bir kaç gün bekledim fakat ne FedEx’ten ne de başka bir kanaldan nasıl ödeme yapmam gerektiği ile ilgili bir bildirim almadım. Daha sonra FedEx’e ulaştığımda vergitahsilat@fedex mail adresine ilgili durumu açıklayan bir mail atmam gerektiğini, FedEx yetkililerinin durumu inceleyip dönüş yapacağını ilettiler. Aynı gün içerisinde nereye ne kadar vergi ödemesi yapmam gerektiği ile ilgili mail ile geri dönüş yapıldı. Yaklaşık $6 (TL karşılığı) ödeme yapıp dekontu ilettim ve ertesi gün gümrük işlemleri tamamlanarak bulunduğum şehre doğru yola çıktı.
Parça Listesi ve Tedarik Süreci
Parça listesi GitHub adresinde var, ben de elimden geldiği kadar benzer komponentleri edinmeye çalıştım. Fakat normal audio jack (TRRS)'den iletişim kuran bir model yerine USB-C versiyonunu bastırdığımı fark ettiğimde ek komponentler gerekti: USB-C portu, koruyucu devre elemanları gibi. Bir kısmını bulmakta zorlandım.
Elimde yeterince elektronik malzeme olmadığı için şunları temin ettim:
- Lehim pastası
- 0.75mm lehim teli (kurşunsuz almıştım ama yeni başlayanlar için lehimlemesi zor olduğuna dair şeyler okudum, daha yüksek derecede eridiği için. Şu an olsa sanırım farklı tercih yapardım)
- Lehim temizleme teli
- TH (Through Hole) ve SMD diyotlar
- Cımbız, lehim standı
- Çeşitli soketler, switchler ve jumper kablolar
Parçaların çoğunu Motorobit’ten aldım. Burası dışında Robitshot, KaraköyElektronik, Robocombo, Direnc gibi sitelerden çeşitli parçalar aldım. Küçük bir komponent, pil ya da aradığınız bir soket genelde farklı tedarikçilerde oluyor bunun için mecburen bu kadar farklı yerlerden alışveriş yapmam gerekti. Bu deneyimde Robocombo usb-c yerine micro-usb soketli kontrolcü gönderdi, Direnc ise çok yavaş tedarik etti ürünleri, bunun dışında bir sorun yaşamadım. Soketleri Türkiye’den RationalKeys’ten temin ettim. Mekanik klavye ile ilgili sanırım tek yerli site. AliExpress’te muhtemelen daha ucuza alternatifler var fakat çok fazla fiyat farkı yok, destek olmak adına buradan sipariş verdim. Yine aynı tedarikçiden bazı switchler de aldım denemek için: JWICK T1 ve Gateron Milky Yellow Pro gibi. Switch olarak ayrıca AliExpress’ten klon Holy Panda siparişi vermiştim, bu da ucuz bir test switch oldu benim için. Switch olarak MX standart switchlerden alabildiğimce farklı tipte almaya çalıştım.
MX dışında low profile için Kailh Choc’da popüler bir başka switch türü fakat keycapler v.s. birbiri ile uyumsuz, daha fazla çeşit bulabileceğimi düşündüğüm için MX ile devam ettim.
Tactile, linear v.s. Burası derya deniz fakat önceliğim klavyeyi çalıştırmakta. Keycap’leri Amazon’dan sipariş verdim, yine ucuz bir set aldım denemek için, burada da farklı keycap profilleri var, denemeden anlamak zor.
Kablolu yapacağım ve nispeten daha çok kaynak bulabileceğimi düşündüğüm için kontrolcü olarak Ardunio Pro Micro klonu temin ettim. Türkiye’de kolayca yaklaşık $10 bandında bulunabiliyor. Ama bu micro-USB portları çok kırılgan, ben de bir tanesinin portunu kolayca kırdım, sonra tekrar sipariş etmem gerekti. Sanırım kablolu için en mantıklı seçenek Türkiye’den temin edilmesi seçeneği için SparkFun Pro Micro - RP2040 olabilir.
Aynı zamanda kablosuz da test etmek istedim ve paralelde AliExpress’ten Nice!Nano v2 klon (~3 Euro) siparişi verdim. AliExpress de kargo+gümrük vergisi dahil olduğu için zaten gümrükten geçemeyecek ürünleri alamıyorsunuz genelde.
İlk Hatalar ve Öğrenme Süreci
PCB elime ulaştıktan sonra ilk testimi yaptım. Önce diyotları lehimledim. Acemiliğin hakkını ilk burada vererek SMD deliklerinden diyot ayaklarını geçirmeye çalıştım, tabiki kısa sürede hatamın farkına vardım. Daha sonra internetten baktığımda bunu yapan başkaları da olduğunu gördüm, onun için buradan yazıyorum - yapmayın 😃
Diyotları lehimledikten sonra soketleri lehimledim, 2-3 saatte işim tamam gibiydi, bu hızla akşama bitiririm diye düşündüm. Sonra kontrolcüyü lehimledim. İlk hatayı burada yaptım ve hata yaptığımı fark etmedim. Bu PCB’ler genelde iki taraflı kullanılıyor, yani bir yüzü sağ diğer yüzü ise sol klavye parçasını oluşturuyor ve "silkscreen"de yani PCB üzerindeki yönergelerde de yazıyor neyi ne tarafa lehimlemek gerektiğini.
Nedense elimdeki board (bir Lily58 forku olan Lotus58) bırakıp genelde Lily58 videoları/fotoğraflarına baktığımdan kontrolcüyü hep üst tarafta yani tuşlarla aynı tarafta görüyorum, onun için iki PCB’nin mikrokontroller soketlerini de ters tarafa lehimlemiş oldum. Bu büyük bir hata oldu çünkü kontrolcünün soketlerini lehimledikten sonra sökmek, hele de kurşunsuz bu lehim ile işkenceye dönüştü. Tabiki sökemedim tam anlamıyla, elimdeki havya (80W) da sanırım çok yüksek sıcaklıklara çıktığı için ve doğru temizleyemediğimden bir süre sonra uç kısmından erozyona uğradı, dolayısıyla boarda da zarar verdi. Bu yüzden bu iki board artık kullanılamaz hale geldi.
İkinci Deneme ve Yeni Dersler
“Dersimi aldım artık hata yapmam” diyerek tekrar başladım. Bu defa tek bir boardu çalıştırmaktı hedefim. İlk seferde sanki iki board da çalışmadan test edemem gibi yorumlamıştım oysa tek bir tuş bile lehimleyerek test edebilirmişim.
Elimdeki diyotlar tükendi, tekrar diyot siparişi verdim. Bir önceki boarddan MX soketleri de söküp tekrar 3. boarda taktım. Her şey düzgün görünüyordu, ilk teste hazır.
Bilgisayara bağladım ve QMK firmware ile flashladım. Bu QMK genelde tüm kablolu boardlarda kullanılan firmware. Pro micro ve ailesinden bir kontrolcü ile kullanılabilir. Tüm yazılım işlerini halleden ve klavyenin programlanabilir olmasını sağlayan bu firmware. Burada bir parantez açıp kısaca bu firmwarelere değinecek olursak, QMK ve ZMK iki büyük firmware. QMK kablolu, ZMK kablosuz klavyeler içerisinde kullanılıyor. İkisi de temelde klavyeyi programlayabilmenize, klavyede farklı layerlar tanımlayabilmenize, çeşitli tuşlara macrolar yazarak kısayollar üretebilmenize olanak sağlıyorlar. Tümü tamamiyle kişiselleştirilmiş bir düzen üretebiliyor.
QMK kendi flash uygulaması ile klavyeyi flashlamaya izin verirken, ZMK’da firmware dosyasını kontrolcüye kopyalayıp yapıştırmak yeterli. ZMK boardu flash modunda açıldığında kendini volume olarak bağlıyor. Tek yapılması gereken cp komutu ile veya sürükle bırak ile firmware dosyasını Volume’a atmak, kendini restart edip yeni firmware ile başlıyor. Bunu yaparken her kontrolcüyü kablo ile bağlamak gerekiyor.
QMK’da flash moduna geçmek için Pro-Micro üzerindeki reset ve GND pinlerini cımbızla kısa devre yapmak yeterli. Bilgisayara QMK Toolbox uygulamasını kurup flashlamak istediğiniz dosyayı seçip, auto flash seçeneğini tikledikten sonra bu işlemi yaparsanız otomatik olarak flashlanacaktır. QMK sitesinde zaten default config ve flash dosyaları yer alıyor desteklenen tüm boardlar için.
Pro-Micro düzgün şekilde flashlandı fakat boarda taktığımda çalışmadığını gördüm. Board üzerinde bazı jumper’lar var, örneğin hangi parça (sağ mı sol mu) olduğunu işaretlediğiniz jumper gibi. Ben bu şekilde boardun hangi tarafını çalıştırdığını anladığını sanıyordum ve bu şekilde denedim fakat bu yetmiyormuş.
Boardun geliştiricisini Reddit’te bulup mesaj gönderdim boardun fotoğrafı ile birlikte. Hemen dönüş yaptı ve boardun içindeki tüm jumper’ları bağlamam gerektiğini söyledi. Yine büyük bir kısmı atlamıştım. Soketler takılıyken jumper’ları lehimlemek hayli zor oldu ve sonunda bir kaç jumper’ı lehimlerken zarar verdim. Dolayısıyla bu board da kullanılmaz hale geldi. Totalde 3 board boşa çıkmış oldu.
Bu arada elimdeki havya ucu tamamen kullanılmaz hale gelince ısı ayarlı ve daha sağlam/ince uca sahip (bir havya aldım.) Bu ilk milestone oldu çünkü düzgün aletlerle çalışmak işimi büyük ölçüde kolaylaştırdı.
Geri kalan iki boardu lehimledim ve Pro Micro ile ayrı ayrı en azından bazı tuşları çalıştırmayı başardım. Fakat bazı tuşlar, bazı sıralar ve sütunlar çalışmıyordu. Yine boardun geliştiricine sordum, muhtemelen kısa devre olduğunu ve test etmem gerektiğini söyledi.
Bu ana kadar bir multimetrem yoktu, hemen ucuz bir multimetre satın aldım. İlk almam gereken iki alet birincisi multimetre ve ikincisi düzgün uçlu sıcaklık ayarlı bir havya olduğunu anladım.
Multimetre ile buzzer mode yani iki nokta arasında bir iletim var mı testi tam olarak console log etkisi gösterdi. Böylece asıl öğrenmem gereken şeyi, yani keyboard matrix’i anladım. Her bir sıra ve her bir sütun kendi içinde bağlantılı ve her bir tuş yerine bu sıra-sütunlar mikro kontrolcüye bağlanıyor.
Dolayısıyla unit testler yapmaya başladım. Örneğin, kabaca mikrokontrolcünün 2 ve 6. pinleri klavyedeki X tuşuna denk geliyor gibi. Böylece öncelikle mikrokontrolcüyü hiç boarda bağlamadan çalışıp çalışmadığını, boarda bağladıktan sonra aradaki soket bağlantısının doğru olup olmadığını buzzer/diyot modları ile anlayabildim. Daha sonra her bir sütunun soket bacakları ile diyot bacaklarının kontrolcüye bağlantısı var mı, sağlam mı kontrollerini yaptım. Çok büyük kolaylık ve hangi lehimi hatalı yaptığımı bulmamı sağladı.
Ayrıca “hand-wired” olayını da burada anladım. Aslında bir PCB’ye ihtiyaç olmadan direkt kablo ve soketler ile bu matrix oluşturulup klavye yapılabilir. Sanırım öncelikle hand-wired’dan başlamak bu matrix’i anlamak açısından da daha iyi olabilir.
https://blog.roastpotatoes.co/guide/2015/11/04/how-to-handwire-a-planck/
Sonuç olarak iki boardu tamamladım ve başarı ile çalıştırdım. Sıra birbirleri ile iletişimine geldi. Burada en çekindiğim kısım USB-C bacaklarını lehimlemekti. Bir kaç teknik okuyup orada da önce boşa çıkmış bir boardda deneme yaptım. Ferrit bead ve şarj kontrol devresini de lehimledim. İlki iyi oldu fakat ikinci USB-C’yi lehimlerken sanırım kısa devreye sebep oldum ve boardlar birbiriyle konuşamadı. Fazlalıkları temizlerken yine boardun birine, USB-C kısmına zarar verdim.
Böyle olunca kabloludan vaz geçip daha önce aldığım Nice!Nano’lar ile kablosuz bağlantıyı denedim. Sorunsuz çalıştı fakat pil ve power switch ihtiyacı oldu. Çünkü bu board bunları desteklemiyordu. Bunları da ayrıca temin edip (3.7v 600mah pil kullandım) derme çatma bir switch bağlantısı ekledim. Sonuç olarak elektronik işleri bitti.
Son Dokunuşlar: Kasa Yapımı
Kasa olarak 3D print edilebilir dış kasası, ayrıca sandwich için alt ve üst plaka dosyaları yaptığınız klavyenin github repolarından erişilebilir. Yukarıda saydığım boardların tamamında topluluk desteği çok iyi olduğu için farklı kasa dosyaları bulabilirsiniz. Burada ya 3D print olanı bastırıp kullanabilirsiniz veya alt ve üst plakaları DXF dosyalarını CADCut.co gibi bir servis kullanarak lazerle kestirebilirsiniz.
Ben ahşap bir kasa denemek istedim. Elimdeki atık ahşaplardan yekpare bir dış kasa yapmaya karar verdim. Fakat ilk denediğim ve elimdeki en büyük yekpare parça dişbudak idi, oyma ve kesmede çok zorlandığım için vazgeçip elimdeki çam plakalardan bir kasa yaptım, oyması ve şekillendirmesi kolay oldu. Aynı zamanda bilek desteği de istiyordum, ikisi tek seferde çıkmış oldu. Üst support plakayı ise 3D printer’dan bastırdım.
Sonuç
Sonuç itibarıyla bir haftasonu bitirmeyi hedeflediğim proje yaklaşık bir ayın sonunda tamamlanabildi. Çok keyif aldım ve süreçte onlarca yeni şey öğrendim. Zaman zaman çalışabileceğinden ümidimi kestiğim için daha çok fonksiyonaliteye yoğunlaşmıştım, yeni boardlarda estetik olarak da iyileşmiş modeller yapmak, bu modeli de aktif olarak kullanmak, yöntemlerimi iyileştirmek ve devamında bir handwired Dactyl Manuform üretmek istiyorum.