不起眼的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
-
按钮
+关注
关注
0文章
134浏览量
12725 -
Arduino
+关注
关注
187文章
6461浏览量
186552
发布评论请先 登录
相关推荐
评论