DIY键盘记录——剑盘SwordBoard
恩,正式开始我的DIY键盘了。。
为了防止之前项目都没有一个好名字,先起个还凑合的名字”剑盘“....
目前没有很多想法,想先用arduino做一个分体键盘,基本功能和Ergodox一样。
目前已有的成果:
Ergodox 工程文件(打开方式kiCAD):http://ergodox.org/Downloads/ErgoDox_PCB_Designed_by_pbiphany.zip
某大神分享的自己DIY键盘工程文件TOHKBD里面好像还有键帽的STL文件一类的,电脑没装暂时还看不到。。。
https://github.com/dirkvl/TOHKBD
现在在找主控的型号,好像大部分用的都是ATMEGA32U4我在找命名规则。。
好像终于搞清楚了U4好像就是能模拟成USB 设备。
2015年12月14日 UPDATE:
接下来是记录下Ergodox对我来说不方便的几个地方,我的想法是因为估计会普通键盘和ergodox一起用,防止精神分裂,尽量无痛的在Erogodox和普通键盘之间切换
- F1-F12键以及对应在mac上的功能键的位置在zxcv下面。。
- 没有小键盘
- 大拇指上的按键太多了
- []|‘这几个键被移到了其他的位置
2015年12月15日 UPDATE:
恩,找了一下Ergodox和model 01两个键盘的配列
model 01的默认配列 默认的Ergodox库,空白键是需要自定义的他们共同的问题是因为键盘其实是一个倒三角的,然后如果变成直上直下的话,右手有几个键就会多出来,和左手其实是不对称的。。。具体的说是[]'这三个键,另外esc也要换到其他的地方,我还是想不更换这几个键的位置,再想想。
2015年12月16日 UPDATE:
今天晚上仔细的看了下Ergodox的设计(主要是pcb方面),收获不少。
先说一个最简单的,为了让左右手都用同样的板子,在引脚上做的变化。
而原版的cherry轴的引脚本身是这样的。
原版cherry轴的引脚下面多出来的这几个是为了适配不同封装的二极管,上面的则是为了让正反都能插上。
然后是在边缘的有灯的地方加的灯位。
这部分我没有特别看懂,可能要拿一个实体才能看懂。但是大概是意思应该是可以让一个轴横过来,但是好像少了两个孔。位置在每排的最右边。
接下来这个是我觉得很厉害的一个地方。可以看到这样的设计可以让最终的键盘既可以放置两个1x的键,也可以放一个2x的键。
以及画了人生第一个eagle的库。。
2015年12月16日 UPDATE:
额,今天又有一些顿悟。。。原来我想的是两个引脚我直接用线连起来,然后今天发现原来原理图上的一个符号可以关联多个引脚。。。然后修改后现在的库是这样的。操作的话点图左下角那个append就行。。然后改了下原理图的引脚顺序,因为sw2一定会链接D1的所以这样连线方便点。
然后变了下其中一个引脚的焊盘形状用于区别方向。
在新建12或者21通用的按键,发现这里还有一个精妙的地方
红框部分的二极管是可以共用的,不管是放一个2x键还是放两个1x键的下面的轴,都是共用这一个二极管的2015年12月17日 UPDATE:
qq群里有人介绍了一个网站:http://builder.swillkb.com/ 可以自动生成钢板cad图。然后里面需要用到这个网站生成的数据http://www.keyboard-layout-editor.com/
2015年12月18日 UPDATE:
莫名其妙好像变成每日打卡了。。。
总之今天写完了两个库,后面可能还要修改,不过总算的开始自己慢慢学会eagle了。。
2015年12月22日 UPDATE:
额,前几天没有更新不过还是做了些事情。
首先,最终的布局确定了是这样。
手绘版本kle版本
网址是http://www.keyboard-layout-editor.com/#/gists/bd4b96720686773f2365
2015年12月24日 UPDATE:
然后画了一个左手的
2015年12月25日 UPDATE:
恩,突然发现2x的键好像还要有卫星轴呵呵呵呵。。。
然后就是今天买轴的时候发现原来轴有2种,5脚和3脚的,5脚的话可以不用钢板,cherry原厂的是无钢板的,但是一般货很少,而且3脚的价格是2.5一个左右,5脚的价格是3一个。不过,因为不用钢板,所以少了钢板的钱,然后也不用话钢板的图了,打算第一个先用5脚茶轴吧。然后我计算了下我这个总共需要78个1x的键,二婚11个2x的键。然后卫星轴10块一个。。。找了半天终于找到一个5块的。。
另外有r1,r2,r3,r4几种。还有OEM和原厂高度两种,买的 时候要注意一下。这里有一个用r几的图
图片来源:淘宝卖家
然后因为想用无刻的彩色键帽,而pbt无刻的大键位没有,可能要先买abs的了,据说看不出来区别,而且我想了下好像大键位除了回车用的也确实不多。。
另外发现之前的库好像没有画卫星轴的脚,等轴回来了我照着画一下吧。。。
2015年12月26日 UPDATE:
我噗。。。。。。
原来最大的坑是键帽。。。就是平常用的键盘每行的形状是不一样的。。。。。我擦为什么有这种设定。。。。然后现在大键部分就不知道怎么办了。。。买了几个abs的,然后1x的买了彩色的。。。等回来看看吧。。。
2016年01月07日 UPDATE:
恩,好几天没更新,不过这两天还是做了一些事情的,首先是把mega32u4的周边电路基本画完了,然后今天弄了写USB hub的周边电路。。
然后就是因为大尺寸的打样不是要加钱么。。所以我可能会先弄一个小尺寸的验证下画的是不是对,然后想做一个只有几个按键的小键盘,测试下是不是成功。然后再做大的键盘,不过我今天看到竟然有开源的5按键键盘。。。https://github.com/kairyu/staryu
2018年01月02日 UPDATE:
恩,不知不觉就过了2年了。。。。。。。。最近打算重启这个项目。。。然后发现了有人做出了Ergodox的一个新的变体Ergodone,资料在这里:
最近看到了另外一个基于ergodox的方案,觉得很不错。这个是作者的简书文章,介绍了固件怎么下载:
https://www.jianshu.com/p/1d37d1f015a4
这个是淘宝的链接:
https://item.taobao.com/item.htm?id=534570622972
这个是github的地址:
https://github.com/ktec-hq/ErgoDone
然后看到了一些新的资料,首先是tmk,一个基于32u4的固件,图纸是kicad画的,不过有点麻烦的是我不太懂他的那种makefile的方式,好像是配置mk文件然后生成hex文件上传到芯片上,知乎上有人翻译了原作的一个教程:
https://zhuanlan.zhihu.com/p/21470513
另外看到了一个台湾人的做的项目,我觉得确实基本达到了我要做的所有功能。。。不过他是用线连的。。。。搞的有点蛋疼。。。
有人做了一个键盘的主控kimera:
https://github.com/kairyu/kimera
确实挺不错的
然后有一个叫qmk的固件,据说是tmk增强版本
https://github.com/qmk/qmk_firmware
但是这个类的方案看起来确实有点吃力,下载回来后电脑上会是一个makefile和一堆c和h文件,之前没接触过linux这类的东西,实在看不太懂。。。
github上有人建了一个我觉得最和我想近的项目:
https://github.com/mannuray/ergodox-firmware-arduino/tree/master/src/keyboard
算了算了。。。看了一下午眼睛都疼了。。。
还是打算自己从头写软件把。。。感觉也不比用tmk,qmk什么的少什么事情。。。。
发现一个神器http://kbfirmware.com/ 图形化写配列自动生成文件,关键是支持arduino pro micro,不过不支持分体。。。
2018年1月4日 UPDATE:
今天搞懂了一个东西。。。
之前一直没懂红框里面是什么功能,现在发现原来还有这种黑科技。。。
然后ergodone和ergodox不一样的有一个地方是用mcp23017代替了mcp23018,然后这两个ic的区别我在官网上看到的区别主要是最大的总线速度。查了下arduino的论坛好像一般只能增加到400k,有人说可以800k的。 。而mcp23017最高也支持1.7M,mcp23018的3.4m其实是没用的。。。所以我觉得也就用mcp23017吧。。。
MCP23017MCP23018
2018年01月05日 UPDATE:
用了这么就才发现原来arduino还有一个DFU mode的东西。。。http://coopermaa2nd.blogspot.jp/2011/11/atmega8u2-arduino-uno-ftdi-usb-to.html这么说其实不需要mkii也可以把arduino弄成midi和hid设备。。。
2018年1月7日 UPDATE:
这两天把线布了一下,打算明天先去打个样看看有没有什么问题,现在已知的一些问题是是因为左右手之间是用音频线的,所以只有四根线相连,主副手之间的I2C通讯用了vcc、gnd、sda、scl,所以有一个严重的问题。。。。就是灯的话是没法传输信号的。。。有点尴尬。。。
2018年01月08日 UPDATE:
突然想到也许可以两边各用一个32u4,然后用串口在主从机之间通讯,这样还有一个好处是两边其实都可以做主机了就。
2018年1月11日 UPDATE:
嗯。。。。然后我觉得既然自己做要不就做的还是完善一点吧,所以先在的方案是这样的。。。左右手各有一个32u4,然后两个usb type-c的接口,一个用于当主机和电脑连接,另外一个用于连接主机和从机,这样两边都可以当主机了,然后灯的控制问题也解决了,然后还用上了type-c。但是有个问题是type-c的资料比较少,连eagle的库都没找到。。。。sparkfun、adafruit、seeeed都没有相关的开源板子。。。所以基本要自己弄了。。。
2018年01月13日 UPDATE:
今天把板子画好了送去打板了,然后发现atmega32u4的封装用错了= =。。。。想想需要手焊QFN的atmega32u4还是有点痛苦。。。。
2018年01月17日 UPDATE:
恩。。。。。下单后立刻发现用错了32u4的封装。。。。
2018年1月19日 UPDATE:
额。。。据说usb两根线要长度一致。。。。。
2018年01月20日 UPDATE:
恩,今天突然想到一个问题,其实即使是两个arduino主机和从机之间可以用i2c通讯,这样的话串口就可以空出来给后面的蓝牙升级留出空间。
然后写代码的时候遇到一个问题是比如下面这个图,如果row输出的话因为输入引脚只能上拉,所以是不能工作的,如果想要工作必须要把二极管反接,然后才行,但后来看了别人的代码发现原来可以把row变成输入。。。然后col变成输入,这样row就可以上拉了。。。
恩,然后板子张这个样子。。。
2018年02月06日 UPDATE:
偶然看到这个键盘用的灯控是IS31FL3731这个芯片,然后adafruit也有这个芯片的板子和库,是一个扫描矩阵芯片
https://geekhack.org/index.php?topic=48851.250
2018年6月13日 UPDATE:
恩。。好像有过了一年(农历),然后今天偶然看到了这个项目,就是用arduino实现LUFA的所有功能https://github.com/Palatis/Arduino-Lufa
我觉得这个有一个更重要的意义是,arduino原来可以引入普通的avr项目,那么用arduino实现qtouch应该也不是不行的。。。
另外现在灯控我也基本搞明白了,可以看我那个扫描矩阵的博客,里面介绍了好几个芯片,选型的时候主要需要看下是不是支持单点的亮度调节。。。很重要比如IS31FL3730不支持,而IS31FL3731就支持。。。切记切记。。。
扩展Arduino键盘库的功能
arduino的keyboard是不能发送媒体信号的(上一首下一首什么的),然后这个人写了一个https://www.stefanjones.ca/blog/arduino-leonardo-remote-multimedia-keys/不过我觉得他的方法不太好的地方是改了系统层面的库却新加了一个类,我觉得应该是这样的,直接扩展在keyboard.press()传进去的参数,这样调用的方式是一样的