Contents

又做了一把分体键盘

Contents

到底是哪个大冤种有了一把无线分体键盘还要再折腾一把呀?没错,就是我。

之前做的Redox大多数情况下的表现都能让我满意,但是用了很长一段时间之后发现有下面这些缺点:

  • 右手边的电池越来越快用完,频繁要充电,不知道是哪里漏电了。即使我从升级口的杜邦针vcc和gnd引出来接了一个外置的16500电池800mAH,也是顶不了多少天(左手好好的,两个月好像都没怎么充电)

  • 左右手的顶部那一行按键会有不同程度的低概率性重复触发,比如你明明只按了一下等号,有时候给你蹦出两个。这种情况通常发生在电池电量不足的时候,可是我已经换上了16500电池了,排除电量不足的情况。我还以为是轴的问题,但是换过轴之后发现没什么改善,然后不同的按键都有发生这样的情况。我开始尝试改动固件代码(研究一下nRF在线文档会有很多关于gazell的参数),包括增强接收器的RF功率(反正它是有线供电),调整跳频的频道,调整跳频的策略,都没什么改善,我认为主要原因还是我这里无线和蓝牙设备太多,2.4G拥堵不堪,但是我又没办法改变环境。

  • 键盘整体的高度比较高,如果不配合碗托来使用的话,时间久了手还是比较累

说真的Redox在功能上完全满足我的要求,但是上述的小缺点特别是第二点,经常会影响我的打字正确率,也就影响我的输入效率了,这对于一把键盘来说已经是很严重的问题了,如果可以让我选择,我大概会选择做回有线版本的Redox。

于是继续在Reddit留意各种分体式键盘,github搜索相关仓库,发现有不错的方案如:Lily58、Corne、Sofle、Taira、yaemk-split-kb、Hillside。看起来**Sofle的无线版本**比较适合我的情况(上面还说会选有线,男人的嘴😒):

  • 布局和Redox不会差太多,避免我要重新适应打字习惯
  • 矮轴方案,即使不加碗托,打字时间久也不容易累
  • 制作很简单,没有Redox那种nRF模组非常难焊接的情况,可以自行选择要不要显示屏,要不要RGB LED
  • 蓝牙,这次是真无线了,不需要接收端的dongle了,有时我想临时将Redox用在另一台电脑得拔插接收器(🤪就是这么懒)
  • 电池可以自行决定大小,当然越大容量的电池,整个键盘就越厚

评估了制作难度、BOM成本之后(客制化你跟我谈成本?🙄),觉得还是可行的,于是就开始筹备制作啦。


首先还是来看看BOM,除开可选的部件,总花费大概在470元,其中轴体、键帽、轴座这三者占了成本的64%,这是由于原作者选择了用凯华的choc矮轴,这个轴体本身就卖得贵且没有平替,键帽的接口还很特殊,搜遍淘宝和1688都没有几家可以选择,也贵得很。

名称 规格 数量 金额 备注 参考链接
键盘PCB 14.34cm x 11.17cm x 1.6mm 5 58.42 下单数量最小5块 嘉立创下单助手
顶板 厚度建议2mm 2 10 左右手各一块 https://item.taobao.com/item.htm?_u=mo1inp9a7e&id=651631113540
底板 厚度1.5或者2mm 2 10 左右手各一块 同顶板一起做
键帽 1u,无刻 5*12 108 没有盲点键,除非加钱 https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5d5c2e8d0Y48pX&id=678927387084&_u=mo1inp25c9
键帽 1.5u,无刻 2 10 拇指用的那两个,5元一个实在是太贵了 同上,如果你能接受拇指用1u,可以省掉这10元,只买上面的1u就够了
轴体 凯华kailh 1350 choc 矮轴 60 150 我选的是Red Pro,实在太贵了,想念灰木轴的第1天 https://detail.1688.com/offer/746946448047.html?spm=a360q.8274423.0.0.3adb4c9aBEdO8V
轴座 凯华kailh 1350 choc 轴座 100 33 最小起订量100个 https://detail.1688.com/offer/667262443442.html?spm=a360q.8274423.0.0.3adb4c9aBEdO8V
主控模组 Promicro NRF52840开发板 2 34 无名科技店铺的比较贵,其他不同店铺卖的应该都是一样的 https://detail.1688.com/offer/821015371555.html?spm=a360q.8274423.0.0.3adb4c9aBEdO8V
锂电池 306080(2200毫安) 2 28 这个也不知道有没有虚标 https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5d5c2e8dOEFqQz&id=722350288911
电池插座 2P 弯针 散装 4 1.6 其中运费1.5元 https://item.taobao.com/item.htm?spm=a1z0d.6639537%2F202410.item.d692484033608.59667484gtCNyy&id=692484033608
六角双通铜柱螺母柱 M2x8 20 2.2 10个就够了 https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5d5c2e8dE83MyE&id=41574313055&_u=to1inpbaa4
扁头十字螺丝 M2x4x5 50 1.63 10个就够了 https://item.taobao.com/item.htm?id=627952509933&_u=do1inp5559
轻触式开关按键 3x6x4.3白色贴片2脚 20 2 2个就够了 https://item.taobao.com/item.htm?id=747746363803&_u=to1inp28c0
拨动开关 MSK12C01白头 1.5H 5 2.15 2个就够了 https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5d5c2e8dE83MyE&id=750325778032&_u=to1inp8241
贴片二极管 1N4148WS WT 丝印T4 1N4148W SOD123/1206 100 2.9 好像上次做Redox有用剩下的?算了,照买 https://item.taobao.com/item.htm?id=767537420414&_u=to1inpa0ef
单排圆孔排母晶振座子 1*12P 单排母(金孔金脚) 4 3.6 算上运费了 https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5d5c2e8dE83MyE&id=618909020300&_u=to1inpa517
单排圆孔排母晶振座子 1*12P 单排圆形排针 4 3.6 算上运费了 https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5d5c2e8dE83MyE&id=618909020300&_u=to1inpa517
热插拔铜座 带帽款 16 8.8 我还没想好要不要旋钮,先都预上吧,你确定只要按键的话,其实买6个就够了 https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5d5c2e8dE83MyE&id=712646618380&_u=to1inp4298
尼龙隔离柱LED塑料绝缘套管 4.2x7x6.5 100 4 为了对顶板提供更大的支撑 https://item.taobao.com/item.htm?id=667897055348&_u=to1inp134c
磁吸数据线(选配) 1米 1 17.8 为了充电和升级固件更方便 https://item.taobao.com/item.htm?id=711546045002&_u=to1inp5cc3
单独磁吸头(选配) Type-C 2 15 和上面的线配套,每边一个 https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5d5c2e8dE83MyE&id=711546045002&_u=to1inp5cc3
3m背胶磁铁(选配) 圆形10x1.5mm 20 5.8 为了将两块分体直立起来吸住 https://item.taobao.com/item.htm?id=736182704845&_u=to1inpe339

我这里选择无显示屏的方案,一是因为显示屏耗电,二是我不知道有什么需要显示的,电量?没有就充呀,NumLock?你都没有数字小键盘区域。CapsLock状态?这里的布局压根儿没把它放在默认层,我平时也是直接用Shift的。

遥想当年2014买第一把机械键盘是IKBC的F104,559元,那时候还不带灯,但是pcb上预留了灯的焊盘,自己买单色直插式的灯珠来加上,玩得津津有味还写了一篇文章发到外设天下去。现在人到中年已经过了玩灯的年纪,很佛系了,打算做的这套Sofle是无线的,靠电池的话,RGB灯估计也耗得很快,干脆省事不加灯了。

不得不吐槽的是,这个凯华矮轴不是MX轴那种常见的十字轴心,键帽一点都不好配,淘宝找了一圈就只有几款可以选择,综合之下我选择了这套质量看起来不错的无刻键帽。我是2001年左右练成的盲打,尔来二十有三年矣,键帽是否刻字并不影响我的速度。

/images/build-sofle-keyboard/IMG_058842.jpg

原作者原文里,小电池(301230)版本用的六角双通铜柱规格是5mm长度的,这个只适合将小电池放在主控模组下面的空位的情况。一开始我看错了,买回来发现我这大电池怎么那么厚装不上啊?仔细一看,原来要12mm长度的才可以,但是我自己算了一下总厚度,其实买8mm的就可以了,没必要搞那么长的,但是为了保险一点不要买两次,我就在同一间店把9mm的也买回来了,事实证明8mm都还有很多余量,电池还可以买厚1~2mm(或者铜柱买短一点7mm),但是看起来淘宝那些锂电池卖家的规格其实都差不多是固定那几十种,很难找到你刚好需要的,只能将就一下。

还得提一嘴,如果你按原作者的做法(下图),单靠红框里5个铜柱的那点儿圆环面积来支撑顶部PCBA的话,安装好之后会发现顶板摇摇晃晃的,我安装键帽都怕把PCBA按断了。

/images/build-sofle-keyboard/PixPin_2024-11-10_23-56-09.png

所以后来我买了尼龙隔离柱来套住铜柱,增大支撑面积,整个支撑就结实稳定多了,要注意这个隔离柱的高度要根据你的六角铜柱的高度来选的(懒得算的话就抄我作业吧),图的话看后面的组装过程。

作者原来是让我们顶部的轴固定板也用PCB打板来做的,但是我看了一下嘉立创的报价直摇头,还好原仓库的pull request里有一个用亚克力做固定板的,我就直接采用他提供的cad设计文件扔给淘宝报价了,也就是找上面BOM表的顶板链接的商家,设计文件可以在这里下载。


组装

东西到齐大概是这个乱七八糟的样子

/images/build-sofle-keyboard/IMG_0354.jpg

首先一定要搞清楚,为了降低打板成本,PCB的设计都是做成既可以是左手键盘,反面又可以是右手键盘,我们在焊接的过程中一定要分清楚自己在做左手边还是右手边,别酿成两个分体都是左右或者都是右手的悲剧了。

选一个风和日丽晴空万里的日子,搬一张小桌子在阳台,微风不燥阳光正好。

/images/build-sofle-keyboard/IMG_043001.jpg

这里我还是用我的白菜白光电烙铁,高温海绵没找着,用韧性极佳的湿纸巾代替了,弯头镊子也是老演员了。首先焊二极管,注意二极管的丝印是“|T4”这样的,有那一竖的那头就对准PCB上的二极管丝印有一竖的那头,如下图,然后焊上去就行了,如果你是焊接新手,B站是你的好老师。

/images/build-sofle-keyboard/IMG_043102.jpg

像我这种作案手法极其老练,哦不,焊接手法极其娴熟的老手,一会儿就全搞好啦,只要仔细注意不要搞错朝向,都是体力活,没有难度。

/images/build-sofle-keyboard/IMG_043203.jpg

然后就是轴座了,元件尺寸比较大,比二极管容易多了,先确保你的方向没有摆错,看清楚PCB上轴座的白色丝印,有一边是三个角45度的,另一边是两个小半径圆角的,与轴座的形状对应,别搞反了。

/images/build-sofle-keyboard/image-20241118000835145.png

尽量保证轴座和PCB贴合,然后给一只脚上锡,然后给另一只脚堆满锡,再回头给第一只脚堆满,大概效果就是下面这样了

/images/build-sofle-keyboard/IMG_043904.jpg

/images/build-sofle-keyboard/IMG_044005.jpg

下面就是整个焊接环节里最难的一步了——热插拔轴套筒。这个东西太小了,而且突出PCB表面不多,很容易在你焊接的时候送锡过多把锡给上到孔里了,堵住了孔就相当于废了。这里真心建议你如果不是非要上旋钮的话,没必要焊足7个套筒,我这里是因为那时年少轻狂年轻气盛年富力强不知死活,所以上足了7个,其中就经历了一次堵孔😫

/images/build-sofle-keyboard/IMG_044106.jpg

/images/build-sofle-keyboard/IMG_044409.jpg

这里我先把它们都用透明胶固定先,然后将PCB反过来,露出它们的腚,看我下面的图,注意别搞反方向和位置啊!

/images/build-sofle-keyboard/IMG_044510.jpg

注意每焊一个都要把烙铁头的锡清理一下再继续下一个,避免烙铁头挂锡太多,一下子就被套筒吸过去堵住孔了,总之就是小心点,如果你像我一样踩狗屎很不幸堵住一个了,我只能建议你加热拔出来换一个吧

/images/build-sofle-keyboard/IMG_044914.jpg

好了,过了这一关,后面的都湿湿碎了(小儿科),这里我把两块PCB反过来(看清楚下图套筒的样子),先焊两组开关,这里两个拨动开关脚比较多,小心一点就好,而轻触式开关的话没任何难度。

/images/build-sofle-keyboard/IMG_045015.jpg

下面就是焊接主控模组了,一定要注意,每块PCB上有4列纵向的插孔,如上图,我们的目标是被丝印竖线串起来的那两列不是被框住的那两列

/images/build-sofle-keyboard/IMG_052318.jpg

这里我还是用透明胶带先固定住排针母座顶部,然后将PCB翻过来焊接底部引脚,两列都焊接完。再强调一次,一定要分清楚PCB的方向和元件的方向关系,别焊反了。

/images/build-sofle-keyboard/IMG_049517.jpg

然后就是把主控和排针给焊在一起了,但是焊接之前先留意主控的PCB底部有个开路的BOOST焊点,如果你的电池是大容量电池,就建议把它短路起来(建议用0欧电阻方便点 ),当然不接也行,充电慢而已,也不是不能用,上班节奏已经如此紧凑了,过一下慢生活怎么了?

/images/build-sofle-keyboard/ProMicroNRF52840Foot.jpg

像我就堆了一坨shit,哦不,一坨锡上去。

焊针的时候一定要注意⚠️ 针是12pin的,主控模组是13个孔的,要空出靠近Type-C口那边的第一个孔,千万别焊错位了,拆焊要把新手拆崩心态。焊的时候也是先给一个针头上锡,调整好方向不要左右歪斜之后再焊其他针头。

/images/build-sofle-keyboard/IMG_052519.jpg

焊接好排针的主控模组就是下面这样子啦,担心它Type-C口太松,我还加了四坨锡在固定脚那里,用磁吸头的话没必要加。

/images/build-sofle-keyboard/IMG_052620.jpg

然后小心对准母座,可能会有个别针有点偏,用镊子一一拨正对准孔之后,再慢慢用力按进去,切忌大力出奇迹。

/images/build-sofle-keyboard/image-20241118010837620.png

两个都做好之后🥹

/images/build-sofle-keyboard/IMG_053024.jpg

接下来就将板子再翻转过来,在顶面焊接电池插座,注意电池的正负极和插座针脚对应的孔的正负极丝印是否一致

/images/build-sofle-keyboard/IMG_053226.jpg

我的电池是打算这样摆的

/images/build-sofle-keyboard/IMG_053125.jpg

焊工就告一段落了,下面就轻松组装了,先把螺丝和亚克力顶板还有铜柱连起来拧紧,然后再插入顶部PCB板的螺丝孔里

/images/build-sofle-keyboard/IMG_053327.jpg

忘了撕掉亚克力的保护膜了

/images/build-sofle-keyboard/IMG_054629.jpg

然后给铜柱套上塑料绝缘套管,再将电池用双面胶粘紧到亚克力底板上,将底板盖在套管上,用螺丝穿过底板拧紧铜柱(步骤很简单没详细拍照了,这里用了组装好之后的图,白色的四个圆垫可以忽略)

/images/build-sofle-keyboard/IMG_056835.jpg

然后装上轴,小心点不要用力过猛,建议边沿位置没有支撑的地方用手捏住顶部PCB和亚克力板再压紧轴。

/images/build-sofle-keyboard/IMG_054932.jpg

全部装好之后就下面这样,好像亚克力板的轴位开孔有点间隙配合了,轴比较容易掰起来,孔应该再开小一点。

/images/build-sofle-keyboard/IMG_055033.jpg

两只手🙌 主控已经插上了Type-C的磁力接头

/images/build-sofle-keyboard/IMG_057036.jpg

背面看到每边的底部都有白色圆点,其实是双面胶来的,一面是亚克力底板,另一面是圆形的磁铁,为了可以将两个分体键盘吸紧,后面有图

/images/build-sofle-keyboard/IMG_057137.jpg

拿出上次做Redox用剩的胶脚垫

/images/build-sofle-keyboard/IMG_057440.jpg

自己确定一下位置咯,我这里为了方便两个磁吸起来,脚垫两边是错位的

/images/build-sofle-keyboard/IMG_057541.jpg

就是这样吸住,然后竖起来放桌面啦

/images/build-sofle-keyboard/IMG_057238.jpg

/images/build-sofle-keyboard/IMG_057339.jpg

安上键帽之后

/images/build-sofle-keyboard/IMG_058943.jpg

/images/build-sofle-keyboard/IMG_067444.jpg

/images/build-sofle-keyboard/IMG_067545.jpg

好了,硬件方面就是这样组装完毕了,接下来就是要下载(烧录)软件(固件)到两个键盘里。


固件

ZMK的固件编译基本上都给你铺好自动构建的东西了,不需要像搞Redox时一样,要本地搞docker创建容器来编译。而nice!nano的bootloader让下载固件简化到只需要像U盘复制文件一样简单,不需要任何专用的swd类烧录工具。

获得固件有两种方式:

  1. 直接用我github编译好的固件(没梯子点这里下载
  2. 重新按zmk的指导,在github创建一个自己的zmk配置仓库,然后按需求修改自己的配置,再通过github actions自动编译出固件

两种方式显而易见,第一种省事,直接用现成的,但是会受限于我的个人布局习惯,你用起来可能不爽;第二种就是要步骤多一点,但是可以完全定制你自己的键盘布局和特殊功能。

第二种方式搭建好你的zmk仓库之后,用在线编辑器就可以自由地定制你的键盘功能啦!我开头不知道,只能瞎摸索zmk文档,改个按键得编辑配置文件,进度很慢,后来发现在线编辑器简直就是神!

/images/build-sofle-keyboard/keyboard-editor.png

受限于篇幅,对于如何创建zmk仓库和自动编译我就不展开了,下面简单介绍一下我日常使用的键盘配置,我是个Emacs+evil重度使用者,平时操作基本都是vim那套。

如上面的截图,键盘分成3层:0、1、2,其中0是默认层(default_layer),也就是平时单按下什么按键就触发该按键的键码发送给操作系统。

这里可以看到在0层,我左手键盘最底下拇指区域从右往左能按的是delete、backspace、反斜杠、星号、Win键。

而backspace的按键上有个&mlt和1,&mlt是我的自定义动作,用来在按住的时候启用某层,这里就是启用1层的意思,短按立即松开是backspace。既然按住是启用1层,那么如果我想连续触发backspace往左删除很多字符怎么办?这就是我自定义动作的意义了,按一下backspace然后松开,然后再按下不松开,此时就会触发连续按住backspace的效果。

而&mt的动作就是简单的短按是反斜杠,按住不松开是Ctrl,同理短按是乘号,长按是左ALT键;&kp就是简单的单按,没有特殊功能,即win按键单按松开就触发一次,按住再按R就是Win+R的效果。

而右手拇指附近是回车、空格(层2)、左方括号(右ALT)、Win(还没想好改什么按键更好)。

所以你看我的拇指其实挺忙的,两只拇指管理了6个按键共10种功能,另外还做了一些快捷组合键,比如我的微信是Ctrl+Alt+W显示/隐藏窗口,我做成了backspace+&show_wx触发,而企业微信就做成了backspace+&show_wxe,对了,锁屏Win+L跨老远了,我做成了backspace+delete,平时中指+食指一起按下两个键就锁屏了。

/images/build-sofle-keyboard/image-20241126003717995.png

然后上面就是层1(lower_layer),当我左手拇指按住backspace的时候,我再按下上面除了&trans的键位之外的按键,都会触发上面的按键功能;比如我按backspace+字母A的位置,输出的就是叹号了,这样说就很简单了对吧?看起来只有60个按键的键盘忽然就不缺按键用了,但是别忘了我们还有右手拇指按住空格键触发层2(upper_layer):

/images/build-sofle-keyboard/image-20241126004241334.png

如你所见,右手主要用来做箭头按键和翻页,Home、End等,按起来并不会很麻烦,而左手边主要是一些辅助功能,比如切换蓝牙设备(可以连4个电脑切换使用);类似的,右手拇指按空格+&show_wsl1会触发一个组合键,将我特定窗口标题的emacs窗口激活放前面;剩余的大片&trans意思是穿透这一层,用回0层的按键功能,因为我实在不知道还要加什么功能了,只能空着😅

定制好你的按键之后,点击save就会自动提交到你的仓库,然后触发Actions自动构建,去Actions页面找到最新的构建输出文件下载回来解压得到两个文件,分别是左右键盘的固件。然后用USB线连接键盘,双击复位按键,【此电脑】里就会多出来一个像U盘一样的盘符,双击打开,将对应的uf2文件粘贴进去,就完成下载了,然后键盘会自动复位,然后运行起来的就是新的固件代码了,比起QMK简直是领先了一个时代。


好了,其实写文章的时候,键盘我已经用了两个多月了,优点缺点都已经完全摸透了,只是一直很懒,没下定决心动笔写这篇组装教程。

下面对比一下Redox,Sofle的优点是:

  • 组装起来真的简单太多了

  • 编译不需要专门的开发环境(需要🪜不算啦),下载固件不需要专用的工具

  • 更新键位功能也不算麻烦(Redox用QMK那边有更强的VIA热更新按键)

  • 真正的无线,而且可以连多台电脑(用快捷键切换)

  • 更矮的高度,手掌不需要与台面离开很多,手腕会更放松

  • 更轻便简单的结构

  • 更大的电池代表更强的续航

  • USB直连左边键盘到电脑的话,可以有1KHz的回报率,完全没有延迟的感觉

而缺点:

  • 没有丰富的MX轴可以选

  • 没有丰富的十字键帽可以选

  • 蓝牙连接容易受到强干扰影响

  • 轴体安装后不够牢固

总的来说就是优点多多,缺点也不是无法忍受的那种,每天高强度使用两个多月下来,我是非常满意的。除了蓝牙受到强干扰有时候会断开,断开后重连可能要4~10多秒,这个就很烦,但是也没办法,我们毕竟是研发部门,附近的蓝牙、WiFi、其他协议的2.4G通讯,都非常非常多,糅合在一起就非常拥挤了,有时候实在断开比较频繁,我就只能把磁吸数据线连上电脑,临时变成有线模式,不受任何无线的干扰了。


废话

同事看到我又从Redox换了新键盘,问我“为什么你这么喜欢搞这些东西?”,我想说“因为~~学医救不了中国人(鲁迅真的没有说过)~~热爱折腾啊!因为每天的大多数情况下我都是面对着键盘,我搞舒服一点,效率也会提高,损伤会降低,心情会变好啊!程序员为什么总是不断重复造轮子?不就是因为别人造的轮子不是按我自己想要的样子滚吗?”,但是我只是笑笑,什么都没有说,因为我明白我们不在同一个频道。就如我们部门就我一个人用Emacs,是我爱搞特立独行吗?只是其他同事觉得vscode适合他们,而我觉得它还不够好,而且我愿意花时间去了解、学习Emacs而已,但是我完全尊重他们的选择,绝不会说要劝他们用Emacs之类。

还有同事好奇问我键盘没有字你能知道按什么按键吗?合着我用这个键盘不是为了打字,是专门用来装B给你们看的嘛?😂

Sofle Wireless是个好键盘,前提是你是Vim/Emacs用户,而对于常规用途的用户而言(说到这里我又想起我那些连盲打没贯彻的同事了),用这个键盘并没有太多的收益,顶多是减缓一下你的肩周问题。而且用上这样的分体键盘,很多键位你都要重新适应,实在是一般人不会愿意投入时间去做的事。如果看到这里你还坚持要打造这么一把键盘,那你一定是发自真心的热爱了😆

感觉此后很长一段时间我都不会再折腾键盘了😜,因为我感觉Sofle目前基本就满足我的需要了,下次我再做键盘的话,估计就要等到我有动力学KiCad之后自己layout了,搞自己理想的键位布局,能换便宜的矮轴规格,能有超多的键帽选择的那种。

感谢看到这里,如果你也做出来属于你的Sofle了,请别吝啬向我分享你的喜悦!