电子说
第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。
全部0条评论
快来发表一下你的评论吧 !