從 0 開始,手打一把專屬的藍牙雙模人體工學鍵盤 (0)

此為系列文,目前已完成的文章列表:

  1. 從 0 開始,手打一把專屬的藍牙雙模人體工學鍵盤 (0)
  2. 從 0 開始,手打一把專屬的藍牙雙模人體工學鍵盤 (1) 製作左手
  3. 從 0 開始,手打一把專屬的藍牙雙模人體工學鍵盤 (2) 設定 BLE
  4. 從 0 開始,手打一把專屬的藍牙雙模人體工學鍵盤 (3) Debounce
  5. 從 0 開始,手打一把專屬的藍牙雙模人體工學鍵盤 (4) 定義 keyboardMgr class
  6. 從 0 開始,手打一把專屬的藍牙雙模人體工學鍵盤 (5) 製作右手
  7. 從 0 開始,手打一把專屬的藍牙雙模人體工學鍵盤 (6) 基礎鍵盤
  8. 從 0 開始,手打一把專屬的藍牙雙模人體工學鍵盤 (7) 軌跡球

約莫在一年半前左右,當時我還在用的鍵盤是一把 60 % 的鍵盤 (當時還弄了一個藍牙轉接器)。

bluetooth keyboard adapter 的封面照

直到某一天,我發現這種一般配置配置的鍵盤打起來還是有諸多不舒服的地方,例如常常要按的 Enter 會讓我的小指要做這樣的動作

每當要按下 Enter 的時候,為了要讓小拇指可以按到 Enter,所以右手的手腕就要折一下,久而久之手腕就會覺得不太舒服。此外還有如果要按方向鍵的話,右手就要滑動,從原本的 JKL; 按鍵的熱區

移動到方向鍵區

然後再移回來。

在這三個主要因素的影響下,我開始去尋找有沒有能夠解決這三個問題的方案。這幾個問題某些標準配置的鍵盤可以透過軟體,讓鍵位重新配置 (remap) 或者是按下多顆鍵來觸發成某一個按鍵被按下的事件。我嘗試使用了 MacOS 上的 Karabiner ,讓 capslock 鍵變成了觸發起始鍵,而我本身是一個習慣用 vim 的使用者,因此我讓我的鍵盤有了以下的功能:

  • cpaslock + h = left arrow key
  • capslock + j = down arrow key
  • capslock + k = up arrow key
  • capslock + l = right arrow key

這確實讓我使用的蠻順暢的,但 Enter 鍵的問題還是沒解決,而且要按 capslock 的左手小指其實是比較沒有力氣的,久了還是會覺得不夠舒服。


就在此時,我突然發現了一把名叫 Ergodox 的鍵盤

這是我第一把自己打造的 Ergodox 鍵盤

這是一把 opensource 的鍵盤,他把該鍵盤的 PCB 開源出來可以讓人下載,並且裡面的每一個元件都是可以買來自己組裝的。會發現到這個鍵盤是因為當初那個藍牙鍵盤轉接器專案早期放在 github,很多文件跟 license 還沒明確寫出來的時候,有個美國人發信來問我版權的問題,然後跟他來信幾次以後,他推坑我用 Kinesis advantage 這把鍵盤

圖片來自 https://www.kinesis-ergo.com/shop/advantage-for-pc-mac-refurbished/

但因為實在是太貴而且沒好的門路可以買… (那時還只是個窮碩一生。不過後來懂怎麼自幹鍵盤以後有去淘寶買壞掉的,最便宜 NTD 1200 可以買到,然後自己修),所以就無法下手。但沒想到 google 圖片搜尋的地方就看到了 Ergodox,就此走進一條不歸入。

Ergodox 在我自己使用後,我覺得他有以下幾點好處:

  1. 他充分利用了你的大拇指,這也是我覺得最重要的部分。你可曾注意過,其實你的大拇指明明就很有力氣,但其實他只有按少少的幾顆鍵 (Space,了不起 Ctrl(Command),在旁邊的 alt 已經很不好按了,除非你滑動你的整個手掌)。 其實你的大拇指是可以負擔更多事情的,例如在我自己的 Ergodox 鍵位配置上,左手的大拇指負責了 space, command, esc,而右手的大拇指負責了 enter, layer toggle。 layer toggle 也就是類似 Fn key 的功能,按下去後整個鍵盤的按鍵都可以變成另一顆按鍵。也因此,Enter 會折手腕的問題解決了,而按下 layer toggle 下去後,我的 HJKL 變成同 vim 的左下上右,而且 ”;” 按鍵會變成 backspace,因此我的右手基本上都在 jkl; 這個熱區,也不太需要大幅移動去按右上角的 backspace 刪除東西
  2. 他是分離式的鍵盤。這點是在我用了從淘寶買來壞掉的 Kinesis advantage 並修好使用後得到的比較。這可以讓你很自由的決定雙手要怎麼擺放
  3. 他提供 configurator,讓你方便修改整個鍵盤成自己想要的樣子。目前多數的鍵盤是沒有這樣的功能的,但如果你會做鍵盤,這點另當別論。
  4. 便宜。如果你照著他的指示把零件買來自己組的話,比 kinesis advantage,model 01 都要便宜上非常多,大概是他們價錢的 1/3

而且因為這把鍵盤是你自己做的,所以你可以塞更多有趣的東西,例如我就加上了一顆小軌跡球跟滑鼠的微動開關 (這邊要小平反一下,這個軌跡球是輔助功能,就像小紅點一樣是給你方便用的,不是要拿來取代滑鼠的)

這也是我的 github 專案的說明影片截圖,可以看到我把軌跡球裝在 Ergodox 上面,讓我的右手大拇指去操作軌跡球

雖然他有諸多好處,但使用了一陣子以後還是覺得還有改進的空間。第一個就是如果你帶出去用,要組起來的時候要插很多條線。再者,他左右手之間的連線是使用 3.5 音源線,使用這個音源線的共通毛病就是: 母座頻繁的插拔容易接觸不良,再從接觸不良到壞掉。另外我接觸過的 configurator 專案都有點小肥,原因是他們蠻多都從一些 tmk 開源專案之類的長上去的,對於想要看他的 code 改更細部設定的人來說門檻是比較高的。也因此,我在最近做出了一個改進版的 prototype: BlueErgo

BlueErgo 也就是 Bluetooth + Ergodox,但這個 Bluetooth 並不是指讓這個鍵盤變成一般給電腦接的藍牙鍵盤

而是我讓左右手之間的通訊也用藍牙溝通,然後因為都做到這個地步了,乾脆也把整把鍵盤都做成雙模的算了,可以插線用也可以用藍牙跟電腦連接 XD

這整個專案我採用 Arduino 進行開發,所以只要你會玩 Arduino,那麼你也就可以對你自己的鍵盤的韌體做更高程度的客製化! 你覺得單純的 push/toggle layer 太單調不足以滿足你的使用習慣? 自己寫一個!

接下來我會再寫 8 篇的文章,配合已經放在 github 上的 repo ,讓我們從最基礎的鍵盤電路做起。騷年

讓我們一起用 Arduino 長姿勢,順便弄一把珍愛自己雙手的人體工學鍵盤吧!

P.S. 該專案目前只是 prototype,我使用了幾天後也有些值得改進的地方,但改進的方法已經會牽涉到很進階的嵌入式系統 program,版權問題等等。如果這個專案獲得熱烈迴響的話,我會考慮在日後於群眾募資平台上推出一個完整的 DIY kit,有專屬的 PCB 鍵盤,所有組裝零件。

那麼在這個 Intro 的文章結束前,我來列一下會使用到的東西:

工具類

  • 焊接工具: 焊槍,銲錫,跳線,吸錫槍等
  • 燒錄工具: 燒錄 arduino pro mini 的 programmer,如 FTDI 232

零件類

  • 你喜歡的機械軸 * 75 (或 76,如果你選擇不裝軌跡球)
  • 1N4188 二極體 * 80: 光華買得到,他一組就是 10 根,所以就直接買 8 組。另外他有 SMD 跟 wire 的版本,兩種都可以,因為 Ergodox 的 PCB 上都可以插
  • 鍵帽一組: 你可以選你喜歡的鍵帽,有些比較特別的鍵帽可以單獨買。
  • 2.2k 歐姆電阻 * 2
  • 現成的 Ergodox PCB 版 * 2 (注意: 淘寶上買得到,但淘寶上也有人賣自己改良的 “普及版”,該種版本可能與我後續文章中的腳位不同) (該 PCB 不分左右手的,是你事後把軸焊在哪一面,他就是左手或右手)
  • 現成的 Ergodox 外殼 * 1(這間淘寶的老闆人不錯,基本上他也有賣一個 kit 可以組一個原始的 Ergodox)
  • Arduino pro mini * 1 (8Mhz/3.3V 或 16Mhz/5V 版本的都行,3.3V 的版本省電,但運作比較慢一點,但已足矣)
  • Sparkfun pro micro (Arduino pro micro) * 1 (8Mhz/3.3v 或 16Mhz/5V 版本都行,建議對 Arduino 沒那麼熟的人買 5V 版本,此原因在後續的文章會說明)
  • BLE HM-10 模組 * 2
  • MCP23018 IO expander * 1 (該 IC 有出多種封裝,請買這種封裝的)

可選類零件

  • 鋰聚合物電池 * 2: 能塞進去鍵盤殼內的就行了,要多大可以自己決定,但要注意你買的電池如果是沒有帶保護晶片的,在選購充電模組的時候要選有保護晶片的
  • 充電模組 * 2: 常見的有 TP4056 等,需根據你的電池選擇。一般的 TP4056 是沒有保護晶片的,如果你的鋰電池上面沒有保護晶片,在選購的時候要特別注意要選有加保護晶片的 TP4056 (會比上面那張長一點點)
  • 微動開關 * 1: 這個是我用來當作滑鼠右鍵的,如果你不想要就可以不管它。你也可以選用其他你喜歡的電子零件開關,可以參考我最終的成品
  • Blackberry mini trackball * 1: 要注意 Grove 也有出,但那個是採用 I2C 的方式通訊,會和我的教學不同
  • Bluetooth HID 模組 * 1: 這邊的選擇有很多,只要是能被辨識成 HID 的藍牙模組即可。我這邊採用的是(偽)RN42,以前我也用過 Bluefruit EZ-key等都是可以使用的,但根據你的模組,可能會需要在程式中做一定程度的修改

以上這些就是 prototype 會用到的所有必要基本零件,什麼,你說為什麼你沒說那個看起來很炫炮的支架為什麼沒提到? 這個… 他就是塑膠銅柱跟螺絲螺帽鎖起來的,我發現我用的這組殼其實可以買金屬銅柱直接鎖到殼的背面去,這樣你也可以自己選你喜歡的銅柱高度去組出你想要的高度

那就請各位繼續收看接下來的 8 篇 post 了,不過先預告第一篇可能會過個幾天才出現,因為要畫一些圖解釋什麼是 keyboard matrix,如此才知道那個二極體方向要怎麼焊 (要是全部方向都焊錯不打緊,可以從程式上修改,但如果只焊錯一兩個那就只能解下來重焊)