花猫的自制键盘
简介
使用YD-RP2040(树莓派pico兼容开发板)主控和KMK固件的键盘,带RGB、旋钮和小屏幕,支持热插拔,配列为修改版84配列。
简介:使用YD-RP2040(树莓派pico兼容开发板)主控和KMK固件的键盘,带RGB、旋钮和小屏幕,支持热插拔,配列为修改版84配列。开源协议
:GPL 3.0
描述
简介
使用 YD-RP2040(树莓派 pico 兼容开发板)作为主控的键盘,带 RGB、旋钮和小屏幕,支持热插拔。
配列是在 84 配列的基础上修改而来的,修改包括:
- 将 Fn 键移到左侧(类似很多笔记本键盘)
- 双空格
- 在右侧 alt 和右侧 ctrl 间加了 menu 键
- F 区和主键区分隔
使用 KMK 固件。
初衷只是为了制作一个符合我自己要求的键盘,也是我跟着网上的教程边学边做的第一个 pcb,所以还请多指教!
发了一个演示视频在 BiliBili:https://www.bilibili.com/video/BV1Lb4y1M7Zc
零件选择注意事项(请务必阅读这一部分)
由于 YD-RP2040 和树莓派 pico 引脚定义不完全相同,在本项目中,区别体现在 35 号引脚,在树莓派 pico 上是 ADC_VREF 而在 YD-RP2040 上是 GP29。因此,板子上有一个版本选择,短接版本选择的 1, 2 引脚可以将 LCD 的 CS 引脚接地,适用于树莓派 pico(理论上只有一个 SPI 设备时可以直接把 CS 接地),而短接版本选择的 2, 3 引脚可以将 LCD 的 CS 引脚连接到开发板的 35 号引脚,适用于 YD-RP2040。由于我手头没有树莓派 pico进行测试,因此不保证使用树莓派 pico或其他兼容开发板时 LCD 可以正常工作。
尽管看起来板子上的开发板支持贴片安装,但是由于位置,贴片安装时不能连接 usb,所以需要使用排针排母连接。这里我使用的是塑高 3.5mm 的排母和配套排针安装以降低高度。
LCD 屏幕我使用的是一个 1.14 寸 134x240 的 SPI 屏幕,理论上其他接口相同的屏幕也可以用,但需要修改程序进行适配。LCD 屏幕同样使用塑高 3.5mm 的排母和配套排针安装以降低高度。
RGB 使用 WS2812B 3528 反贴灯,86 个,为了方便布线,PCB 上相邻的两行灯的安装方向是相反的,焊接灯的时候要格外注意安装方向。(旁边有黑点的焊盘是 GND,我使用的灯的 GND 脚有一个斜角作为标记)
旋钮就是普通的 EC11,1 个;二极管用 1N4148 直插二极管,86 个 ;轴座使用凯华热插拔轴座,86 个。轴体支持 3 脚轴和 5 脚轴,这个就看个人喜好选择了,我使用的是蓝天白云轴。
卫星轴需要 5 个 2U 卫星轴,对于成套出售的卫星轴,应该购买 104 键的版本。(87 键的卫星轴套装只有 4 个 2U 卫星轴)
安装固件
键盘使用 KMK 固件,这是一个运行在 CircuitPython 上的开源键盘固件,官网 http://kmkfw.io/
安装步骤:
- 安装 circuitpython 到开发板,完成后,可以看到电脑多出了储存设备“CIRCUITPY”
- 安装 neopixel, adafruit_st7789 到开发板
- 克隆 KMK 储存库,复制储存库中的 kmk 文件夹 到储存设备“CIRCUITPY”
- 克隆 https://github.com/calico-cat-3333/calicocat-keyboard 储存库并将 code 文件夹中的所有文件复制到储存设备“CIRCUITPY”
- 删除“CIRCUITPY”储存设备中自带的 code.py
- 拔出后重新插入开发板即可完成安装,此时将不再出现储存设备“CIRCUITPY”。如果需要更新或者修改,可以按住 ESC 键或短接 GP15、GP27 并插入键盘,即可再次访问储存设备“CIRCUITPY”,在开发板刚插电时(对于 YD-RP2040,这时开发板上的 ws2812 灯会闪烁 3 下)按一下 BOOT 或 RST 按钮将进入 circuitpython 的安全模式,也可以用于访问储存设备“CIRCUITPY”
如果不想上面那么麻烦而且不介意可能使用的不是最新版固件,那么可以在安装 circuitpython 并删除 code.py 后直接把 程序-标准版.zip 或 程序-精简版.zip 中的所有文件都复制到储存设备“CIRCUITPY”中,即可完成固件安装。
标准版和精简版分别对应 github 的主分支和 lite 分支,两个版本的区别是精简版没有超频,默认动画为 STATIC 并且没有包含我自制的动画,没有计算器和 RGB 状态显示两个额外的的屏幕功能(注:计算器是一个试验性功能,不保证稳定)。
使用树莓派 pico 或其他 35 号引脚不是 GP29 的 RP2040 开发板时,还需要修改 lcd.py,将其中的 tft_cs = board.GP29 改为 tft_cs = None(注:未经测试,仅供参考)
在我的开发板上,更新到 circuitpython 9 之后刷新 RGB 的函数执行耗时变大了不少,因此目前我推荐使用 circuitpython 8.2.10, 即 circuitpython 8 的最后一个版本。如果你使用 YD-RP2040, 那么你可以在这个链接下载适用于 YD-RP2040 的 circuitpython 8.2.10
外壳
外壳为亚克力外壳,使用 M2 铜柱和螺丝固定。我只使用了顶层,定位板层和底层 3 层固定键盘,dxf 文件见附件中的 外壳.zip
外壳文件 使用 swillkb 生成后修改而来。
结构如下图
功能
自定义按键:
参考 kmk 文档,修改 mian.py
RGB灯效:
参考 kmk 文档,修改 main.py 和 user_animation.py,其中,main.py 中可以修改默认灯效类型、亮度、饱和度、色相、动画速度等配置,user_animation.py 中可以自定义灯效,默认灯效是我自定义的一个流光灯效。
lcd功能:
显示数字锁定,大写锁定,滚动锁定状态,当前层(常规、Fn、鼠标模式),以及一只装饰用的像素小猫。如果使用标准版固件,还有一个计算器(试验性功能,不保证稳定)和当前 RGB 状态显示,这几个功能可以通过 Fn+ 左右键切换。
试验性的计算器功能:进入后,键盘输入将被拦截,仅被计算器处理,可以使用键盘上的字母、数字、符号键、 shift 键、方向键、Home 键、End 键、退格键、删除键,按 enter 键计算,支持 sin, cos 等函数和 pi, e 两个常量,用法与 math 模块中对应函数相同。不过受限于 circuitpython 只保留 5 位小数,涉及小数的计算误差极大,就不要拿来做高精度的计算了。上下键可以用于浏览计算历史,默认记录 8 条记录,按左右键调整光标位置。计算完成后算式仍然会显示在屏幕上 ,但是此时再进行输入会清空屏幕并重新输入。虽然说叫做计算器,但是它的工作原理是把输入字符串直接丢到 eval 函数里运行,所以可以整一点花活,比如输入 exec('import xxx') 来导入某些东西,或者当作一个受限的 Python 终端使用,不过这可能导致键盘出错甚至损坏,所以请务必谨慎使用。
旋钮:
旋转为调节音量,按下为切换静音状态,Fn+旋转为调节屏幕亮度(需要电脑支持,一般笔记本都支持,台式机不好说)。
Fn键:
Fn+ | 功能 |
F1 | 上一曲 |
F2 | 暂停 |
F3 | 下一曲 |
F4 | 开关 RGB |
F5 | 增加 RGB 亮度 |
F6 | 降低 RGB 亮度 |
F7 | 增加 RGB 色相 |
F8 | 降低 RGB 色相 |
F9 | 增加 RGB 饱和度 |
F10 | 降低 RGB 饱和度 |
F11 | 增加 RGB 动画速度 |
F12 | 降低 RGB 动画速度 |
1 | 重置 RGB 亮度、色相、饱和度 |
2 | 切换 RGB 灯效 |
PrintScreen | 数字锁定 |
Insert | 滚动锁定 |
左侧空格 | 切换鼠标模式 |
旋钮顺时针旋转 | 增加屏幕亮度 |
旋钮逆时针旋转 | 降低屏幕亮度 |
左 | 上一个屏幕功能(仅标准版) |
右 | 下一个屏幕功能(仅标准版) |
注意:控制RGB色相和动画速度的按键在部分灯效中不起作用。调节屏幕亮度功能需要电脑支持,一般笔记本都支持,台式机不好说。
鼠标模式:
按 Fn+左侧空格进入/退出鼠标模式,该模式下,小屏幕上的键盘图标会变为鼠标图标,以指示当前处于鼠标模式中。
鼠标模式下,WASD 为鼠标移动,J 键为鼠标左键,L 键为鼠标右键,分号键为鼠标中键,I 键为滚轮向上滚动,K 键为滚轮向下滚动,除此之外字母区其他按键全部无效。
其他的注意事项
- PCB 布线使用了自动布线,目前已经用了两个多月,没有什么问题。
- PCB 上还有几处设计问题,包括开发板的位置,两个二极管的位置和一个 RGB 灯的位置不对,不过基本不影响使用。
- 这个工程中使用的树莓派 pico 元件有问题,在PCB视图中有一个引脚被错误的标注,在本工程中是有一个应为 COL_3 网络的引脚被标注为 COL_4,需要手动修改后才能进行自动布线。我的 PCB 中已经修正了这个错误。
- RGB最大亮度在程序中限制为 30(默认最大亮度限制 255),经测试亮度为 20 时这个键盘的电流在 200mA 左右。
- 由于 circuitpython 和 kmk 的更新比较频繁,因此如果发现 程序-标准版.zip 或 程序-精简版.zip 中的程序无法使用,请联系我。
- 由于亚克力定位板厚度为 2mm,而一般定位板厚度为 1.5mm,定位板卫星轴可能难以安装,可能需要对定位板或卫星轴进行轻微打磨(硬装进去应该也能用,不过我没试过)(亚克力材料比较容易开裂,安装时应注意小心)。
- 如果想修改固件进行测试,可以删除boot.py,这样键盘重启后就不会自动隐藏“CIRCUITPY”储存设备和串口,如果需要再次隐藏,把boot.py放回去就行。
成品图
整体图
小屏幕旋钮特写
更新记录:
2024.7.1 更新:
更新固件,程序.zip 变为 程序-标准版.zip 和 程序-精简版.zip 两个版本,初步适配 circuitpython 9, 更新 kmk 版本,固件本体的更新记录请参考 github 上的提交记录。
添加相关描述,添加推荐使用 circuitpython 8 的提示。
2023.11.12 更新:
更新 程序.zip ,添加了重置 RGB 亮度、色相、饱和度和切换RGB灯效的快捷键。
2023.11.24 更新:
更新 程序.zip :更新 kmk 版本,添加 6 种新自定义灯效。
2023.11.27 更新:
添加KMK的描述,焊接 RGB 灯的注意事项,演示视频链接和一张新的整体图。
2023.12.4 更新:
修正安装固件步骤中的错误,添加进入 circuitpython 安全模式的方法,安装卫星轴的注意事项和不禁用“CIRCUITPY”储存设备和串口的方法。
2023.12.7 更新:
添加元件数量,添加使用树莓派 pico时要修改 lcd.py 的提示。
评论