不起眼的Arduino可以做很多事情,但是您知道它可以模擬USB鍵盤嗎?通過這種簡單的電路,您可以將那些難以記住的長鍵盤快捷鍵組合到單個(gè)自定義快捷鍵中。最終結(jié)果如下:
以前從未使用過Arduino嗎?首先查看我們的入門指南。
您需要什么
這里是制作此項(xiàng)目所需的條件:
1 x Arduino Pro Micro。
瞬時(shí)按鈕或鍵盤按鈕。
10K歐姆電阻器。
各種連接線。
1 x 220歐姆電阻器。
1 x 5mm(0.197英寸)LED。
1 x 5mm LED支架。
您將需要這個(gè)項(xiàng)目的一個(gè)非常特定的Arduino。我使用的是Pro Micro,因?yàn)樗鼈冇中∮直阋耍虼四枰粋€(gè)在處理器(Atmega32u4)中內(nèi)置USB串行接口的Arduino??梢耘c其他Arduino(例如UNO或Nano)一起構(gòu)建此項(xiàng)目,但是要重新刷新BIOS并擺弄東西才能工作需要大量的工作。其他Arduino模型的克隆通常根本無法工作,但是Pro Micro克隆也可以。
您將需要一個(gè)瞬時(shí)按鈕,一個(gè)10K歐姆電阻器,以及您想要的每個(gè)按鈕合適的連接線。使用。我使用的是Cherry MX機(jī)械鍵盤開關(guān)作為實(shí)際的快捷鍵,盡管 any 開關(guān)可以使用,但只要它是瞬時(shí)的且不會(huì)閂鎖即可。
您可能還需要一些其他物品取決于您如何構(gòu)建它。如果要對(duì)其進(jìn)行原型制作,則需要一個(gè)無焊面包板。將錢花在一個(gè)好的錢上是值得的-它們有時(shí)可能非常不可靠。如果您想將其裝箱,則需要購買一些剝離板。
構(gòu)建計(jì)劃
這是它的工作方式。 Arduino將被編程為像USB鍵盤一樣工作-就您的計(jì)算機(jī)而言。連接到Arduino的多個(gè)按鈕會(huì)將鍵盤命令發(fā)送到您的計(jì)算機(jī)。例如,您只需按一個(gè)按鈕,但計(jì)算機(jī)會(huì)認(rèn)為您已按 Alt 》 F4 。
選擇開關(guān)
MX系列開關(guān)有多種變體。該網(wǎng)站提供了出色的介紹,但是本質(zhì)上歸結(jié)為噪音和壓力。一些型號(hào)需要更大的壓力才能按下,而某些型號(hào)在按下時(shí)會(huì)發(fā)出機(jī)械的“喀噠”聲。我使用了Cherry MX Browns,按下時(shí)不會(huì)發(fā)出聲音。它們的尺寸都是相同的,因此請放心選擇任何喜歡的模型(或混合搭配)。
當(dāng)然,您還需要購買一些按鍵蓋,并且那里有大量的定制設(shè)計(jì)可供選擇—我們從英國的KeyboardCo購買
保護(hù)套
我已經(jīng)3D打印了此保護(hù)套,您可以下載 .STL 文件來自Thingiverse。如果您沒有3D打印機(jī),請不要擔(dān)心,您仍然可以構(gòu)建它。許多網(wǎng)站提供3D打印服務(wù),例如3D集線器或Shapeways。另外,這是一個(gè)非常簡單的案例,您可以用塑膠,有機(jī)玻璃,木材甚至紙板制成自己的東西。如果您想節(jié)儉,Cherry MX可以在Amazon(UK)上出售一套開關(guān)測試儀/采樣器。您將需要4個(gè)M5 x 35mm螺栓和4個(gè)M5螺母。當(dāng)然,您也可以用它們替代合適的替代品。
如果您要制作自己的手機(jī)殼,則需要了解一個(gè)重要的細(xì)節(jié):Cherry MX開關(guān)可推入其安裝孔。它們需要一個(gè)14 x 14mm(0.551英寸)的方形安裝孔,且板的厚度不得超過1.5mm(0.059英寸)。偏離這些尺寸的距離太遠(yuǎn),您的開關(guān)可能無法正確安裝。
3D打印盒分為上下兩部分。將Cherry MX開關(guān)推入方孔:
確保正確安裝開關(guān)。頂部帶有“ CHERRY”字樣,而底部則帶有一個(gè)小凹口。將3mm LED插入此小插槽中:
您可能會(huì)發(fā)現(xiàn)LED看起來最好“倒置”安裝。我使用的鍵帽就是這種情況,它根本不影響開關(guān)。
您現(xiàn)在應(yīng)該有9個(gè)帶9個(gè)LED的開關(guān)。不需要將這些部件粘在一起。焊料將固定LED,摩擦將固定開關(guān)。
下一步,擰入LED支架(暫時(shí)卸下LED)。電路構(gòu)建完成后,您將在以后完成外殼的組裝。
電路
此電路構(gòu)建在剝離板上。這對(duì)于構(gòu)建半永久性電路非常有用,而無需花費(fèi)印刷電路板(PCB)的成本。它只是一塊玻璃纖維,銅軌在一個(gè)方向上平行延伸。這些走線可以焊接和切割。可以使用專用工具或小鉆頭切割軌道。
對(duì)焊接不是很自信嗎?首先看一下這些簡單的項(xiàng)目。
以下是剝離板布局(不包括尾隨引線):
制作確保您在電阻器和Arduino上剪下了走線。由于很難讀取剝離板電路,因此下面是面包板版本:
它非常適合將所有組件擠壓到如此小的空間中。如下剪切剪切板的角:
這應(yīng)該恰好適合案例的底部:
確保軌道垂直運(yùn)行。
將LED的陽極(長腳,正極)連接到200歐姆電阻,然后至+5V。將陰極(短管,負(fù)極)接地。用熱縮套管覆蓋腿,然后將其推入LED支架。不需要任何膠水,但是您的LED支架可能不是推入配合的,因此您可能需要修改這些說明。
您可能希望在這里使用雙色LED代替-這將允許您設(shè)置兩個(gè)或更多的開關(guān)組,每個(gè)組具有不同的彩色狀態(tài)LED。
現(xiàn)在是時(shí)候焊接所有的LED了。鍵帽。它們僅用于使鍵發(fā)光,因此您可以根據(jù)需要跳過它們,并且不必將它們連接到數(shù)字引腳,只需接通電源即可。將所有陽極連接在一起,并將所有陰極連接在一起。從我的錯(cuò)誤中吸取教訓(xùn)-在連接開關(guān)之前這樣做要容易得多!通過220歐姆電阻將陽極連接至+5 V,將陰極接地。這些LED并聯(lián)連接。這是這些LED的電路:
使用一小段熱縮管覆蓋LED和Arduino之間的連接:
打開Arduino的電源以測試所有LED的工作情況。您不需要上傳任何代碼。如果任何LED均不起作用,請仔細(xì)檢查接線。
現(xiàn)在,將開關(guān)連接好。這些必須通過10k電阻器連接,否則Arduino將會(huì)死亡。這被稱為完全短路— +5 V直接進(jìn)入地面,而Arduino上剩下的全部將是一團(tuán)煙霧(相信我,我已經(jīng)殺了一個(gè)人,所以您不必這樣做)。這是一個(gè)開關(guān)的電路:
所有9個(gè)開關(guān)的電路均相同。將開關(guān)連接到數(shù)字引腳2到10,每個(gè)引腳都有自己的10K電阻接地。小心焊接Cherry MX開關(guān),它們可能會(huì)有些脆弱,我有幾個(gè)針腳折斷了。您可能希望將它們直接焊接到更多的剝離板上,但是仍然可以使用拖曳引線。
就是這樣用于布線。您可能希望安裝USB B型母插座,但是其上的細(xì)小引腳通常很難焊接。如果您不希望這樣做,請不要擔(dān)心。 Arduino上的Micro USB連接器恰好適合機(jī)箱上的孔。如果您對(duì)不同的USB類型有些困惑,請確保您了解它們之間的差異。
最后,再次檢查電路是否正確。短路很容易破壞Arduino,并且可以很容易地使用Stripboard。
代碼
現(xiàn)在測試電路是否正確。在繼續(xù)操作之前,最好先執(zhí)行此操作,以便您現(xiàn)在就可以解決所有問題。上載此測試代碼(不要忘記從工具》 電路板和工具》 端口菜單):
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);
}
}
}
}
如果您修改了電路,則可能需要更改引腳。
上傳后,打開串行監(jiān)視器(右上方》 串行監(jiān)視器)。逐一按下每個(gè)按鈕。您應(yīng)該看到串行監(jiān)視器顯示您按下的按鈕的編號(hào)。就像指示燈一樣,如果您的計(jì)算機(jī)抱怨消耗過多電流,或者當(dāng)您按下按鈕時(shí)指示燈熄滅,請立即斷開連接!您的電路中某處短路,請仔細(xì)檢查電路是否正確,連接之間是否沒有短路。
如果一切正常,請繼續(xù)進(jìn)行操作,然后將電路放入盒子中。您可能需要使用一點(diǎn)膠將電路固定在適當(dāng)?shù)奈恢茫ūM管電線可以很好地固定住)。
要使Arduino看起來像鍵盤,這很簡單。如果您使用的是Nano或UNO,則將使用設(shè)備固件更新(DFU)重新編程Arduino。通常用于將新固件刷新到Arduino。您將使用它通過新固件刷新Arduino,使它像鍵盤一樣工作。由于這是一項(xiàng)非常復(fù)雜的任務(wù),因此這里將不介紹。 Arduino網(wǎng)站上有一個(gè)很好的教程。
Arduino Pro Micro使這一步驟非常容易。仿真USB鍵盤所需的邏輯已經(jīng)內(nèi)置在處理器中,因此就像編寫一些代碼一樣簡單!
首先,設(shè)置按鍵:
int keys[] = {2, 3, 4, 5, 6, 7, 8, 9, 10};
這是一個(gè)包含按鈕連接到的所有引腳的數(shù)組。如果您使用了更多或更少的按鈕或使用了不同的引腳,請?jiān)诖颂幐闹怠?/p>
數(shù)組是由志同道合的事物組成的集合。計(jì)算機(jī)可以優(yōu)化您的代碼以快速訪問它們,從而加快了代碼編寫過程。
現(xiàn)在將所有引腳初始化為輸入:
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,陣列中的所有引腳都是輸入。循環(huán)是用來執(zhí)行此操作的,因此不必編寫9次 pinMode(2,INPUT),而只需編寫一次即可。這也稱為 Keyboard.begin 。這將建立一個(gè)內(nèi)置于Arduino庫的函數(shù),該函數(shù)專門用于模擬鍵盤。
創(chuàng)建一個(gè)名為 readButton :
boolean readButton(int pin) {
// check and debounce buttons
if (digitalRead(pin) == HIGH) {
delay(10);
if (digitalRead(pin) == HIGH) {
return true;
}
}
return false;
}
這需要一個(gè)大頭針,并檢查是否已按下它。它只是返回 TRUE 或 FALSE 。它還包含一些軟件反跳-一個(gè)簡單的延遲,然后重新檢查開關(guān)以確保確實(shí)按下了按鈕。
現(xiàn)在,在 void內(nèi)稱為另一個(gè)for循環(huán)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);
}
}
}
同樣,它遍歷數(shù)組中的每個(gè)元素并檢查是否已按下。它通過調(diào)用您先前創(chuàng)建的 readButton 方法來實(shí)現(xiàn)。如果按下了一個(gè)按鈕,它將那個(gè)引腳號(hào)傳遞給另一個(gè)稱為 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;
}
}
這會(huì)使用檢查引腳號(hào)》 switch 語句。 Switch語句(有時(shí)稱為 switch case )與 if 語句相似,但是它們對(duì)于檢查一件事(在這種情況下為引腳號(hào))是否等于一個(gè)值很有用。幾種不同的結(jié)果。從本質(zhì)上講,它們的計(jì)算速度要快得多。
主要組件位于此switch語句內(nèi)。 Keyboard.println 將文本寫入計(jì)算機(jī),就像您實(shí)際鍵入每個(gè)鍵一樣。 Keyboard.press 按住一個(gè)鍵。不要忘了在短暫的延遲后使用 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;
}
}
除了所有數(shù)字和字母鍵之外,Arduino還可以按稱為 Keyboard Modifiers 的大多數(shù)特殊鍵。這些對(duì)于按鍵盤快捷鍵特別有用。 Arduino網(wǎng)站上有一個(gè)有用的列表。
現(xiàn)在剩下的就是創(chuàng)建一些快捷方式。您可以將其映射到現(xiàn)有的快捷方式,例如 Alt + F4 (Windows中的關(guān)閉程序)或 Cmd + Q (退出程序macOS)。另外,請確保您閱讀了最終的鍵盤快捷鍵指南,如何創(chuàng)建Windows快捷鍵以及每個(gè)Chromebook快捷鍵,以開始制作自己的快捷鍵。
責(zé)任編輯:wv
-
按鈕
+關(guān)注
關(guān)注
0文章
134瀏覽量
13180 -
Arduino
+關(guān)注
關(guān)注
190文章
6498瀏覽量
192182
發(fā)布評(píng)論請先 登錄
KiCad 中的自定義規(guī)則(KiCon 演講)

HarmonyOS應(yīng)用自定義鍵盤解決方案
如何使用自定義設(shè)置回調(diào)函數(shù)?
如何添加自定義單板
如何快速創(chuàng)建用戶自定義Board和App工程

Altium Designer 15.0自定義元件設(shè)計(jì)

think-cell:自定義think-cell(四)

think-cell;自定義think-cell(一)

創(chuàng)建自定義的基于閃存的引導(dǎo)加載程序(BSL)

用TINA V9進(jìn)行電路仿真,自定義函數(shù)按鈕是灰色的,無法輸入是哪里的問題?
EtherCAT運(yùn)動(dòng)控制器PT/PVT實(shí)現(xiàn)用戶自定義軌跡規(guī)劃

SOLIDWORKS教育版支持多種快捷鍵和自定義工具

評(píng)論