使用Arduino制作自己的自定义快捷按钮

不起眼的Arduino可以做很多事情,但是您知道它可以模拟USB键盘吗?您可以通过这种简单的电路将那些难以记住的长键盘快捷键组合为一个自定义快捷键。最终结果如下:

以前从未使用过Arduino吗?首先查看我们的入门指南。

您需要什么

  • 1 x Arduino Pro Micro。
  • 瞬时按钮或键盘按钮。
  • 10K欧姆电阻。
  • 各种连接线。
  • 1 x 220欧姆电阻。
  • 1 x 5mm(0.197英寸)LED。
  • 1 x 5mm LED支架。
  • 您将需要一个非常特定的Arduino来完成该项目。我使用的是Pro Micro,因为它们又小又便宜,因此您需要一个在处理器(Atmega32u4)中内置USB串行接口的Arduino。可以与其他Arduino(例如UNO或Nano)一起构建此项目,但是要重新刷新BIOS并摆弄东西才能工作需要大量的工作。其他Arduino模型的克隆通常根本无法工作,但是Pro Micro克隆也可以。

    您将需要一个瞬时按钮,一个10K欧姆电阻器,以及您想要的每个按钮合适的连接线。采用。我使用的是Cherry MX机械键盘开关作为实际的快捷键,尽管 any 开关可以使用,但只要它是瞬时的且不会闩锁即可。

    您可能还需要一些其他物品取决于您如何构建它。如果要对其进行原型制作,则需要一个无焊面包板。将钱花在一个好的钱上是值得的-它们有时可能非常不可靠。如果要装箱,您将要购买一些剥离板。

    构建计划

    在这里它是如何工作的。 Arduino将被编程为像USB键盘一样工作-就您的计算机而言。连接到Arduino的多个按钮会将键盘命令发送到您的计算机。例如,您只需按一个按钮,但计算机会认为您已经按 Alt > F4

    选择开关

    MX系列开关有多种变体。该网站提供了出色的介绍,但是本质上归结为噪音和压力。一些型号需要更大的压力才能按下,而某些型号在按下时会发出机械的“喀哒"声。我使用了Cherry MX Browns,按下时不会发出声音。它们都是相同的尺寸,因此请放心选择任何您喜欢的模型(或混合搭配)。

    当然,您还需要购买一些键帽,并且有很多定制设计可供选择-我们是从英国的KeyboardCo购买的。

    保护套

    我已经3D打印了此保护套,您可以下载 .STL Thingiverse中的文件。如果您没有3D打印机,请不要担心,您仍然可以构建它。许多网站提供3D打印服务,例如3D集线器或Shapeways。另外,这是一个非常简单的案例,您可以用塑胶,有机玻璃,木材甚至纸板制成自己的东西。如果您想节俭,Cherry MX会在亚马逊(英国)出售一套开关测试仪/采样器。您将需要4个M5 x 35mm螺栓和4个M5螺母。当然,您也可以用它们替代合适的替代品。

    如果您要制作自己的手机壳,则需要了解一个重要的细节:Cherry MX开关可推入其安装孔。它们需要一个14 x 14mm(0.551英寸)的方形安装孔,且板的厚度不得超过1.5mm(0.059英寸)。远离这些尺寸的杂物,可能无法正确安装交换机。

    请确保正确安装交换机。顶部带有“ CHERRY"字样,而底部则带有一个小凹口。将3mm LED插入这个小插槽:

    您可能会发现LED看起来最好“倒置"安装。我使用的键帽就是这种情况,它根本不影响开关。

    您现在应该有9个带9个LED的开关。不需要将这些部件中的任何一个粘起来。焊料将固定LED,摩擦将固定开关。

    下一步,拧紧LED底座(暂时将LED卸下)。一旦电路构建完成,您将在以后完成外壳的组装。

    电路

    此电路构建在剥离板上。这对于构建半永久性电路非常有用,而无需花费印刷电路板(PCB)的成本。它只是一块玻璃纤维,铜轨在一个方向上平行延伸。这些走线可以焊接和切割。可以使用专用工具或小钻头切割轨道。

    对焊接不是很自信吗?首先看一下这些简单的项目。

    以下是剥离板的布局(不包括拖尾引线):

    请确保在电阻器和Arduino上剪下了走线。 由于很难读取剥离板电路,因此下面是面包板版本:

    它非常适合将所有组件挤压到如此小的空间中。如下剪切剪切板的边角:

    这应该整齐地插入外壳的底部:

    确保轨道垂直运行。

    将LED的阳极(长脚,正极)连接到200欧姆电阻,然后再连接到+5V。将阴极(短脚,负极)连接到地面。用热缩套管覆盖腿,然后将其推入LED支架。不需要任何胶水,但是您的LED固定器可能不是推入配合的,因此您可能需要修改这些说明。

    您可能希望在这里使用双色LED,这样一来,您就可以设置两个或更多的开关组,每个开关组具有不同的彩色状态LED。

    现在是时候焊接所有用于键帽的LED了。它们仅用于使键发光,因此您可以根据需要跳过它们,并且不必将它们连接到数字引脚,只需接通电源即可。将所有阳极连接在一起,并将所有阴极连接在一起。从我的错误中吸取教训-在连接开关之前这样做要容易得多!通过220欧姆电阻将阳极连接至+5 V,将阴极接地。这些LED并联连接。这是这些LED的电路:

    使用一小段热缩管覆盖LED和Arduino之间的连接:

    打开Arduino的电源以测试所有LED工作。您不需要上传任何代码。如果有任何LED指示灯不起作用,请仔细检查接线。

    现在,将开关连接好。这些必须通过10k电阻器连接,否则Arduino将会死亡。这被称为完全短路— +5 V直接进入地面,而Arduino上剩下的全部将是一团烟雾(相信我,我已经杀了一个人,所以您不必这样做)。这是一个开关的电路:

    所有9个开关的电路均相同。将开关连接到数字引脚2到10,每个引脚都有自己的10K电阻接地。小心焊接Cherry MX开关,它们可能会有些脆弱,我有几个针脚折断了。您可能希望将它们直接焊接到更多的剥离板上,但是仍然可以使用拖曳引线。

    就是这样用于布线。您可能希望安装USB B型母插座,但是其上的细小引脚通常很难焊接。如果您不希望这样做,请不要担心。 Arduino上的Micro USB连接器恰好适合机箱上的孔。如果您对不同的USB类型有些困惑,请确保您了解它们之间的差异。

    最后,再次检查电路是否正确。短路很容易破坏Arduino,并且可以很容易地使用Stripboard。

    代码

    现在测试电路是否正确。在继续操作之前,最好先执行此操作,以便您现在就可以解决所有问题。上载此测试代码(不要忘记从工具>电路板工具>端口菜单):

    const int buttons[] = {2,3,4,5,6,7,8,9,10}; // array of all button pinsvoid setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(2, INPUT); pinMode(3, INPUT); pinMode(4, INPUT); pinMode(5, INPUT); pinMode(6, INPUT); pinMode(7, INPUT); pinMode(8, INPUT); pinMode(9, INPUT); pinMode(10, INPUT);}void loop() { // put your main code here, to run repeatedly: for(int i = 2; i < 11; ++i) { if(digitalRead(i) == HIGH) { // software de-bounce improves accuracy delay(10); if(digitalRead(i) == HIGH) { // check switches Serial.print ("input"); Serial.println(i); delay(250); } } }}

    如果您已修改电路,则可能需要更改引脚。

    上传后,打开串行监视器(右上方>串行监视器)。逐一按下每个按钮。您应该看到串行监视器显示您按下的按钮的编号。就像指示灯一样,如果您的计算机抱怨消耗过多电流,或者当您按下按钮时指示灯熄灭,请立即断开连接!您的电路中某处短路,请仔细检查电路是否正确,连接之间是否没有短路。

    如果一切正常,请继续进行操作,然后将电路放入盒子中。您可能需要使用一点胶将电路固定在适当的位置(尽管电线可以很好地固定住)。

    要使Arduino看起来像键盘,这很简单。如果您使用的是Nano或UNO,则将使用设备固件更新(DFU)重新编程Arduino。通常用于将新固件刷新到Arduino。您将使用它通过新固件刷新Arduino,使它像键盘一样工作。由于这是一项非常复杂的任务,因此这里将不介绍。 Arduino网站上有一个很好的教程。

    Arduino Pro Micro使这一步骤非常容易。仿真USB键盘所需的逻辑已经内置在处理器中,因此就像编写一些代码一样简单!

    首先,设置按键:

    int keys[] = {2, 3, 4, 5, 6, 7, 8, 9, 10};

    包含按钮连接到的所有引脚的数组。如果您使用了更多或更少的按钮或使用了不同的引脚,请在此处更改值。

    数组是由志同道合的事物组成的集合。计算机可以优化您的代码以快速访问它们,从而加快了代码编写过程。

    现在将所有引脚初始化为输入:

    void setup() { // put your setup code here, to run once: Keyboard.begin(); // setup keyboard for (int i = 2; i < 11; ++i) { // initilize pins pinMode(i, INPUT); }}

    这告诉Arduino,所有引脚数组中的是输入。循环是用来执行此操作的,因此不必编写9次 pinMode(2,INPUT),而只需编写一次即可。这也称为 Keyboard.begin 。这将建立一个内置于Arduino库的函数,该函数专门用于模拟键盘。

    创建一个名为 readButton 的方法:

    boolean readButton(int pin) { // check and debounce buttons if (digitalRead(pin) == HIGH) { delay(10); if (digitalRead(pin) == HIGH) { return true; } } return false;}

    销,并检查是否已按下。它只是返回 TRUE FALSE 。它还包含一些软件反跳-一个简单的延迟,然后重新检查开关以确保确实按下了按钮。

    现在,在 void内称为另一个for循环loop()

    void loop() { // put your main code here, to run repeatedly: for (int i = 2; i < 11; ++i) { // check buttons if(readButton(i)) { doAction(i);  } }}

    同样,它遍历数组中的每个元素并检查是否已按下。它通过调用您先前创建的 readButton 方法来实现。如果按下了按钮,它将那个引脚号传递给另一个称为 doAction 的方法:

    void doAction(int pin) { // perform tasks switch (pin) { case 2: Keyboard.println("drive.google.com"); break; case 3: Keyboard.println("PCPC.me"); break; case 4: // CMD + T (new tab, Chrome) Keyboard.press(KEY_LEFT_GUI); Keyboard.press('t'); delay(100); Keyboard.releaseAll(); break; case 5: // your task here break; case 6: // your task here break; case 7: // your task here break; case 8: // your task here break; case 9: // your task here break; }}

    这将使用 switch 语句检查引脚号。 Switch语句(有时称为 switch case )与 if 语句相似,但是它们对于检查一件事(在这种情况下为引脚号)是否等于一个值很有用。几种不同的结果。从本质上讲,它们的计算速度要快得多。

    主要组件位于此switch语句内。 Keyboard.println 将文本写入计算机,就像您实际键入每个键一样。 Keyboard.press 按住一个键。不要忘记在短暂的延迟后使用 Keyboard.releaseAll 释放它们!

    以下是完整代码:

    int keys[] = {2, 3, 4, 5, 6, 7, 8, 9, 10};void setup() { // put your setup code here, to run once: Keyboard.begin(); // setup keyboard for (int i = 2; i < 11; ++i) { // initilize pins pinMode(i, INPUT); }}void loop() { // put your main code here, to run repeatedly: for (int i = 2; i < 11; ++i) { // check buttons if(readButton(i)) { doAction(i);  } }}boolean readButton(int pin) { // check and debounce buttons if (digitalRead(pin) == HIGH) { delay(10); if (digitalRead(pin) == HIGH) { return true; } } return false;}void doAction(int pin) { // perform tasks switch (pin) { case 2: Keyboard.println("drive.google.com"); break; case 3: Keyboard.println("PCPC.me"); break; case 4: // CMD + T (new tab, Chrome) Keyboard.press(KEY_LEFT_GUI); Keyboard.press('t'); delay(100); Keyboard.releaseAll(); break; case 5: // your task here break; case 6: // your task here break; case 7: // your task here break; case 8: // your task here break; case 9: // your task here break; }}

    除了所有数字和字母键,Arduino可以按下称为 Keyboard Modifiers 的大多数特殊键。这些对于按键盘快捷键特别有用。 Arduino网站上有一个有用的列表。

    现在剩下的就是创建一些快捷方式。您可以将其映射到现有的快捷方式,例如 Alt + F4 (Windows中的关闭程序)或 Cmd + Q (退出程序macOS)。另外,请确保您阅读了最终的键盘快捷键指南,以开始制作自己的快捷键。

    您是否已创建自己的快捷键框?在评论中让我知道,我希望看到一些图片!

    标签: Arduino 键盘 键盘快捷键