如何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,一经查实,立即删除!

相关文章

给要学习.NET(c#语言)的新手一些学习方法

推荐两本书 第一本是《21天学通c#语言》 可能这本书的出版时间有点早,一些新的技术没涉及到,但是作为基础这本书是很不错的。 【原 书 名】 Sams Teach Yourself C# in 21 Days 【原出版社】 Sams 【作 者】(美)Bradley L.Jones…

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米,干嘛不用差分信号?就知道你…

学习:java设计模式—工厂模式

一、工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。 工厂模式在《Java与模式》中分为三类:1)简单工厂模式(Simple Factory):不利于产生系…

python pexpect pxssh scp_Python 的 pexpect 使用 scp 把文本文件传一半就不传了,怎么办?...

ps1aniuge2018-10-09 15:10:51 08:00linux 版 powershell,管理员权限运行 Install-Module winscp 即可。[测试通过的脚本例子]#----------------------------#用户输入部分$本地文件_路径 d:\$本地文件_文件名 a1.txt$本地文件_绝对路径名 join-path -Path $本地…

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的时候,因为一件很不爽的事情,跟同事差点打架了,起因是因为睡觉的时候,他一直在打呼噜,然后我晚上我根…

读c语言深度剖析 -- 单引号与双引号、逻辑运算符、位运算符、花括号

单引号与双引号我们知道双引号引起来的都是字符串常量,单引号引起来的都是字符常量。比如:‘a’和“a”完全不一样,在内存里前者占1个byte,后者占2个byte。1,‘1‘,“1”。第一个是常数,32位系统…

致驱动工程师的一封信

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

我的博客搭建(3)

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

alios是安卓吗_【讨论】YUNOS到底是不是Android?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼最近听朋友说,阿里巴巴集团,自己成功研发了一个系统,并且世界装机占有量排名第三,我当时很震惊,这么大的新闻,作为一个从业者我竟然不知道,然后我就…

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脚本调试方…

澄海口袋机器人_汕头澄海三名11岁小学生发明功夫茶机器人

“工夫茶机器人”由三个11岁的小学生发明。“工夫茶机器人”大洋网讯 潮汕人爱喝工夫茶,可冲泡工夫茶容易烫手且费时,如何优雅地泡一杯工夫茶?来自汕头澄海的三名11岁小学生给出了自己的答案:只要按下按钮或下达声控指令&#xff…

POS机C井例子代码(2)

详细代码 using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Text; namespace POS机C井例子代码 { /// <summary> /// Form2 的摘要说明。 /// </summa…

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

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

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

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

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

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