0%

低成本DIY一把小红点机械键盘

低成本DIY一把小红点机械键盘

事情是这样开始的,有一段时间“小红点” 相关的话题老是出现在我的视野里面,我本就是vim用户,使用鼠标的频率本来就不高,手老是在键盘和鼠标之间切换也挺烦的。于是就想尝试一下小红点键盘。这几年一直使用机械键盘,所以也不太想尝试联想的小红点薄膜键盘。简单了解了下,似乎处理Yoda系列再没有其它的小红点机械键盘了。Yoda II 看起来不错,颜值在线,可惜价格太贵,而且看起来也不太好买,或许需要海淘。于是试着去闲鱼逛逛。闲鱼上到是有人在卖DIY的小红点键盘呢,可是发给卖家的消息有如泥牛入海。后来混进卖家的群才得知卖家不想继续这门生意。

于是想要不自己做吧,正好手里有把闲置的RK61。

经过一番折腾,搞出来了。因为我本身不是硬件工程师,对电子或则硬件知之甚少,所以我没有设计PCB板(也不会),直接就是STM32开发板加小红点模块加键盘一焊了事。

元件以及工具

RK61 一把。

STM32F103T8 开发板一片,选这款开发板的原因是它便宜,IO口数量也够用,而且其对Ardunio有官方支持。

SSD1306 128x64 IIC 液晶屏幕一块,这个也可以不要。添加这样一块屏幕的目的有两个,一是用来显示一些状态信息,用RK61键盘的一个痛点就是很容易不小小搞到了其它的模式而不得不重置键盘,使得使用体验很糟糕;二是将来可以通过这块屏幕来调节小红点的参数。当然,如果不要这块屏幕的话,固件代码要稍作调整。

小红点模块一个。这个可以在闲鱼上买联想电脑的拆机模块,大概几块钱一个。我买了5个,模块上的芯片型号都是PTMP754DR。这些模块的排线有的是8根,有的是10根,而10根的排线里有两根并未使用到。最好直接买到8根的,那样就不用修剪了。

FPC 转接板8pin,规格1mm,两个。这个板子是用来将小红点模块连接到开发板上的。

FPC 转接板20pin,两个。这个板子是用来连接键盘PCB和开发板的。为了省事,我直接使用了RK 61自己的PCB板,我将RK61上面的主控芯片拆了下来,将键盘的行线和列线焊接到了FPC转接板。

FPC 转接线20pin,用来连接键盘和开发板。

开关二极管两三个。因为会在PCB上打个洞,这个洞会打断一些列线,因此我们需要补两个二极管。

细导线若干。作飞线用,细点好,我买的0.6mm的。如果你对烙铁不熟悉,千万别用漆包线代替,那玩意太难焊了。

漆包线若干。我用的0.25MM的。细导线再细还是有点粗,用来焊接20pin的FPC到STM32可能显得有点挤,这里其实可可以用漆包线来焊,因为STM32和FPC两边都有孔相对好焊一点。

微动开关三个。用作鼠标左、中、右三键。

烙铁一把。

ST-Link下载器一个。用来下载程序。

USB 转TTL一个,可选,用来打印调试信息。

杜邦线6条(母头)。用来留出TTL和ST-Link的接口,让我们在键盘安装完毕后还可以下载和调试程序。

USB公头、母头个一个,可选。如果你设计的合适也可直接使用开发板上的USB接口作为最终的USB接口。当然,有USB公头和母头让你在安排开发板的位置的时候更加灵活一些。

小电磨机一个。用来在RK61的外壳上打孔。

电钻,用来给小红点的杆打洞。因为RK61的定位板是钢的,因此这个孔比较难钻。

小红帽,拼多多或淘宝搜索小红点可以买到。

中性笔芯一支。用做小红点的杆。我运气比较好,找的第一支的粗细就刚刚好。

万用表,可选。测试连通性。

热熔胶。

焊接与安装

Untitled

用电钻在GHB这三个键之间打个孔,强调下是GHB,因为我第一次就打在了HJN之间,做完才发现。这也是我做了两把小红点键盘的原因之一。

键盘焊接

2023-11-09_16-18.png

将RK61键盘拆开,如上图摆放,按键的两个焊点中靠上的一个是行线,靠下一个连接到了一个二极管的负极。上图右侧有4列额外焊的列线,实际上是不需要的,因为我一开始没有想到列线也可以就用板子原生的列线,实际上每列的二极管的正级是相互连通的。我将板子上原来的主控芯片拆掉了,因为我担心会有影响。实际有没有影响我也不知道。

按键之间的电路图如下,为了简单只画了6个键:

Untitled

然后按从上到下的顺序将行线焊接到FPC转接板的1-5号孔,按从右到左的顺序将列线焊接到FPC转接板的6-19号孔。另一个FPC 转接板将被焊接到STM开发板,分别将1-5号孔通过飞线焊接到:PB0,PA7,PA6, PA5, PA4. 分别将6-19号孔焊接到:

PA3 // 6 col0

,PA2 // 7 col1

,PA1 // 8 col2

,PA0 // 9 col3

,PC15 // 10 col4
,PC14 //11 col5

,PC13 // 12 col6
,PB15 // 13 col8

,PA8 // 14 col7 B15
//,PA11 // 13 col7
,PA15 // 15 col9

,PB3 // 16 col10

,PB4

,PB5

,PB14

这样键盘和STM开发板就可以通过FPC排线连接起来了。当然也可以不按这个顺序焊接,只要保证键盘的1-5行(从上往下)分别被连接到PB0,PA7,PA6, PA5, PA4,(列也类似)即可。

我这里焊好后是这样的:

Untitled

小红点模块的焊接

小红点模块主控芯片引脚定义:

Untitled

就我买到的模块而言,将模块排线的金手指朝上,那么从左到右的8根线分为为:

VCC, CLK(Clock),Button Right, Button Left, Button Middle,GND (Ground), RST, Data

如果排线有10根,那么最左边两根没有用到,其它的线序和上面相同。我不确定是不是所有型号的模块都是这个次序,所以你最后用万用表测试一下保险些。用万用表测试连通性的档位来测量排线和哪个Pin相连即可。

小红点模块和STM开发板连接如下图:

Untitled

GND都连接到STM的GND上,VCC连接到STM的5v处。Button L,R,M 分别连接到三个微动开关,开关的另一极连接到GND,这三个微动开关即鼠标的左右中键。需要注意的是,三个微动开关安装的位置要合适,这个需要你按照你自己的实际情况来布置。

屏幕的焊接

屏幕有四根线:GND,VCC,SCK,SDA,VCC连接到5v,GND连接到STM的GND, SCK连接到PB6, SDA连接到PB7。

这里的内部布局是这样的:

Untitled

我这里的小红点模块和STM32开发板是直接焊到一起的,而没有使用转接板。因为这个模块的排线焊点间距比较大,好焊。一般年代越近的笔记本拆出来的模块越精密,排线焊点比较小,这时候用转接板就比较方便了。

下载接口的焊接

STM32 开发板尾部有4根弯的排针,它们是用来连接STLink下载器的。我们可以在合适的地方开孔,将杜邦线焊接到这四根排针上。如果不嫌弃麻烦,也可以将这几根针拆下来。

USB 延长线的焊接和安装

USB公头的D+,D-,GND,VCC 分别通过长度合适的导线焊接到USB 母头的D+,D-,GND,VCC上。并将USB公头插入STM32开发板的USB接口上。在键盘底壳合适的地方开孔,并将USB母头用热融胶固定。

固件的编译和烧录

克隆这个项目到本地:

git clone https://github.com/JunYang-tes/hello-keyboard

用VScode打开这个hello-keyboard 下面的fireware 目录。并在VScode里装上Arduino这个插件。

按Ctrl+Shift+P,打开VScode的命令面板,输入Open User Setting, 打开settings.json, 往这个文件中添加:

"arduino.useArduinoCli": true,
"arduino.additionalUrls": [
   "https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json"
 ],

按Ctrl+Shift+P,输入 Board Manager, 按Enter打开Arduino Board Manager, 点击界面上的Refresh Package Indexes.

Untitled

搜索STM32, 选择2.7.0 点击Install。

一切就绪后按Ctrl+Shift+P 输入Verify, 即可开始编译固件。如果一切没问题的话,编程会生成fireware.ino.bin, 相对repo的完整路径是hello-keyboard/fireware/build/fireware.ino.bin

通过STLink 下载器,将键盘连接到PC,打开**STM32CubeProgrammer** 即可将固件下载到键盘。

Untitled

断开STLink, 通过USB连接键盘到PC,应该就能正常的工作了。

如果键盘没有反应,但是电脑识别了HID设备,那么多半是小红点模块或者模块的连接有问题。因为相关代码在读小红点模块的数据的时候会等待Clock信号的变换,如果没等到就死在那里了。

在linux 系统中查看系统是否识别到键盘盘的命令如下:

lsusb | grep STM

如果系统识别了键盘,应该会看见类似下面的输出:

Bus 003 Device 005: ID 0483:5711 STMicroelectronics BLUEPILL_F103C8 HID in FS Mode