如何DIY一款属于自己的HID键盘?

这是一个自定义游戏键盘,带有四个热插拔机械键和可自定义的RGB LED。它由STM32F103Cx微控制器供电,并通过Arduino IDE进行编程。

文章末尾分享该项目资料。

功能概述:

  • 快速STM32F103Cx微控制器可实现低输入延迟。

  • USB全速,轮询速率为1000hz。

  • 可热插拔的键。

  • EEPROM设置存储。

  • 动态密钥自定义(使用Windows用户的GUI)

  • 具有添加更多功能的三种RGB模式。

  • 完全开源。

  • 兼容Arduino。

  • 模块化且易于携带。

设计框图

e8e508b20ae41a465be24a3153fa5a7a.png

键盘使用STM32F103C8T6作为控制器。由于USB端口上的电源引脚为5V供电,但是该款单片机需要使用3.3V电源供电,因此需要将5V转为3.3V,项目中使用MCP1703T来实现该功能。使用Cherry MX风格的机械开关来作为键盘的按键。另外,还可以通过按键来控制LED的模式、颜色、亮度。

系统原理图

438803db3cb719e9cab333acebc7d340.png

系统PCB

e361f16ee576e304fd53567e349fd048.png

PCB大小为58mm x 59mm。为了能够方便手工焊接,所有的SMD器件均使用0805封装。

675626246cf9724fdffd461f8d0af387.png硬件上提供了STLINK下载接口:

  • SWDIO-SWDIO

  • SWCLK-SWCLK

  • GND-GND

  • 3V3-3.3V

材料清单:

  • 1个STM32F103CxT6

  • 2个7.3mm高的触觉开关

  • 4个反向安装4-PLCC LED

  • 6个0805 10K欧姆电阻

  • 4个0805 68欧姆电阻

  • 5个0805 1.5K欧姆电阻

  • 3个N沟道SOT-23-3 3.3V电平MOSFET

  • 3个0805 100nF电容器

  • 2个0805 1uF电容器

  • 2个0805 20pF电容器

  • 1个0805 4.7uF电容器

  • 1个MCP1703T-3302T / DB 3.3V稳压器

  • 1个1210 500mA PTC自恢复保险丝

  • 1个USB3090微型USB A / B端口

  • 1x 90度接头排

  • 1个8MHz HC-49晶体

  • 4个圆形橡胶保险杠

  • 4个Kailh热插拔插槽

  • 4个Cherry MX RGB或同等开

安装STM32Duino

打开arduino ide,打开首选项,添加开发板管理网址

http://dan.drown.org/stm32duino/package_STM32duino_index.json

d294478d82deff9de23580cc725a87f7.png

添加完成之后,打开开发板管理器,搜索STM,安装STM32F1xx/GD32F1xx

a23ca6339dc347924117ed1b6e6a41f9.png

STM32Duino内的USB库已经提供的USB HID功能,但其轮询间隔为10ms,因此我们还要对其进行修改。

  • 进入目录C:\Users{username}\AppData\Local\Arduino15\packages\stm32duino\hardware\STM32F1{版本名称}\libraries\USBComposite下,打开usb_hid.c文件

  • 搜索bInterval,将该值修改为0x01。轮询间隔修改为1ms

2f86f8d1a5768f4525b3c548289d7e24.png

代码配置说明

  • 去抖时间
    这是检测到按键后按键拒绝注册按键释放的时间。需要一个反跳时间,因为机械开关在按下后自然会“反跳”,如果不使用反跳计时器,可能会在很短的时间内记录多次错误的按键。在这种情况下,设置防抖计时器的方式不会影响延迟,因此更改此值不会使按键延迟更多。Cherry指定反弹时间为5毫秒,该值应适用于大多数机械开关。

  • RGB LED
    禁用此选项将禁用所有与RGB LED控制有关的代码。这可能会节省一些CPU周期,但不足以有效地更改键盘的性能。

  • 串行通讯
    禁用此选项将不允许通过串行或驱动程序软件对键盘进行编程,但是由于微控制器不再需要不断侦听串行命令,因此它将节省一些CPU周期。尽管理论上微控制器在不启用串行的情况下应该运行得更快,但是速度差异可以忽略不计。

  • RGB LED颜色和图案
    如果需要修改RGB LED颜色,则必须直接编辑代码。在checkRGBMode()函数下定义的颜色存储所有的灯光模式0颜色(静态),而incrementColor()下的颜色存储灯光模式2(颜色循环)颜色。
    更改颜色,只需更改rgbBrightness []值。这些值以百分比表示该颜色的亮度,其中0为0%,1为100%。rgbBrightness []中的1-3数组分别表示红色,绿色和蓝色。

  • ledDelay:
    这表示在灯光模式2下颜色切换过程之间的延迟,这意味着如果延迟较高,则颜色将缓慢切换,而如果延迟较低,则颜色将更快切换。

  • colorIncrementDelay
    这表示在灯光模式2下切换颜色之间的时间。

使用键盘

aee94d8cfe5a3dc99386076006e85441.png

  • 该键盘的使用非常简单,直接插入电脑USB口,即可作为正常,低延迟,轮询速率为1000hz的HID键盘使用。同时,还可以通过按键修改LED的模式和颜色。

  • 按键说明:

  • 按下模式按钮的时间少于0.3s会更改照明模式。

  • 按下按钮超过0.3s但少于5s会更改LED颜色,可以通过代码进行自定义。

  • 按住按钮超过5s将开始改变LED的亮度,并且按住按钮时亮度将以1s的增量下降。亮度将在释放按钮时设定。

  • 灯光模式:

  • 静态色

  • 按下键时点亮

  • 交替(默认固件在红色和蓝色之间,但是可以有多种颜色)

  • 系统的所有配置信息都是存放在EEPROM中。

配置按键

若想能够随时、方便的修改按键对应的键值,则需要开启程序中的串口通信功能。有了该功能后,系统将可以通过串口命令对其进行配置。也可通过上位机软件对其进行配置

  • 串口命令:"s:{key number}:{character}:"

  • "s:1:k:",将按键1设置为k

  • 使用上位机软件

ea944e07c1c5a9977d112b9cc6224f45.png

上位机软件说明

ad5c5afc94d2832989897b101014f8fe.png

  • 连接设备后,可以使用该程序即时设置按键绑定。为此,请使用名为"keybinds"的面板。您可以通过下拉菜单(参考帮助-键映射的键映射)选择键编号,然后可以通过文本框输入键绑定值。目前仅接受Ascii字符和数字,不幸的是,冒号不是可行的选择,因为它被用作分隔符。如果要禁用该键,只需在文本框中什么也不放,然后按set键即可。

  • 填写完两个选项后,只需按设置按钮,如果一切顺利,就可以设置按键绑定。即使断电,此新设置也将保存在微控制器上。

  • 原始序列号和状态
    这两个部分用于诊断目的。原始串行是设备发送回的串行数据的显示,状态面板显示了存储在设备上的不同设置。

组装

  • 效果图

bd87b78c3265b083b83082a034f13da1.png

  • 底板

    5f0c208766aee4c89b24ad0801b027f4.png

  • 组装视频

  • 实物图

96ed9a429e08c9d229248b60f53824a7.png

公众号后台回复:stm32键盘   即可获取全部设计资料。


推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

a80386f854dd8e125f0631939199f245.png

嵌入式Linux

微信扫描二维码,关注我的公众号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464888.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

arm9重启ssh服务_部署ssh使用rsa登录配置

什么是ssh?ssh专为远程登录会话和其他网络服务提供安全性的协议,利用ssh协议可以有效的防止远程管理过程中的信息泄露问题。使用ras公钥登录linux操作环境本地服务器:win10 远程服务器:centos 8 git环境生成rsa文件在windows机器上&#xff…

Android MVP模式简单易懂的介绍方式 (一)

Android MVP模式简单易懂的介绍方式 (一) Android MVP模式简单易懂的介绍方式 (二) Android MVP模式简单易懂的介绍方式 (三) 最近正在研究Android的MVP模式。看了很多文章,基本上都是长篇大论,一堆理论。但这里,我们不从理论出发&#xff0c…

什么?TTL信号也能高速稳定传输100m+?是的,你没有听错,量产电路推荐!

作者:周工,排版:晓宇微信公众号:芯片之家(ID:chiphome-dy)TTL传输100米,是不是很惊讶?早就看透了你的心思。传输100米,干嘛不用差分信号?就知道你…

the params of sys aud mod req msgs from TV

sys aud mode req msg sent from TV to AMP has a param of PA of src dev, while sys aud mode req msg sent from TV to AMP hasnt any param: aud sys mod request from TV: sys aud mod req(off) from TV: 转载于:https://www.cnblogs.com/aspirs/p/9708831.html

一定要坚强

想写这篇文章的时候,是因为确实知道发生了一些事情。我应该没有跟大家说过一件事情,我在TCL的时候,因为一件很不爽的事情,跟同事差点打架了,起因是因为睡觉的时候,他一直在打呼噜,然后我晚上我根…

致驱动工程师的一封信

引言 作为一个算是合格的驱动工程师,总是有很多话想说。代码看的多了总是有些小感悟。可能是吧。那就总结一下自己看的代码的一些感悟和技巧。如何利用你看的这些代码?如何体现在工作的调试中。作为驱动工程师,主要的工作就是移植各种驱动&am…

我的博客搭建(3)

hexo生成工程文件介绍 hexo插件 主题yilia 默认目录结构 具体参考 |--.deploy |--public |--scaffolds |--source |--themes |--_config.yml |--package.json .deploy :部署到GitHub上的内容目录public:输出的静态网页内容目录scaffolds:layo…

Oracle 10.2.0.4和10.2.0.5 中 OEM bug 8350262

一. Bug 问题表现 2011年安装Oracle 10.2.0.4 和10.2.0.5 版本时,在配置OEM的时候会报错。 忽略这个错误后,DB 可以成功创建或者升级。 MOS 上关于这个bug的说明,参考:[ID 1222603.1] 该bug 的表现为DBCA和DBUA 配置失败&#xff…

C语言不调用库函数画直线

昨天写了一个代码,使用C语言画三角形,既然写了那个,那就继续画一条直线,这个也很有意思。C语言不调用库函数画一个三角形直线的方程是如下图所示— — 斜率的范围(-∞,∞)既然知道公式了,我们就直接上代码吧&#xff0…

Shell教程

shell编程 shell历史执行脚本基本语法 变量文件名代换Globbing命令代换算术代换转义字符单引号双引号Shell脚本语法 条件测试条件分支 ifthenelifelseficaseesac循环 fordodonewhiledodonebreak和continue位置参数和特殊变量输入输出 echo管道tee文件重定向函数Shell脚本调试方…

尘埃落定,初心未改——一个大学生的电子大赛感悟

大家好,我是写代码的篮球球痴这篇文章是一位参加电子竞赛的总结文章,分享给大家。也欢迎更多的读者给我投稿,采纳后会有礼物赠送。01.一腔热血定乾坤2020年,怀着一腔热血踏入大学。比起高中那个被学业充斥的时代,迈入大…

ik分词和jieba分词哪个好_Python 中文 文本分析 实战:jieba分词+自定义词典补充+停用词词库补充+词频统计...

最近项目需要,实现文本的词频分析,折腾了几天才完成任务,有点成就感,最后整理总结一下这部分的内容,希望更多同僚受益。一.使用前准备环境:Python3.6安装结巴:pip install jiaba下载…

基于智能手机Android平台音乐播放器全程开发实战

基于android开发的智能手机平台的应用越来越多,目前也是一块比较热门的技术,本项目为基于android系统的音乐播放器项目,学习本项目的目的是为了让学员尽快掌握android领域的小应用的开发.项目从需求分析起步,完善了音乐播放器的所有功能,课程讲解深刻。 项目描述: 1、支持音乐在…

RAC集群故障恢复CRS-4047,CRS-4000

知识点: RAC是real application clusters的缩写,译为“实时应用集群”,是高可用性的一种,也是Oracle数据库支持网格计算环境的核心技术。 主要作用: (1)多节点负载均衡; (2)提供高可用:故障容错和无缝切换功…

急用物料怎么办???

咱们硬件工程师,一般都属于研发部。既然是研发,那么就具有一点研究的性质,有可能遇到预想不到的问题,在解决这些问题的过程中,难免会突然要用到一些器件。这时问题就来了,公司没有这个器件啊,但…

python 分位数计算代码_Python数据分析第十一节 数据运算

数据运算不仅仅是加减乘除的基本运算,还要包括数据的比较,汇总和相关性的计算等等,这一节我们将计算的问题帮大家汇总出来~目录一. 加减乘除运算二. 比较运算三. 汇总运算count 非空值计数sum 求和其他(均值,最大最小值…

自己动手写一个 strace

这次主要分享一下一个动手的东西,就是自己动手写一个 strace 工具。用过 strace 的同学都知道,strace 是用来跟踪进程调用的 系统调用,还可以统计进程对 系统调用 的统计等。strace 的使用方式有两种,如下:strace 执行…

在Asp.net网页中使用接口

在开发Asp.net时,我们会经常有应用MasterPage或是WebUserControl。这样会遇上一个问题,需要在aspx去找MasterPage或是WebUserControl内的对象,或是从aspx传值给它们。比如一个WebUserControl被aspx调用之后,它产生的ID会随着aspx的…

xss绕过尖括号和双括号_xss挑战平台练习

-------------------------XSS挑战之旅-------------------------最近在学习xss,找到了一个xss练习平台,在线地址:http://test.xss.tv/实验环境也可以本地搭建,不过需要phpmysql的环境:xss通关小游戏:https…

上世纪八九十年代的收录放音机拆解

头条看到刘工发的收录放音机美图,发上来大家回忆下,大家跟这些老古董有什么故事?推荐阅读:专辑|Linux文章汇总专辑|程序人生专辑|C语言我的知识小密圈关注公众号,后台回复「1024」获取学习资料网盘链接。欢迎点赞&…