Noodlefighter_OSU_keyboard_v2_工作日志

2015-07-30 将原日志转至新网站并拆分成两篇文章


项目描述:

制作一个开源的两键无冲usb机械键盘,旨在舒服和廉价的打osu(一个音乐游戏,standard模式下一般只用得到两个按键)

(廉价=成本控制在30元左右,舒服=降低疲劳度,开源=项目到了可用的状态即公布所有制作方法、源码、pcb)


2014/03/29

音游狗,穷,买不起机械键盘,看到osu贴吧上有人做一种叫“触盘”的东东就寻思着自己也弄一个玩玩。

然后发现手上给atmel芯片烧程序的ISP线是用低端avr做的(atmega8),也就几块钱,usb接口芯片都要十块钱这样(求别提CH340),就琢磨着做个键盘。

查资料发现市面上的avr芯片搞起的小玩意都是用一个叫avr-usb的开源库做的,开源工程还挺多,就随便找了个hid工程来改了。

一开始的设计是这样的:

外壳用易加工的软木做。

然后一下子就被玩osu的朋友们否决了,因为制作困难,预期手感不佳。

后来重新考虑了外壳设计,看到淘宝上有钣金加工服务,一问价,这样大小的一只大概50元,10只起做,GG.

闲时自己重新布线手工做了个板子,买了个接线盒当外壳看看手感如何,结果成品效果比较差,延迟大概10ms和稳定感差(固定不好),且两键互相冲突(开源项目的程序 没改就用了),无法正常使用,图如下:

接下来这个小工程就搁置了几个月,后来寒假看到有人用亚克力做电子制作的外壳,淘宝上找了一下似乎只要提供图纸就能加工,就自己画了个图纸:

作好图之后想说开学再找店家加工,后来一开学就做起项目,又搁置了,现在有点空,就再画了个板子直接送厂加工,大小5x5cm足够小了,外壳之后怎么做这个板子都能用吧:

osu这个游戏需要触发快键程短的按键,一开始想说用红轴,但是红轴的提前触发让人难掌握,所以试制时用的是茶轴。

发现淘宝有一种胶圈能改变机械按键的键程,这个胶圈在这里应该能派上用场,等工厂把板子发来就焊上红轴+胶圈吧。

提高工作频率到16M,自己改改程序成无冲的,希望能把延迟降下来,提升手感。


2014/04/09

板子到了 焊上了 程序还在调,不知道怎么修改usb设备描述才能做到同时发送两个按键按下的信息。。。

贴吧上有人能做到1ms延迟简直碉堡了,试着鼓捣鼓捣。。


2014/04/20

亚克力外壳拿到手了,但是由于压克力板不是标准的3mm导致外壳组合性差,故重新设计(一层一层堆砌到合适的高度的设计)

关于程序,用的是http://symlink.dk/electro/c64key/ 的,拿起就随手改了。

能达到平均4ms延迟,加入了严格的10ms才算放开的按键检测。放弃使用16M晶振了,这样的延迟已经满足需求了,上了茶轴,连打杠杠的(自我感觉)

自己试玩了几天,没发现什么问题。

两天前让大触帮试了,电路板和程序应该是没有问题的。(目前最大的问题是键帽,希望能找到惯性更小的键帽)

所以现在已经可以把pcb和程序放出来了。pcb的cad是dxp,已经生成cam文件了。

http://pan.baidu.com/s/1dDinlIx

外壳方案还有待验证.


2014/05/13

外壳做出来了,效果良好。

玩了几天,没发现明显问题,共制作了10台,让亲友们试用。

效果良好,极限测试中能DT BPM180(稳定DT BPM175)

改进建议如下:

  • 希望能添加ESC键
  • 有时候上电无法工作,试第二次才行
  • usb口大小有些勉强(by本人)
  • 突起的帽型螺钉影响手感
  • 应把外壳痛贴层放到底层之下(by本人)
  • 希望能自定键距(by超级叫了姥爷)

于是欲制作第二版,改进如下:

  • 增加esc键
  • 晶振电容改为22pf 因27pf有可能无法起振。。。(囧没看好手册)
  • usb接口稳压管改成贴片封装,大滤波电容改为钽电容,进一步降低板上除了机械按键以外期间的高度
  • 帽型螺丝改为扁螺丝
  • 外壳痛贴层放到底层之下
  • 自定义键距(22 30 37mm三种距离)
  • 增加几个功能设置位,支持用pcb跳线改变按键映射设置(配合改变键距功能)(AS ZX AD ZC)
  • avr单片机从atmega8换为atmega48,晶振改用20M,进一步提高扫描率
  • 增加一个RGB,LED…..=-=自己爽爽~呵呵呵
  • 取消按键灯设置跳线,将背景光开关跳线做成了pcb跳线
  • 选用直插minii-USB-typeB,更加稳(焊贴片usb口苦了我,而且还买到了劣质的口)
  • 为了配合外壳的usb开口,将pcb上的螺丝孔改变了位置

板子已经在制作中了,有望下周拿到,给他制作外壳。


05-28

试验板,功能正常

今天花了点时间修改pcb:

  • 为了配合mini外壳,稍微变更了一下元件布局,使元件离开边缘,并把四角改为圆角
  • 只保留4个螺丝位
  • 功能设置跳线数量变更为7个 把按键灯开关跳线设置到了正面(io用占用了程序下载口,防电平冲突)
  • 按键灯可控
  • 按键部分 增加了5脚轴用的固定孔

画了个迷你壳:把板子作为外壳的一部分,迷你壳不支持可变按键间距,只能使用标准的22mm间距

做迷你壳是为了尝试小壳的稳定性和使方案更廉价。

改进了外壳,用2mm亚克力板,usb口更合理,支持自定义键距(牺牲了美观我觉得..)

共6层 不算脚垫和螺丝 厚12mm ,esc键无键帽。

最近比较忙 ,等外壳到了再写程序把。

把一些计划的设定放上来:

  • RGB灯可以搞做很多花样,于是跳线数量又得增加。
  • 蛋蛋说希望按键灯可控,于是又有花样可以玩了。
  • 最近也是在做别的项目,正好写了个软件PWM花样变换的程序,换20M晶振之后,花一点资源去搞些花样应该不为过吧。

跳线设置设计:

  • JP1 按键ZX ZC选择

  • JP2 JP3 JP4 rgb灯于闲置时的颜色:RGB灯无效/RGB闲时不亮/米黄/暖红/艳紫/亮蓝/暖橙/瞎眼白

  • JP5 JP6 按键灯模式:闲时呼吸灯/常亮/按下才亮,渐暗/按下就灭 ,渐亮

    补个当时第一版的q君帮测试键盘的视频:

http://www.tudou.com/programs/view/pmLWTsbN1Uk/?resourceId=0_06_02_99


05-31

(请无视这只无用的手)

花了点时间写了个PWM调光程序,现在能调出任意颜色的LED了。。。玩法就多啦哈哈

目前打算做成手速计的样子,击打时,统计3秒内的打击次数

根据统计结果(BPM?),底部发出不同的颜色(蓝->黄->红->紫)大致这样..软件上也不难实现,也不会吃太多资源。

(精确统计有点麻烦,但是单纯的分时段进行统计的话,空间上只需要一个uint8变量;时间上,扫描按键时做一次加法,每3s进行一次计算次而已;硬件资源上,占用一个定时器资源(或者和其他功能复用一个定时器))

程序改用新版的v-usb库,运行频率提升到20Mhz,测试一切正常。 按键延迟能达到1ms了,平均3ms。

外壳紧固件打算吸收超级叫了姥爷的方案(;w;这个算抄袭了喂!),法兰螺丝一部分高度藏在底板内。

而用来连接亚克力外壳的螺丝,改用平头的,亚克力的顶面板把口开大一点,就能把螺丝头部高度缩小。

P.S.收到了骗钱盘咯感谢超级叫了姥爷!!


06-03

写出了手速计程序,差不多是这样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* 颜色表 (尽可能多一点) 
* 只有非闲置状态才显示颜色(闲置:20s无按键即闲置,闲置时呼吸灯或无灯)
* 序号 BPM上限 颜色 折算3.2Sec打击次数 色值
* 0 20 淡蓝 4 100,149,237
* 1 60 亮蓝 12 65,100,225
* 2 110 淡绿 24 180,238,180
* 3 140 米黄 32 255,222,173
* 4 170 亮橙 36 255,140,0
* 5 190 暖红 40 250,128,114
* 6 205 大红 44 255,0,0
* 7 225 紫红 48 255,20,147
* 8 245 深紫 52 148,0,211
* 9 260 白偏紫 56 255,230,255
* 10 260以上 金 60以上 255,201,0
*/

=-=反正我只能按到大红………………..于是我临时用了个慢了四倍速。。。拍了一段效果。

(图大,略)

某人说直接变换太突兀了 闪来闪去的。。。

后来分析是颜色之间过度太少

还有光强度不一致导致的,修改程序让光强统一了。。(搞这灯真是麻烦啊)

还硬着头皮做了个渐变..hha效果自己看着还行

又拍了一段效果 这回是全速的…(我能上225我自己都不信..=-=)

视频:http://www.tudou.com/programs/view/AncpiJOtSm8/


2014/06/05

鼓捣了一天 发现atmega48的程序空间不够用了。。。就不该省这点钱的。

总之受空间限制,功能就只能做到这里了。

最终设置能力如下:

以及三个键同时按下:

切换按键3的定义:ESC/F1/F2/F8/space

P.S.本来计划是做成可以多设置几项,然后用电脑屏幕当作命令行输出的,这个创意不错吧,只是需要占用的程序空间又要进一步增加,做不了了。看着键盘自己打字什么的。。T T现在做不了了,只能稍后编出来自己爽了。。。还是在纠结要不要做这个功能。。。因为很帅啊!!!很帅!!这功能肯定要做的。。只不过没办法在这一批的量产中做了。


06-06

咳咳昨天的想法被推翻了

现在做出了用按键定义按键1 2 以及按键3 和闲置时背景光 的程序 效果还不错,就是容易勿触发(已经有改善方法了,就是保持按键后1s后才触发)

操作方法:

(按键1+按键2)+(按键3) =定义:ESC/F1/F2/F8/F12/space/右

(按键2+按键3)+(按键1)= 定义:zx zc as ad qw qe

(按键1+按键3)+(按键2) = 定义:闲置背景光设置 16色

修改结果能掉电保存

然后经过这样的测试

http://www.tudou.com/programs/view/Ebb5NSTBDM4/

让我觉得“=-=结果是比较失望的,这张图的串子不是很长,还有由于渐变功能,3.2sec达到较高的bpm好像对于这种不太吃手速的图效果不是很明显。。。接下来会缩短手速的采样时间…”

之后修改了采样时间为1.2sec 缩短了一半的渐变时间

然后经过这样的测试

http://www.tudou.com/programs/view/wIJdYYCzPaA/

发现效果明显有改善,短串子也能看到一点黄光了。。。比较能体现实时手速。


06-09

艰难的把程序减小到了正好4k ;w;

其中缩减了一些功能,比如说闲置时的呼吸灯效果… 闲置时背景光从16个降到了14个..

顺便对设置功能进行了优化,为了防止误触发,已将触发时间设置为0.5s。

可设置项目修改为:

JP2   JP1    按键光
0    0     常亮
0    1     常暗,按下变亮
1    0     常亮,按下变暗
1    1     不亮

JP3-JP6     未定义

(按键1+按键2)+(按键3 0.5s) = 按键3定义:ESC/F1/F2/F8/F12/space/enter

(按键2+按键3)+(按键1 0.5s)= 按键1 2定义:zx zc as ad PageUp/down 上下 左右

(按键1+按键3)+(按键2 0.5s) = 闲置背景光设置 16色


06-11

这回外壳成本一下子提高了好多

不过组装起来要简单很多了吧,

试做一批 30只 卖27只这样,剩几只备用,万一有问题,还能补发。

到这个阶段了 重新估一次成本吧

用了亚克力做了几次外壳

最大的感受就是 厚度各种不统一,一般都不会有2mm 3mm足厚的

比如这次打样,2mm的只有1.8mm 3mm的只有2.8mm

只好重新修改设计。

累。


06-18

/关于性能测试和对下一代键盘的展望/

优化了程序,让程序更专注于发送按键信息。

研究了一下延迟的问题,

网上流传的测延迟的方法,是用keyboardtest.exe同时按下两个按键,取pc收到两个按键被按下的时间间隔。

这种方法,测出来的应该是按键从“pc成功接收第一个按键信息”到“pc成功接收第二个按键信息”的时间。

而不是“按键被触发”到”pc成功收到数据“的时间

不过多少也能说明些问题了。

这个时间能回答“传输时间大概是多少?”这个问题

这个测试的大致结果是7ms,由于avr单片机只能拟出个低速usb口,这个速度应该是正常的。

至于从“触发”到“被检测按键按下”再到“程序打包完usb包,开始发送数据”的时间,是难以检测的,除了使用片上调试的手段(残念,这款atmega48没有jtag口,手头没有调试工具。。。)

不管怎么说,用低性能8位单片机软件模拟usb口,本来就是出于对成本的妥协(当前已经用20M晶振在跑了,效果仍不尽人意)(当然,还可以用键盘专用芯片,但是要加炫哭的其他功能的话是难以做到的。)

下一版本,直接上stm32的硬件usb口吧。(当前淘宝卖得比较多的64脚stm32f103rc大约8元,只是用来做键盘的话有点浪费了,关于选型,之后找到销售商再研究)

当前计划,是把ver2.1完成,然后公布制作方案。(拖延症患者。。。。。。


2014/7/9

好吧 我把日志搬来这个博客了。

(上图是手工痛制后的键盘)

于是现在这个v2.1也算是告一段落了,写个总结吧。

这次总共做出了30套,每套最终物料成本约45元,售价70。(售价浮云了,就拿了个手工费)

http://tieba.baidu.com/p/3082921069 这是tonystore写的评测

http://tieba.baidu.com/p/3145125672 http://tieba.baidu.com/p/3147198799 这是Lynch的评测和实拍录像

http://www.tudou.com/programs/view/uBJ0LA49yZM/ 甜草Q的实拍游戏录像

http://www.tudou.com/programs/view/sbXESmsUZPg 组装演示
http://www.tudou.com/programs/view/mSUck6N8cYk 设置演示

已基本达到预期效果。

性能和手感还有很大的加强空间,让我分点来说。

性能:

由于使用avr-usb软件实现usb协议,性能不佳,两次传输间隔在6ms-12ms之间,虽已达到一般玩家的使用要求,但这个结果还不是我想要的。

(改用自带硬件usb的芯片,目前看中了功能强大的stm32系列)

手感:

还是倾斜角度的问题,希望能整体倾斜20-30度。
(亚克力材料是没办法做到这点的,考虑加其他材料,目前觉得以木材作为材料不错,希望成本增加不超过10元)

键帽斜度,当前使用的是R2键帽,对于无倾斜角度的键盘,R3似乎更加合适

回弹问题,有人希望加钢板来增强手感
(这个还在考虑中,采用钢板设计会让成本攀升,对外壳内部空间要求提升)

稳定性问题,键盘
(pcb纵向尺寸略减,横向尺寸略加)

按键重心高度较大问题
(由于底板3mm,支撑板2mm,pcb1.6mm,按键高度其实挺高,影响到了稳定感。

可以将pcb厚度改到1.2mm,再把“底板3mm+支撑板2mm”变成“底板2mm +支撑板2mm”,能降低1.4mm高度)

外观

东西太大 两个按键,体积为9.56.51.3cm,而mini版就很便携
(下一版将做出一个折中的方案,毕竟这个项目最初的目的不是便携,而是替代完整的机械键盘)

以位于底部的RGBLED做的手速计效果不明显
(由于项目的初衷,元件必须是容易入手的,rgb轴啥的是不会加入考虑的,但是能把RGBLED安装在正面或底部靠前的位置,让效果更加明显)

晚上关灯后按键灯瞎眼
(增加感光功能即可通过调光解决这个问题)

手速计希望能辨别出单点然后并使用单点的方法计算bpm
(可以增加单点识别,设置条件:1.2sec内采样到的为同一个按键即变为单点模式,一旦另一个按键被按下,即变为普通模式)

其他:

key3使用的微动按键,普遍质量不佳,容易损坏。
(这没办法,键帽简直是这种按键的杀手,要不就不用键帽,要不就只能换!)

key3有可能被误按,它太高了。
(改用其他按键试试吧,其实可以考虑不用键帽,高度刚刚好,手感也还行,就是外观。。。不知道大家买不买单)

key3这样的按键只有一个,太少了
(我也是这样觉得的,我希望能增加到3-4个)

能设定的映射太局限
(下一版本将使用我首创的设置方法,不需要特殊的pc程序即可实现更个性化的设定)

mini版外壳抗性太差
(这是由于pcb板设计时没考虑到mini版出现的可能性,没做整体设计造成的,下一版本想沿用mini版外壳的设计思路,只需要4组紧固件就能完成安装)

防滑垫太过于突出的问题
(有考虑使用2mm底板+3mm防滑垫,在底板上,将要安装防滑垫的位置空出来,这样防滑垫就只突出1mm且由于粘贴位置于内部,稳固程度要增加不少)

pcb的问题,组装时无法直接看pcb判断出按键灯led的正负方向。。

有人希望能使用MICRO-USB接口,这样就能和目前主流手机用同一种数据线了。
(其实现在用mini-usb是考虑到手工焊接难度和成品耐久度。)

pcb设置用的跳线数量过多,实际上应该把设置项都以软件来实现,只留少量pcb跳线。

量产的话,元件应尽量选用贴片的

还会有下一版本的,相信会更加完善,项目本身的定位我也会重新考虑下,毕竟自己diy,成本还是次要的,主要是最终效果。

总结完毕。发些图,有些可能和键盘本身没太大关联。。

发货单

各种灯的效果(不得不说白色真的好瞎;w;)

过渡版本(左为大壳设计。。后被自己否定。。呜呜呜我的痛贴不能大幅面了!!! )以及mini版试制品

痛贴测试

v2.1成品 两种版本


2015-07-30

由于折腾新博客,把旧的文章手工搬运过来,把v2 v3日志拆分了,重新排版了一下。
重新读了一次自己的日志,回想这一路上,全凭着各种“好运”才坚持下来——

  • 正好进入了学校里某协会,有了制简单PCB版的条件
  • 有大触学长Q君带我入机械键盘坑(嘛 虽然第一把机械键盘是自己做的),而且在我osu功力尚浅时,告诉我什么是“好手感”
  • 开坑之后,正好遇到使用相似方案且量产的超级叫了,一起讨论收获颇多
  • 尧山中的各位osuer帮试键盘,Q君、米酱、小麟子、蛋蛋……
  • 遇到了热心的朋友们——鸡鸭死、jb king、lynch、hhx008等等等……提了各种宝贵建议(以及资料翻译支持)
  • 还有第一批30只v2.1版的购买者们,真的很感谢你们!

osu键盘v2有一些意料之外的事情

  • RGBLED的手速计竟然成了卖点,哈哈哈
  • 从v2.0到v2.1卖出的那30只,键盘上的标识“Noodlefighter”全部打错成了“Noolefighter”,对的,无一幸免!!(笑 (鸡鸭死姥爷吐槽了才发现
  • mini版外壳,成了v3的原型
  • 和超级叫了一拍即合一起做v3版

算是给v2键盘画个句号吧,完毕。