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

电子说

1.2w人已加入

描述

不起眼的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可以在Amazon(UK)上出售一套开关测试仪/采样器。您将需要4个M5 x 35mm螺栓和4个M5螺母。当然,您也可以用它们替代合适的替代品。

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

3D打印盒分为上下两部分。将Cherry MX开关推入方孔:

确保正确安装开关。顶部带有“ 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 pins

void 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(“makeuseof.com”);

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(“makeuseof.com”);

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)。另外,请确保您阅读了最终的键盘快捷键指南,如何创建Windows快捷键以及每个Chromebook快捷键,以开始制作自己的快捷键。

责任编辑:wv

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分