第1步:材料和说明
根据您的项目制作方式,您可能需要不同的组件,但这些组件是te我用过的。
1 arduino pro micro + usb线
3个kailh box红色开关
3 10k电阻(0805 smd)
3 100nf电容(0805 smd)
4 apa102 rgb led(5050 smd)
3键帽
1本项目提供的印刷电路板(pcb)
1项目中提供的3d打印案例
为什么我要使用arduino专业版微?
大多数像uno(atmega328)这样的arduino主板都不支持usb通信。是的,您可以非常轻松地通过usb编程,我认为有解决方法,但我喜欢在usb通信方面保持简单,我不知道解决方法是否具有响应性。这些主板使用外部芯片进行usb通信,而arduino pro micro(atmega32u4)则内置。
开关
有很多你可以使用的机械开关。来自kailh或cherry mx的线性,触感或咔哒声。选择你喜欢的任何一个。我使用kailh开关,因为它们在ailexpress上很便宜。如果您选择使用pcb,则需要kailh box开关。颜色决定了感觉。
电子元件
在本章中没有太多解释它们,但如果你不使用pcb我会推荐只是普通的槽孔组件,便于焊接。不幸的是,所使用的led不适用于槽孔封装。除非您对焊接技术非常有信心,否则我也不建议在smd封装上使用电线。即使对于pcb上的smd,也需要“高级”焊接技术。
住房
我确实在这个项目中提供住房,但此时此刻有缺陷。需要进行修改以安装螺栓,led的开口不是最佳的,arduino是暴露的,需要切出一部分以便usb适合。将来可能会增加新的住房。如果您有一台3d打印机,请继续打印,但如果您不打算使用某种项目盒,请不要用它来打印这个有缺陷的盒子。
第2步:原理图
此项目的原理图非常简单,但我想为感兴趣的人解释组件知道这个实现。
切换到arduino的连接
交换机连接到arduino引脚0,2和3,因为这些引脚可以用作外部中断。这在代码部分进一步说明。
去抖电路
原理图左侧是一个复制3次的电路。该电路用于去抖开关。要知道什么是去抖动,你需要了解开关弹跳,这并不难理解。
首先看看这个模拟画第一张照片(快速点击开关然后看下面的信号)http://tinyurl.com/yajdtndw
当你按或发布时一个开关它反弹,你的信号在高和低之间交替几次,持续几毫秒。 arduino非常快,在这么短的时间内读取每一个高低。每次读取高或低时,程序将发送按键或释放按键,因此每次按下您的计算机将接收多次按键。不适合节奏游戏。
此去抖电路将减慢信号的下降沿。到arduino的信号将无法像弹跳一样快地改变,所以它将被读作一次按下。不要担心下一次真正的新闻会因为下降而放慢速度。
高级:
atmaga32u4读取0.2vcc - 0.1v = 0.9伏的数字低电平。电容器在其放电中的任何时间的电压都是vcc * e ^( - t/rc)。如果您在开关上测量不同的去抖时间,则可以计算电阻和电容值。
led
rgb led是apa102 led,可通过时钟和数据线单独寻址。无需外部组件即可使其正常工作。对于许多led,你应该使用一个平行于5伏和地的电容,但只有4个led你不需要它。
步骤3:电路板设计
pcb是在jlcpcb中设计的。我不是他们赞助的,但是对于便宜的原型,他们制作了优秀的pcb。 2美元你得到同一块板的10块,但对我来说运费大约是11美元。如果你不喜欢rgb照明并计划制作一个,你应该考虑让你的键盘没有pcb。
电路板的设计非常简单。我只需要为交换机添加一个组件,但在看了一些视频之后我就掌握了它。我发现的唯一缺陷是孔的位置与开关有点太接近。
要订购pcb,请访问https://jlcpcb.com/并选择2层选项。它会要求您提供gerber文件。下载“.zip”文件并将其拖到窗口中。你不需要解压缩它。设置应该没问题,你可以继续完成订单。
第4步:案例设计和装配提示
设计
如前所述,我的设计存在缺陷,但如果您愿意,仍然可以打印。这个设计是在fusion 360中完成的。它是一个免费的3d建模软件,凭借我从发明者和solidworks的经验,它很容易使用。表壳边角上的圆圈是为了防止从打印件上剥落。
如果你制作自己的表壳只有一件事是非常重要的。您的开关需要牢固放置,无法移动。我提供了带有尺寸的方形切口图片,因此您可以将它用于您自己的设计,假设您使用kailh box开关。
装配
现在你有组装所需的所有组件。由于开关是焊接的,因此需要组装第一个版本。
1。焊接smd元件。这些是电阻器,电容器和led。
2。焊接arduino pro micro。
3。在焊接之前,将3个开关放入3d打印的盖板中。焊接开关后,无法拆下盖板。不建议拆焊开关,可能会毁坏它们。
4。现在将开关焊接到位。尽快这样做是因为塑料开关会熔化并毁坏它们或大幅减少咔嗒声。
5。将装配好的盖板放入3d打印的外壳中,如果它们不干扰键帽,则用胶带固定或使用螺栓。
6。将keycaps放在开关上即可完成。
recomendations
上传代码后,拆焊或屏蔽arduino上的led。如果你的代码没有上传但是作为成品看起来不好看,那么很好。需要技巧和尖头镊子。
底部的一些抓握脚也很好防滑,让rgb光线透过。
步骤5:代码(硬件去抖动)
这个项目的代码不是初学友好的,所以如果你刚刚开始用arduino编程那么这个代码可能会吓到你一点。但是,我会尽力解释发生了什么事情。有些事情将在后面的tex中解释,所以如果您有疑问,请先阅读整篇文章。
上传代码
首先下载所有3“ .ino“文件并将它们放在一个文件夹中。
将您的arduino连接到您的pc并打开“osu_keyboard_code_v1.ino”。在工具 - 》板上选择“arduino/genuino micro”。同样在工具中选择正确的com端口。这有时可能会改变。要将代码上传到您的arduino,只需单击屏幕左上角的箭头,然后等到它告诉您它已在左下角完成。
osu_keyboard_code_v1
包含和定义
首先,您需要包含键盘库。这使得可以将arduino用作键盘。
接下来我定义一些值。定义就像一个变量,但在程序运行时它们不能改变。
前9个用于键盘字符,arduino引脚编号和端口位。
然后是led数据和时钟的端口位。
还定义了led的数量和色轮角度的变量。
设置
这部分代码只会在插入arduino时执行一次。
首先设置led的时钟和数据引脚作为输出和开关引脚作为输入。这是pinmode()的高级版本。如果您有兴趣搜索“直接端口操作”。
keyboard.begin()只是以键盘的形式启动usb连接。
接下来的3个中断是链接到开关引脚。每次在开关引脚上检测到变化时,都会执行一个小程序。这个小程序将继续进行。
循环
这部分将在arduino上电时不断重复。
i仅用它来改变和更新led的颜色。
中断
这里是小程序,只有在检测到变化时才会执行在开关引脚上,制作。它们是相同的,除了它们对它们作出反应。
首先它检查按钮是否被按下或释放并发送正确的键盘命令。
led (以不同的顺序解释)
如果您对led的控制方式感到好奇,那么您应该查看apa102数据表。 https://cdn-shop.adafruit.com/datasheets/apa102.pd.。.
onebit
这又是直接端口操作版本数字写作。
首先检查它是否应发送0或1,并分别将数据引脚拉低或拉高。然后它将时钟引脚写入非常短并再次写入低电平。
onebyte
这将使用“for”循环重复onebit 8次。它读取一个字节中的第一位并将其值传递给onebit函数,并对接下来的7位执行相同操作。
leddata
重复此操作onebyte 4次提供一个led所需的数据。第一个字节以111xxxxx开头,而xxxxx位置的亮度值为5位。亮度可以设置为0到31(2 ^ 5 = 32级)。
接下来的3个字节用于蓝色,绿色和红色值。每种颜色一个字节。
colorwheelthisled
此函数调用leddata根据色轮中的角度为其提供rgb颜色。
16位值是6个等间距60度的分红。查看图像可能会帮助您更好地理解。
(还提供了8位版本但注释掉了,因为它过于闪烁)
startendframe
每次想要向led发送新颜色并想要更新led的实际颜色时都需要使用起始帧
我只使用起始帧,因为endframe是不需要。起始帧是4个字节的0.结束帧是4个255字节(11111111)。
步骤6:代码(软件去抖动)
经过一段时间的游戏,我注意到硬件去抖的一些双击问题。这可以通过一些其他值电阻器或电容器来修复,但由于按钮和盖子不可拆卸,我认为软件去抖将是一个不错的解决方案。软件去抖应该工作,或者是否实现硬件去抖。在我目前的设置中,我不能取下盖子,所以我只是将电阻器和电容器留在原位。
我不会像以前的版本那样广泛地解释代码,因为它有点难以解释。
基本上大多数代码都是一样的,并且led代码是左边的不变。更改的是外部中断不再使用arduino函数。现在它适用于纯c代码。现在添加的是软件中断。为此,我使用avr计时器等待一段时间,直到弹跳停止。由于定时器是基于中断的,因此衰减时间不受循环中发生的任何事情的影响。
我能想到的唯一缺点是arduino延迟功能不能再使用了。因为延迟功能使用定时器0,并且该程序使用定时器0去抖动。
在图像中,您可以看到代码大致如何工作。 mem位指示定时器是否正在运行。未描述的是在按钮结束时按下输入的情况。在这种情况下,只有按钮已经释放时才会发送按键。这意味着就计算机而言,密钥将被按下。对于这种罕见的例外,当计时器到期时将执行检查。如果在计时器结束时未按下按钮,将发送keyrelease命令。
步骤7:结果
如果一切顺利,你现在应该有一个工作键盘来玩osu!上。我个人没有注意到任何延迟。如果你这样做,请告诉我。如果有任何问题,请随时提出任何问题。
前面提到的关于v2并不是一个承诺,所以不要推迟这个项目,因为你想要等待v2。
我希望你喜欢你的键盘!
奥苏!名称:thomazzz3
疑难解答
如果您认为键盘出现问题,请先打开文本编辑器,然后短按一次。 。
一个或多个键不起作用吗?
焊接时可能会在内部销毁开关。如果万用表将其连续/嘟嘟声,请在未连接arduino时将其与开关平行,然后按键。它应该是哔哔声。
您输入的字符是否与您在osu中配置的键匹配! ?
更改前3个#defines中的arduino代码中的字符(‘’是nessecary!)。
或者更改你的osu!使用配置键的设置。
一个或多个键是否重复几次?
去抖电路可能不适用于您的开关或没有正确焊接。检查焊接连接。如果仍然发生,请尝试1uf的电容值。这对pcb用户来说非常困难。
如果您的led出现问题
led是否会闪烁?
焊接连接可能松动。如果你使用pcb确认焊锡真的在印刷品的焊盘上流动。
没有led工作或一定数量的led停止工作?
检查第一个led的连接线之间的短路(跟踪轨道),并检查arduino输出端和第一个led输出端是否连接良好。如果确认正确且仍有缺陷,则可能需要更换第一个led。
电池修复——电动车电瓶日常维护(普通人可掌握)
又一大厂发力RISC-V,Meta第一代自研AI加速器MTIA
Facebook离职潮 Oculus创始人离职原因或在扎克伯格
老款特斯拉Model S/X频繁出现闪存超负荷擦写
Docker容器和Kubernetes退出码中文指南
迷你键盘制作图解
三星Note8什么时候上市?三星Note8最新消息:三星Note8被迫提前发布,有理有据两个原因导致!
德州仪器(TI)近日推出其最新的SimpleLink无线和有线微控制器(MCU)
科伦特致力于成为世界级LED商用显示系统服务商
亚马逊公布了2018年Q4季度财报,AWS取得强劲业绩!
智能网络和IPU在提升数据中心的性能时还能降低功耗
可折叠屏手机的市场正在不断扩大 预计今年出货量可达到550万部
AMD Ryzen 5000H/5000U爆料参数汇总
小米MIX2、小米Note3同天发布?尴尬的小米Note3,靠双曲面屏立足?
华尔街交易员被人工智能取代
中兴完成SPN转发面互通第一阶段测试,为SPN设备组网提供更多选择
华为最值得买的3台手机,最后一部价格曾高达2万
诺基亚7来临:骁龙660+全面屏+千万双摄,这回满意了吧
温度传感器开关电路分享
无线充电IC市场预测,2026年的将增长至49亿美元