程序员对机械键盘的需求不止于情怀,当然,对于算法工程师、逻辑复杂而代码量小的软件工程师来说,平时对键盘的操作并没有那么多,可能对机械键盘并不感兴趣。而我曾经是一个日常大量编码、运维的数据工程师,逻辑简单,键盘操作却很多,特别是对十几台服务器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体系的操作,不妨花些功夫定制一套,会离不开的

转载于:https://www.cnblogs.com/yangzifb/p/11485313.html

stm32 diy 机械键盘相关推荐

  1. 关于STM32的USB设备库DIY机械键盘

    前言 为什么想写这个呢,首先一方面是因为自己喜欢DIY一些小玩意,另一方面关于USB-HID的东西断断续续的学习了不少东西,想总结整理一下.其次就是网络上关于STM32制作USB-HID的案例很多,我 ...

  2. stm32 薄膜键盘原理_stm32 diy 机械键盘

    但是HHKB的空格键很长,Fn组合键不好按,上下左右与vim不统一.受minila的启发,我决定自己做一个机械键盘. minila键盘图片: 自制机械键盘使用59键布局,以小为美(便宜)采用短空格,充 ...

  3. DIY机械键盘过程照

    我是个程序员,偶而搞下硬件开发,总觉得别人设计的键盘不满足自己的胃口,我自己DIY了一把机械键盘. 全键盘键位可编程,可以从内核开始编程,共设计69键,有点类似HHKB,但是比她要多了几个键盘. 功能 ...

  4. 从零DIY机械键盘/主控方案

    自从有了第一套机械键盘,先后修改了接口方案,安装了LED灯等,但是始终无法满足自己的DIY欲望. 于是想到最简单的方法就是用现成的主控,而主控来源于废弃的键盘,如下图: 这种主控也是矩阵方式,只需要测 ...

  5. STM32 DIY USB键盘Ⅱ之硅胶键盘

    一.前言 第二块USB键盘,想做一下背光和硅胶按键效果. 二.环境 下载资源:包含源码+原理图PCB+结构 三.正文 在之间键盘的基础上,增加了外壳结构设计,使用非焊接式按键,pcb在按键按下之后出触 ...

  6. yoda键盘linux,【简单评测】Yoda II机械键盘——DIY初解禁

    2015年第一代Yoda键盘出世,我当时正在做ThinkPad维修,对机械键盘领域所知有限,从2013年入行至今,本人一直是ThinkPad忠实用户也是ThinkPad粉丝.2016年末有幸加入一个神 ...

  7. 从0开始制作机械键盘

    机械键盘,造轮子,还是造键盘? 是的,没错,我要重新开始造轮子. 最开始萌生此想法的原因是想把一个USB接口的键盘改造成蓝牙键盘(别问我为什么不直接买一个).想改的前提有两个:一是笔者用的是笔记本,总 ...

  8. 【小睿精选·第七期】基于STM32的DIY蓝牙机械键盘

    [小睿精选] [小睿精选]第七弹来啦,本期共收录 6条 嵌入式资讯信息,希望可以帮到你.欢迎大家在文末留言,唠一唠你关注的话题,说不定下期就有你想要的惊喜! 资讯类 1.瑞萨推出RZ/V系列微处理器搭 ...

  9. 自定义键盘码_?光效DIY+自定义宏:玩法多样的杜伽k320RGB机械键盘

    随着科技的不断发展和人们生活水平的不断提高,机械键盘凭借出色的手感,开始逐渐替代传统的薄膜键盘,而成为电脑用户的主流生产力工具,更有越来越多的游戏玩家,开始沉迷于机械键盘的便利与手感.下面评测的这款D ...

最新文章

  1. 学长告诉你 java注解——深入浅出
  2. Jetson Nano and VIM3硬件参数对比及目标检测性能对比
  3. python源码精要(3)-C代码规范
  4. 实战~~整个网络无法浏览,提示网络不存在或者尚未启动
  5. Spring Boot的自动配置的原理
  6. ddwrt 扩张linux分区,『2010.8.9』DDWRT脱机下载+架设网站修正加强版tar.gz模式发布(修复下载地址)...
  7. iOS进阶面试题----Block部分
  8. Centos7#Linux基础富文本笔记
  9. windows下使用vs工具查看dll是64位还是32位
  10. 如何为macOS High Sierra创建可启动的USB安装程序
  11. 笔记本的无线wifi共享给台式机、服务器上网
  12. css3 打车软件等车动画,简单一个渐变放大消失水波加载动画
  13. sublime的注册方法 非常好用
  14. JAVA生成阿里云直播推流和拉流
  15. JavaMail连接Office 365使用XOAUTH2身份认证
  16. SmartGit功能介绍
  17. 网站制作与html教案,html语言与网页制作教案.pdf
  18. ajax调用ashx页面内的方法
  19. sciTE 编译lua
  20. 高浓度EPA 德国奎尔鱼油 (QüELL FISH OIL HIGH EPA)

热门文章

  1. html命名侧边栏_html可伸缩侧边栏
  2. Python 金融量化 随机指标交易策略
  3. 搭建Android开发环境(以Windows系统为例)
  4. Vue—表单的输入绑定,绑定Vue3表单的输入
  5. robocraft一直显示正在联系服务器,Robocraft如何正确的姿势开飞机攻略
  6. java中的abstract
  7. es6模块化和异步编程高级用法
  8. 谢谢!yefuna@gmail.com
  9. 走进音视频的世界——Matroska封装格式的介绍(二)
  10. 设计模式之【外观/门面模式】,不打开这扇门永远不知道门后有多少东西