程序员对机械键盘的需求不止于情怀,当然,对于算法工程师、逻辑复杂而代码量小的软件工程师来说,平时对键盘的操作并没有那么多,可能对机械键盘并不感兴趣。而我曾经是一个日常大量编码、运维的数据工程师,逻辑简单,键盘操作却很多,特别是对十几台服务器ssh不能用鼠标,更增加了键盘的用量。为了统一工作流程,我使用vim作为Windows、Linux的唯一编辑器,让c/c++/python/shell的工作统一到了一个环境中,效率也增加不少。但是这种工作模式让小拇指难以承受,经常到晚上下班时小拇指疼,加班的时候就不能很爽的敲键盘了。
造成小拇指负荷的主要因素是薄膜键盘的手感不佳,和ctrl键的键位不合理。一般使用的台式机薄膜键盘按键按下时发涩,阻力不确定,有时顺畅,有时突然卡一下。笔记本键盘稍好,但关键问题是薄膜键盘的触发是在按键全部按下后,薄膜触点接触时按键按下,没有滞回效果,按下后需要持续发力,只要发力不均匀,即使按键位置在最底端没动,实际信号仍有可能中断,对组合键持续操作产生致命影响。由于我已经将vim的上下翻页键配置成组合键alt+j/k,日常最多的操作就是快速持续翻页,薄膜键盘的特性让这个操作时常卡顿,很不舒服。
而机械键盘就可以解决这个关键问题,其按键的触发仅取决于按键位置,并具有滞回效果,只要保持按键按下,即使手指的力度已经发生颤抖,按键信号仍然不变。对于长时间的工作,可以使用红轴,让按键力量最小,减少手指疲劳。
我的第一款机械键盘是code,一个厚重的全键盘,大小写转换按钮可配置为ctrl,这样,小拇指的运动距离缩短了不少,施力角度也省力,保证了全天的键盘操作,加班也能狠狠的敲。
但是code的键盘布局与普通键盘并没有太大的变化,常用的操作:上下左右、home、end、page up、page down在右侧,操作时,需要右手离开主键盘,造成操作中断。
而HHKB的60键布局解决了这些问题,其ctrl键原生就在大小写转换开关的位置上,通过fn组合键实现上下左右等按键,以及F1~F12功能键,让手部活动降低很多。
但是HHKB的空格键很长,Fn组合键不好按,上下左右与vim不统一。受minila的启发,我决定自己做一个机械键盘。
minila键盘图片:
自制机械键盘使用59键布局,以小为美(便宜)采用短空格,充分利用大拇指,将fn放在大拇指位置,不仅实现被省略按键的组合(兼容vim习惯),还实现一些常用功能,如shift+del、alt+printscreen等。还加入了鼠标功能,由组合键实现。当然,既然自己做了,就把键盘灯也加上,每个按键有一个LED,可实现20级亮度调节。
使用stm32f103vbt6作为主芯片,led使用压降3v的高亮管,1k限流电阻,大约1ma电流,59键大约60ma,主芯片单片可承受。
感谢网站http://www.keyboard-layout-editor.com提供了键盘设计自动化图纸生成:
网站 http://builder.swillkb.com/ 可转换为dxf文件,直接导入pcb软件,大大简化了设计。这种按键配置的键帽肯定是没有现成的,只能买无刻键帽凑合一下。甚至有些按键的长度和高度也找不到匹配的,所以最后空格键选用了很长的右shift,左右各留了一点空隙。实际按键的键帽与设计不符,自己用自己知道就好。就是别人用我的键盘的时候会很麻烦
此键盘的按键并不是扫描键盘,而是每个轴体都有一个引脚。通过一个引脚时分复用,实现led亮度调节和按键状态传感。这是此键盘与众不同之处。我没看过其他键盘的方案,自己的机械键盘也没有拆解过,所以全凭自己想象来了。部分按键原理图:
这一版用的3.3V电,走asm1117-3.3线性稳压,效率低。下一版应该改成usb 5V直接给LED供电,改大限流电阻,或者找更高导通电压的led
扫描和灯的控制共用0.5ms的时隙,10ms为一组,每个时间组首先扫描按键,扫描完成后按照灯的亮度设定设置引脚是否需要输出。10ms后重新设置为输入模式扫描按键。所以按键扫描频率为100Hz,led的PWM频率为100Hz,占空比为20档。
USB描述符配置申请500mA电流,使用100mA时,键盘容易掉。
我的焊工并不专业,凑合看吧。一开始使用的助焊剂有问题,未洗板上电短路,废了2块板子。后来改用松香助焊,看着磨叽,好使。
芯片还好焊,主要是按键定位孔开大了,按键左右摆,要焊完把歪的轴体扭正。usb线本来是要用microusb接口,但是可能买的接口质量太差,插两次就接触不良。后来改用飞线将usb引到外置转接板上,再用热熔胶固定到壳体上,这样插拔时的侧向力能够得到缓冲,就好使了。再后来直接将usb线焊接到电路板上,壳体打孔引出,加热熔胶固定。
一般人第一眼看到这键盘都会说,你这怎么空了一块,不能补上吗?我就会说:这就是diy的个性风格(不会补)。主要是担心裸露的PCB吃灰进水。这是使用两年效果:
还不算脏,但轴体吃灰会导致不灵敏,所以长期放置需要套袋,或者盖布。另外,吃外卖的时候会溅到油,弄到电路上没事,弄进按键里边就不好擦了,不过所有键盘都是这样的。
刨去diy过程中个性定制的logo、LED图案和新奇感,使用时带来了不少便利,是很实在的,偶尔换回普通键盘感觉还是很明显:
1、优先使用大拇指,实现组合键
2、将Ctrl移动到caplock处,取消caplock,减轻了小拇指负担
3、方向键使用vim风格,home end pageup pagedown也使用hjkl实现
4、使用键盘模拟鼠标,用于连贯动作,减少键鼠切换,主要鼠标操作仍通过实体鼠标实现
5、键盘尺寸小,降低空间占用,减少手的移动范围,便于携带
6、无段落感的红轴,减缓手部疲劳,易于使用组合键并通过按键时长实现光标鼠标移动以及滚屏的连续控制
7、使用消音胶垫,进一步让感觉变软、变轻,降低噪音
最后给个开源的链接:包括pcb图和基于keil的源码,未使用固件库
https://github.com/yangzigy/yz_keyboard
自己做键盘看似简单实际上挺折腾,关键是麻烦,各种小物件要分别采购,而且非标键盘很难配件,还要焊接。所以有很多朋友要做都没有做成。但是如果习惯了vim体系的操作,不妨花些功夫定制一套,会离不开的