复刻 Stack Overflow 愚人节“神作”:3 键机械键盘实战指南

背景

2021 年愚人节,Stack Overflow 搞了一个非常有意思的彩蛋:限制用户的复制次数,并“推销”了一款只有三个键的定制键盘。

这个小巧精致的键盘激发了我的创作欲。思考了一下,实现逻辑其实非常简单,基本上把我之前做的“原神自动弹琴装置”稍加修改即可,核心代码甚至在百行以内。

随后我打开 KiCad 直接开干,从原理图到 3D 渲染一气呵成。

🛠️ 核心设计思路:为什么是 ATMega32u4?

在开始制作之前,选型是关键。Stack Overflow 官方彩蛋中的键盘只有三个键:CtrlCV

为了实现这个功能,我选择了 ATMega32u4 作为主控:

  • 原生 HID 支持: 与普通的 ESP32 或 ATMega328P 不同,32u4 自带硬件 USB 支持,可以直接被电脑识别为标准键盘(HID 终端),无需额外的串口转 USB 芯片。
  • 成熟的固件库: 利用 Arduino 的 Keyboard.h 库,可以极速实现组合键逻辑。

📐 硬件开发:KiCad 流程与 PCB 细节

在 KiCad 中,我设计了一块极简的 3% 配列 线路板。

渲染效果


关键电路特性

  1. 热插拔支持: 引入了凯华热插拔轴座(1511 系列),这意味着你可以随时更换青轴、红轴或静音轴。
  2. 电源管理: 使用了 AP2112K-3.3 LDO 芯片,确保 32u4 在稳定的电压下工作,并加入肖特基二极管防止 Type-C 接口反向供电。
  3. 模式切换: 增加了一个 2 位拨码开关。这不仅可以用来切换不同的按键映射(如 Mac/Win 切换),还能开启或关闭“连发模式”。

💻 软件实现:组合键逻辑

固件的核心逻辑是将物理按键的电平变化映射为标准的 HID 编码。实现 Ctrl + C 的逻辑如下:

1
2
3
4
5
6
7
// 示例:实现 Ctrl + C 的伪代码
if (digitalRead(KEY_C_PIN) == LOW) {
Keyboard.press(KEY_LEFT_CTRL); // 先按下 Ctrl
Keyboard.press('c'); // 再按下 C
delay(100); // 保持一小段时间
Keyboard.releaseAll(); // 释放所有按键
}

材料清单 (BOM)

序号 名称 数量 备注
1 ATMega32u4 1 主控芯片 QFN44封装
2 AP2112K-3.3 1 5V转3.3V芯片 SOT-23-5
3 16Mhz晶振 1 2.0*1.6
4 1uF电容 1 0603
5 22pf电容 2 0603
6 10uf电容 2 0603
7 1KΩ电阻 5 0805
8 10KΩ电阻 1 0805
9 22Ω电阻 2 0805
10 凯华热插拔轴座 3 1511系列
11 轴体 3 任意轴体
12 2位拨码开关 1 1.27mm
13 Type-C接口 1 16p
14 肖特基二极管 1 BAT60JFILM SOD-323
15 微动开关 1 3x4x2.5 四脚贴片

焊接与组装

焊接心得: QFN44 封装虽然引脚密集,但在涂抹适量锡膏后,配合热风枪(建议 350°C,中等风速)可以实现自动对准吸附。

组装: 简单的画了个方盒子作为外壳,然后从我的旧键盘上扣下来三个键帽装上去。


进阶特性与开源

这把键盘虽然源于彩蛋,但具备很强的实用性:

连发模式: 通过拨码开关开启,适合某些需要快速重复操作的场景。

全平台兼容: 基于标准 HID 协议,插上即用,无需安装驱动。

开源地址: https://github.com/chaosgoo/HairsPP

附:HID 扫描码速查表 (部分)

为了方便自定义按键,我整理了常用的非标准按键编码。你可以通过修改固件,实现 F13-F24 等宏功能。

控制与修饰键 (Modifier Keys)

定义 编码 (Hex) 功能描述
KEY_LEFT_CTRL 0x80 左侧 Ctrl 键
KEY_LEFT_SHIFT 0x81 左侧 Shift 键
KEY_LEFT_ALT 0x82 左侧 Alt 键
KEY_LEFT_GUI 0x83 左侧 Win / Command 键
KEY_RIGHT_CTRL 0x84 右侧 Ctrl 键
KEY_RIGHT_SHIFT 0x85 右侧 Shift 键
KEY_RIGHT_ALT 0x86 右侧 Alt 键
KEY_RIGHT_GUI 0x87 右侧 Win / Command 键

系统与导航键 (System & Navigation)

定义 编码 (Hex) 功能描述
KEY_UP_ARROW 0xDA 方向键:上
KEY_DOWN_ARROW 0xD9 方向键:下
KEY_LEFT_ARROW 0xD8 方向键:左
KEY_RIGHT_ARROW 0xD7 方向键:右
KEY_BACKSPACE 0xB2 退格键 (Backspace)
KEY_TAB 0xB3 制表键 (Tab)
KEY_RETURN 0xB0 回车键 (Enter)
KEY_ESC 0xB1 退出键 (Esc)
KEY_INSERT 0xD1 插入键 (Insert)
KEY_DELETE 0xD4 删除键 (Delete)
KEY_PAGE_UP 0xD3 上翻页键 (Page Up)
KEY_PAGE_DOWN 0xD6 下翻页键 (Page Down)
KEY_HOME 0xD2 起始键 (Home)
KEY_END 0xD5 结束键 (End)
KEY_CAPS_LOCK 0xC1 大写锁定键 (Caps Lock)

功能键 (Function Keys)

定义 编码 (Hex) 功能描述
KEY_F1 - KEY_F12 0xC2 - 0xCD 标准功能键 F1 至 F12
KEY_F13 - KEY_F24 0xF0 - 0xFB 扩展功能键(常用于绑定宏命令,不会与系统快捷键冲突)

总结与展望

这把复刻自 Stack Overflow 愚人节彩蛋的 3 键宏键盘,虽然初衷是为了好玩,但在实际制作过程中,它涵盖了 原生 USB-HID 通信、硬件电路设计以及人体工程学按键映射等多个核心知识点。

通过本项目,我们不仅实现了一个极简的生产力工具,更深入理解了:

  • 主控选型的重要性:ATMega32u4 的硬件 USB 支持是实现低延迟、高兼容性 HID 设备的关键。
  • 模块化设计的优势:引入热插拔轴座和拨码开关,让一个小巧的硬件具备了极高的自定义程度。
  • 软硬结合的魅力:简单的几行代码,配合精准的硬件触发,就能大幅提升日常办公中高频操作(如剪贴、代码重构、宏命令执行)的效率。

复刻 Stack Overflow 愚人节“神作”:3 键机械键盘实战指南

https://chaosgoo.com/2021/04/01/diy-stackoverflow-3-key-macro-keyboard-with-atmega32u4/

作者

Chaos Goo

发布于

2021-04-01

更新于

2025-12-18

许可协议