复刻 Stack Overflow 愚人节“神作”:3 键机械键盘实战指南
背景
2021 年愚人节,Stack Overflow 搞了一个非常有意思的彩蛋:限制用户的复制次数,并“推销”了一款只有三个键的定制键盘。
这个小巧精致的键盘激发了我的创作欲。思考了一下,实现逻辑其实非常简单,基本上把我之前做的“原神自动弹琴装置”稍加修改即可,核心代码甚至在百行以内。
随后我打开 KiCad 直接开干,从原理图到 3D 渲染一气呵成。
🛠️ 核心设计思路:为什么是 ATMega32u4?
在开始制作之前,选型是关键。Stack Overflow 官方彩蛋中的键盘只有三个键:Ctrl、C、V。
为了实现这个功能,我选择了 ATMega32u4 作为主控:
- 原生 HID 支持: 与普通的 ESP32 或 ATMega328P 不同,32u4 自带硬件 USB 支持,可以直接被电脑识别为标准键盘(HID 终端),无需额外的串口转 USB 芯片。
- 成熟的固件库: 利用 Arduino 的
Keyboard.h库,可以极速实现组合键逻辑。
📐 硬件开发:KiCad 流程与 PCB 细节
在 KiCad 中,我设计了一块极简的 3% 配列 线路板。
渲染效果


关键电路特性
- 热插拔支持: 引入了凯华热插拔轴座(1511 系列),这意味着你可以随时更换青轴、红轴或静音轴。
- 电源管理: 使用了 AP2112K-3.3 LDO 芯片,确保 32u4 在稳定的电压下工作,并加入肖特基二极管防止 Type-C 接口反向供电。
- 模式切换: 增加了一个 2 位拨码开关。这不仅可以用来切换不同的按键映射(如 Mac/Win 切换),还能开启或关闭“连发模式”。
💻 软件实现:组合键逻辑
固件的核心逻辑是将物理按键的电平变化映射为标准的 HID 编码。实现 Ctrl + C 的逻辑如下:
1 | // 示例:实现 Ctrl + C 的伪代码 |
材料清单 (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/
