系列文章列表
- 为什么要自己做一把蓝牙机械键盘
- 用到的东西
- 制作左手
- 设置左右手蓝牙BLE
- 制作右手
- 轴体焊接及供电模块
- 后记
硬件相关
焊接工具
- 电烙铁
- 烙铁架
- 高温海绵: 在水中充分浸泡, 挤干后放置在烙铁架
- 焊锡
- 松香: 助焊剂, 焊出来的点比较亮, 不容易虚焊
- 吸锡枪: 如果焊坏了, 将焊点的焊锡吸走, 重新焊
- 电工黑胶带: 有时候用胶带辅助固定比较好焊
PCB板等
- PCB板: github上有PCB图纸ErgoDone, 需要找淘宝店打印, 用软件kicad打开具体的文件查看PCB图纸
- 1n4148二极管 * 76: 规定电路板上电流的走向, 避免按一个键, 电流走到其他路径, 导致其他按键也认为被触发了, 可以多买些.
键盘轴体键帽等
- 喜欢的轴休 * 76: 比如我这里大部分是茶轴, 几个是青轴
- 键帽: 4个2U的, 12个1.5U的, 60个1U的, 这里我用的白色无刻的
- PCB卫星轴2U * 4: 在焊轴前, 安装和调试好卫星轴
芯片等
- Arduino Pro Micro * 2: 左右手各一块, 主控芯片, 其他名字有min leonardo, ATMEGA32u4. 从淘宝上买, 一般会送直脚排针
- MCP23017: IO扩展模块,因为右手需要接入多块芯片或模组及处理键盘事件, 导致IO口不够, 所以用这个来扩展IO口. 使用说明datasheet, 需要配合2.2K欧的电阻使用.
- 2.2K欧色环电阻 * 2: 配合MCP23017使用
- HM-10带底板 * 2: 左手的Arduino Pro Micro将识别出来的按键事件发送给左手的HM-10, 然后左手的HM-10通过蓝牙将事件发送给右手的HM-10, 右手的HM-10发送给Arduino Pro Micro, 然后发送Bluetooth HID模组
- Bluetooth HID模组: HC-03带底板, 这里用的HC-03刷上RN42的固件, 用来给电脑发送鼠标键盘事件, 可以自己制作, 参考教程, 也可以直接从淘宝上买
电源模块相关
- 锂电池 * 2: 用来给芯片供电, 厚度不要超过6mm, 这里我选了一个厚度6mm, 宽度6mm, 长度10mm, 5000mAh, 并且带保护板的电池
- TP4056充电模块 * 2: 用来给锂电池充电, 我选的type c口的
- 拨动开关 * 2: SS12D10, 用来控制电源的开关
- 易拉胶 * 2: 用来固定电池, 使用易拉胶可以方便以后更换电池, 这里我用是苹果6P的易拉胶
外壳等
- 亚克力外壳: 我在键盘上加了摇杆, 这是可选的, 如果不想要摇杆, 可以使用这个不带摇杆的CAD图纸, 如果你也想加上摇杆, 用这个带摇杆的CAD图纸, 材料是亚克力, 同样需要找淘宝店加工, 费用大概在120元左右. 可以用AutoCAD打开并编辑这样的文件, 新用户有30天试用, 还是比较方便的. 把膜撕了之后, 就是右手透明的样子, 很好看.
- M2双通铜柱19MM * 14: 用来固定外壳
- M2螺丝8MM * 28: 用来固定外壳
连接线
- 弯脚排针: 为了避免直接用跳线焊接到芯片或者模组的引脚上, 先焊接上排针, 然后用杜邦线连接, 方便以后更换芯片, 如果觉得不牢靠, 可以用黑胶布再固定一下
- 母对母杜邦线: 用来连接芯片模组和PCB等. 我用到了10CM, 15CM 20CM三种长度的. 当然也可以直接用跳线焊死, 就不用上面的弯脚排针了. 可以买一个公对公的杜邦线, 在没有焊上轴之前, 当成导线测试二极管焊得对不对.
其他
- USB转Micro USB * 2: 在测试的时候, 同时给两块Arduino Pro Micro供电需要用到, 也用来给芯片烧录程序, 所以要买那种支持数据传输的.
- 330欧色环电阻 * 3: 避免电流过大烧坏LED灯.
- 234 LED方灯 * 3: 放在键盘上, 可以用来提示CAPS_LOCK, 或者自定义提醒键盘布局变化.
- 纳米双面胶: 用来固定芯片或者模组, 粘在外壳上
可选
-
摇杆: 用来控制鼠标, 类似于thinkpad上的小红点
-
小红帽: 因为上面的摇杆自带的摇杆帽太高了, 使用起来不舒服,所以用thinkpad小红点上的小红帽替代, 也可以先试试原装的蘑菇帽, 觉得不行了, 再换成小红帽试试(可惜没有矮点的蘑菇帽, 原装的蘑菇帽手感非常 好), 不是成熟的方案, 我自己也不满意, 如果有更好的方案, 请指教.
-
502胶水: 因为小红帽和摇杆不匹配, 塞了点东西, 用脱水粘上
-
隐形笔记本支架: 让键盘有一个比较舒服的角度
-
鼠标垫: 因为加了一块电池的键盘太厚了, 所以加了鼠标垫拖着手, 一手一块不够厚, 所以一手两块
-
阳极铝定位板: 我在使用中摔过一次, 定位板碎了, 因为定位板是和PCB板焊在一起的, 更换起来很麻烦, 所以这次用了金属材料, 阳极氧化铝, 如果你也需要, 可以用这个定位板的图纸, 其他不变.
软件相关
使用了Arduino IDE, 基于arduino_tmk_keyboard.
代码使用方法是: 从Release里下载bluetooth_ergodone.zip, 在Arduino IDE里, 通过"项目" -> “加载库” -> “添加.zip库”, 把本项目导入.
导入完成后, 还需要
- 选择正确的示例程序: 在Arduino IDE里, 通过"文件" -> “示例”, 找到本项目名, 然后打开左手或者右手的示例程序,
- 选择正确的开发板: 在Arduino IDE里, 通过"工具" -> "开发板"里选择Arduino Leonardo,
- 选择正确的端口: 当电脑的USB连接到主控芯片(Arduino Pro Micro)后, 在"工具"->"端口"里会出现一个新的端口, 选择这个端口.
然后点Arduino IDE左上角的"上传"按钮, 就可以将代码上传到主控芯片里了.
在右手的示例程序里right_hand.ino, 可以通过ERGODONE_KEYMAP去定义自己的键盘布局, 支持多个键盘布局的切换, 比如我定义了三层, 第三层是鼠标的操作. 还可以自己定义一些宏操作, 比如在第二层里自定义了FN6, 按下这个键, 就会输出Hello, World. 更多玩法, 参考tmk keymap.
并且也是在右手的程序里right_hand.ino通过各种hook函数控制LED灯.
我自己定义键盘布局里, 左手CAPS_LOCK按键的位置被我换了, 按成按着的时候, 会切换到第三层, 第三层是鼠标操作, 在第三层, 按下HJKL会移动鼠标. 原来Z键的位置, 被我换成按下切换到第二层, 这时候HJKL就变成方向键, 原来的Z向右移了一位.
最后的成品
正面
背面
侧面
用起来的样子
续航测试, 右手大概在360个小时之后, 开始出现连接不稳定, 左手这时候还能继续用, 左手没有继续测试下去.
测试过的能连接上的设备包括Mac电脑, windows电脑, ipad, iphone, 小米6.
延迟测试, 不会有明显的延迟, 尝试使用程序测试, 左手某个按键按下, 从Arudino打印的时间, 对比电脑上python监测程序打印出来的时间, 三四十毫秒到八九十毫秒都有. 不过应该是大概二十毫秒, 考虑到蓝牙传输的延迟(七点五毫秒发送一次按键事件, 这里乘以二, 因为有两个), 程序里去抖动延迟五毫秒(由于机械轴触发的原理是两个弹片互相接触, 机械接触的话难以避免碰撞, 又因为程序
检测的速度极快, 所以这段极小的碰撞时间内程序检测到的状态是不稳定的, 会被认为是按下松开按键多次). 网上有人用拍视频的方式计算, 用视频里按下按键的帧数到屏幕显示出来的帧数, 计算出
对应的时间. 比较麻烦, 放弃.