第1步:材料和說明
根據您的項目制作方式,您可能需要不同的組件,但這些組件是te我用過的。
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。
-
鍵盤
+關注
關注
4文章
866瀏覽量
40690
發布評論請先 登錄
使用HCI UART端口更新CYBT-343026模塊固件,這個進程需要迷你驅動程序嗎?
M1A AI迷你電腦加持,5分鐘搞定PPT制作
圖解單片機功能與應用(完整版)
HarmonyOS應用自定義鍵盤解決方案
無風扇迷你工控機選購指南

漫畫圖解 電感器 抗干擾元器件指南(全彩PDF版)
PCB封裝圖解
提升企業效能:迷你工作站的潛力

基于XIAO SAMD21開發板的數字鍵盤制作方案

選擇合適的工業迷你電腦:買家綜合指南

真實感受,迷你主機到底是不是智商稅?

2024華碩迷你主機選購指南:全系列覆蓋

評論