玛丽苏 发表于 2016-1-7 10:44

教你如何DIY一把可编程无线优联40%的机械键盘

本帖最后由 玛丽苏 于 2016-1-7 11:01 编辑




[前言]
随着电竞方面政策的开放,机械键盘这些年在国内也火起来了,同时国内的机械键盘客制化玩家也变得多起来。入坑客制化几个月,国内的客制化模式还比较单一,主要就是PCB、外壳、键帽再加上灯,有创新的也不是没有但比较少(比如BLE6,这个全球惟一BLE客制化60 PCB)。自己想要的键盘买不到,或者说太贵,那么,我只能自己动手了。
所有操作都没什么难度,所用到的东西都是现成的,我只是把这些东西按我的用法来实现了我想要的结果。重在想法,在我之前没人这么用过,也希望本文能给大家一些启发和帮助。




准备工作主要指需要的材料,所有物品淘宝及闲鱼购得。这算是我的第一个无线40%机械键盘的尝试,所以成本控制得较低。这个完成之后的下一步就是做一个更窄边框更轻薄的无线40%机械键盘,40%这个尺寸在tmk固件的配合下我日用起来是毫无压力的。

名称数量价格
亚克力夹心外壳(闲鱼)133元
MKC金属脚垫(淘宝)220元
樱桃轴(39颗茶轴、1颗青轴)4080元
卫星轴6.25x(淘宝)110元
罗技K230无线键盘(京东)189元
ARDUINO USB Host Shield (淘宝)144元
Arduino Leonardo R3(淘宝)124元
松下2032电池(天猫)511元

除开键帽后花费大致如上再加上邮费若干,除了壳我买到的价格较低一点外,其他列出的都是正常价。上面价格并没有包含键帽,键帽的价格不具有参考性,因为它可以下到几十上到过千。

然后说说,为什么选择使用优联呢?原因之一是我不是搞开发的,做蓝牙键盘我根本不会,先前的BLE60其实在编程功能以及续航上(日常使用两到三周)都比较满意了,但是我做不出那样的产品。另外,优联相比蓝牙也还是有几个好处的:
1是搞干扰能力强于蓝牙;
2是续航超强,两节AAA电池用一到两年;
3是键盘唤醒速度比蓝牙快,从节能休眠状态中唤醒几乎感觉不到明显延迟。

关于优联飞线,网上搜索“优联 飞线”能找到不少的帖子和教程,都得飞成下面这样,而且一边飞还要注意时不时测试有没有线接错了。(以下图片来自网络)



然而有了DIY有线机械键盘的经验,直接连接标准矩阵的话,是这样的,看上去简洁多了。有兴趣的可以看看国外这个教程(地址直通)。


因为40键盘,如果不支持按键编程,是根本没办法正常用的,那还怎么让人输数字,怎么让人输符号了。然而,罗技的优联主控,并不能进行全键盘按键编程,虽然用按键增强软件能实现部分功能(比如ahk),但那并不是我想到的。因此介绍一个重要物品——USB to USB Keyboard Converter(github地址,geekhack地址)。
简单来说,这个转换器的原理就是获取usb键盘输入它的按键值,再输出新的值到PC上,因此用它可以实现tmk固件的各种高级功能。geekhac上有作者销售的成品,也有自己制作的方法。我这个是先前做的,制作最简单,就是Arduino Leonardo R3和ARDUINO USB Host Shield 叠起来就行了。


上面这个体积是比较大了一点,还有一个比较小的组合方式,用Pro Micro或者Teensy加上mini host shield,体积就会减小到如下图所示。


当然买作者hasu的成品会更小,只是价格较贵,50刀,邮费8刀。


简单介绍完USB to USB keyboard converter后,接着继续,这次用的是罗技k230的主控,对于要使用的主控,最先应该测出该主控的按键矩阵,k230和k270网上都有现成的,k230的如下(感谢Luckybird929)。


我将其整理成表格的形式如下,方便用我自己的方式飞线。


然后这次使用的是jd40的布局,总共40个键,四排的按键数依次为12 11 11 6。此处的作法就是我所用方法的关键了,我只保证每个按键都触发而不用管它是否对应。因此,我从k230的矩阵中选择了四列,如下图所示,蓝字为k230优联主控的接口以及对应按键,红色为之后要重映射第0层大致的按键。


讲到这里大概理解我做了什么吧。
小结一下:
1.简化优联飞线。
2.使用USB to USB keyboard converter从usb接收端进行按键编程。



在焊接前第一步,我先把外壳的边框给打磨了,亚克力外壳的边框切割痕迹比较明显,我是略微有点不能接受的。下图是打磨前的。

然后是打磨后的。


因为没有使用PCB,所以将轴直接固定在上壳同时也是定位板上,这次使用的是茶轴,空格为青轴,啪啪啪的青轴用在空格上,用来保持打字时的节奏。


背面每个轴再用热熔胶固定一下,因为这个定位板是可开轴盖的设计,所以热熔胶固定时只固定了上下两个位置。不用担心不牢固,我已经插拔多次键帽,没有把轴拔出来过。飞线的连接方式可以参考Part 1里给出的国外玩家写的教程,这时需要注意的是二极管的方向,连接前测试好,对于k230的主控,二极管黑色端接1、2、3、4这边,红色接10、11、12、13这些。接二极管主要是为了防止按键冲突,这样做到了全键盘任意6键无冲。


空格键需要一组6.25x的卫星轴,我是拿一个废键盘的PCB切下一小部分,再打孔固定卫星轴的。如果是自己做外壳,还是建议使用定位板卫星轴或平衡杆。前面行线上已经二极管连好,现在接好列线,我用的OK单芯飞线,别用网线,太硬了超难用。


接下来,按Part 1里给出的图,将行线和列线都连接到K230的优联主控上对应的针脚,同时电池要用的线也接好。这个外壳比较薄,所以使用CR2032电池来供电,根据另外一个飞线优联小伙伴的使用情况(他是104键盘盘丝洞式飞线),几毛钱一颗的杂牌2032也坚持了2个月。这里故意将线留长了一些,万一以后哪个轴有问题时有足够的空间将主控提起来,然后换轴。


底部贴上防滑脚垫,前方用了两个mkc金属脚垫来让键盘使用时有一定的斜度。


还有底壳上开了一个小孔,正好对应在优联主控开关的位置。


这下键盘就组装完了,把接收器直接插电脑上试试,所有按键都是触发的,当然并没有和键盘上按键位置对应上,按键会在Part 3里再解决。


最终再装上键帽后,效果图如下。









对于软件或硬件开发,我的经验是0,所以下面的过程只是按我的理解与方法来的,有不正规的还请程序猿大大包涵,有错误的也请指正。不会编程的照做也可以,本身并不需要多少编程知识,后面的改布局,依葫芦画瓢改就是了。

首先是搭建编译环境,我的操作系统是win10,不想安装Linux,因此在windows下首先安装cygwin。
1.安装时选择了安装Devel和Shell下的所有组件,其他基本是默认。
2.安装dfu-programmer,安装方法是按照github上给的Linux下安装的方法进行编译与安装。地址直达:https://github.com/dfu-programmer/dfu-programmer
3.安装avr8-gnu-toolchain-installer-3.5.0.84-win32.any.x86,这是从官方下载的,下载完解压后,复制到cygwin文件夹里。
4.尝试编译USB to USB keyboard converter使用的固件,这个在Part 1里给出的github以及geekhack的网址里都有介绍,如下:
Build firmware
--------------
    $ git clone git://github.com/tmk/tmk_keyboard.git
    $ cd tmk_keyboard
    $ git submodule init
    $ git submodule update
    $ cd converter/usb_usb
    $ make
如果编译不成功,根据错误提示补全cygwin的组件。
5.将生成的hex刷入,win下使用的arduloader来刷的,这个win下刷hex的工具足够的傻瓜和简单。


以上步骤完成,测试USB to USB keyboard converter是正常使用的,那就ok。下面才开始编译适用于本贴DIY的无线40用的固件。
用记事本打开tmk_keyboard\converter\usb_usb\keymap_common.h看看,会看到如下:


这个排列看上去挺眼熟的,对吧。它就是一个标准104键的按键布局,为了后面更加方便进行修改,把这个布局改成40了。根据上面图片提供的按键值,40的话就应该如下图所示。


再依照上图修改keymap_common.h文件,得到如下结果。


接下来就是利用kle(Keyboard Layout Editor)和tkg来生成按键布局的源码了,这方面可以看看我写过的一个教程:PDF的百度网盘地址。
我用的是三层布局,按键如下:


因为是jd40布局,而amj40也是这个布局,所以tkg里直接选amj40。然后将raw data复制过去,再设置好各个fn的功能。之后点击“下载.c文件“。


将下载回来的.c文件重命名一下,比如我改为了keymap_yang.c,再移到tmk_keyboard\converter\usb_usb\目录。这个文件目前是不能直接使用的,还需要做一些修改。对照一个该目录下的其他几个keymap*.c就会知道怎么改了。大致如下,红框内的内容删除,蓝框内的稍微修改一下。


最终的结果就是下图这样的。


现在可以开始编译了,因为我先前重命名了为keymap_yang.c,所以编译的时候使用命令为
make KEYMAP=yang
编译成功后得到usb_usb.hex,刷入USB to USB keyboard converter,一切工作正常。
上面通过kle及tkg来完成,当然也可以直接编辑keymap*.c这个文件,多对照看看就知道它是怎么样的格式以及各个按键的写法了,只是我觉得kle看起来更直观一些。

小结:可以说USB to USB keyboard converter是本文的关键,只要自己会搭建环境编译固件了,那么就不存在难度了。



本来只是想分享一下这次制作的无线优联40键盘的,结果写得较多就干脆写成教程了。
USB to USB keyboard converter是个好东西,事实上除了用来飞线40外,像60键盘也可以通过此方法来飞线成无线键盘,并且支持编程。甚至是想给普通的无线键盘或者usb键盘使用tmk固件功能,也可以通过它来实现。
虽然说自己没有能力去开发一个无线键盘主控,但是,利用本文的方法还是制作出了自己想要的键盘,我还是很满意的。而且,这个键盘非常非常好用,毕竟优联本身已经是一个相当优秀的无线方案了。
最终成果是,一把日用主力40%无线机械键盘,重量270g,轻于Surface Pro 3的超薄原装键盘套(约300g)。
下一把的打算是:外壳也自己订做,上下两层改用碳纤维,中间夹心夹还是亚克力,但是键盘四周的边框会收窄到几近无边程度。同时,厚度会再稍微缩减一点,布局会修改一下,采用双空格。



PS:本文转自chiphell

人见百态 发表于 2016-1-7 11:02

帅气啊 看来是学不会了

キョン 发表于 2016-2-26 23:42

那么如果想改成蓝牙的 需要修改那些地方呢? 而且 蓝牙的可以编程么。。。。

キョン 发表于 2016-2-26 23:44

或者说 有关于蓝牙开发的相关帖子推荐么。。

fjkdashg 发表于 2016-8-22 14:57

楼主有做好的 USB to USB keyboard converter 出手么? 求一个

fjkdashg 发表于 2016-8-22 14:58

有出的话 给我邮件 1010777500@qq.com
页: [1]
查看完整版本: 教你如何DIY一把可编程无线优联40%的机械键盘