hotswap_pcb_generator 程式 PCB板鍵盤化 建構教學

前言:

由於個人長期使用 hotswap_pcb_generator 來建構鍵盤,近期也將之前撰寫的一些功能整合到原本的程式中,並且成功的改寫 PCB.scad 程式,建立出PCB板曲面鍵盤(不是之前UC36 Wing的分拆形式),因此覺得應該要寫給作業流程,讓有興趣的人也能依樣畫葫蘆,並且依照自己的需求,打造出心中理想的鍵盤。

hotswap_pcb_generator 是由 50an6xy06r6n (Gareth Chen) 撰寫的OpenSCAD程式,目的是讓 KLE 上編輯的鍵盤Layout資訊,能夠轉換成可3D列印的實體鍵盤,並且透過手拉電線的方式,達到免焊接且有熱插拔功能的鍵盤,原作者的程式包含了PCB、定位板、底板、外殼、tenting等部分,而重點還是在PCB的設計,而本篇則完全以 PCB.scad 程式,建構出完整鍵盤,省略了其他部分。

由於我手邊有比較多的廢棄網路線,所以我改用網路線內芯線來進行佈線,並依照內芯線的尺寸,修改了相關設計,並加上其他各種軸體的支援。後來習慣使用Kailh Choc矮軸,所以就專注地針對它進行設計與開發。

這個程式產生出來的鍵盤PCB板,與我們常見的PCB板不同,它沒有金屬導體,需要自行拉金屬線,需要跟平口鉗、老虎鉗、剝線器、IDC接頭壓鉗等工具打交道,也需要準備3D印表機進行列印(或者送印也可以),還有二極體、網路線(或24AWG單芯線)、MCU、IDC接頭(或耳機座)、軸體、鍵帽,這不是一般的鍵盤組裝,而是以手工藝來看待。

建構它,會消耗的時間,遠比直接買現成零件來焊接來的多,如果手不巧、眼不好、心不定,可能要花更多時間。

如果看到這裡,您還沒關掉這個網頁,那表示您對這還是有興趣,就讓我們繼續看下去。


一、軟體準備工作:

1、系統需求:

Windows 10以上作業系統,或者可以安裝 node.jsOpenSCAD的作業系統

需要把這兩套軟體都裝好,網路有很多教學,這裡就不贅述。


2、下載 hotswap_pcb_generator 程式:

將上述兩個套軟體備齊後,即可下載OpenSCAD程式使用

我的Github: https://github.com/AndyChiu/hotswap_pcb_generator

連上後下載zip檔案,或者依照自己的習慣做法clone下來


這邊我存到D槽,並且解開到D槽下:

3、安裝Node.js所需程式

開啟檔案總管,以下路徑,然後點選網址列


輸入cmd然後Enter鍵按下去



之後會開啟命令列視窗


然後執行 install.bat 批次檔


這邊會呼叫npm去安裝轉檔程式與相關元件,需要等候一些時間


這個目錄內的程式,就是用來轉換由KLE下載的JSON檔案,解析並且產生 Layout.scad 檔案,讓我們使用。

已完成,剛好npm程式有更新,一起用 npm audit fix 來更新 npm


完成

二、準備鍵盤layout JSON:

1、建構/下載鍵盤layout JSON檔案

前往 KLE (http://www.keyboard-layout-editor.com)網站,建立自己的鍵盤Layout,或者也可以下載我這邊的範例鍵盤,Willows Layout 的 W36 V2鍵盤:

我們以右手為例子,開啟網頁:


之後點左上角的Download,然後點選 Download JSON 下載 JSON 檔案



之後存到 script_UTP 目錄中
路徑為 D:\hotswap_pcb_generator\script_UTP


2、執行轉檔程式

執行 node index.js "willow-3x6+esrille-thumb-3x1-(v2)-r.json" 來轉JSON檔案

沒錯誤發生,就不會顯示任何文字:
PS: 這個執行的動作需要特別注意,如果scad_UTP內有 layout.scad 檔案,轉檔時並不會警告而是直接覆蓋,如果有處理中的檔案,記得先改檔名或者備份到其他目錄。

執行完成後,檔案總管切換到 D:\hotswap_pcb_generator\scad_UTP 資料夾,依照修改日期排序,就可以找到轉完後的 layout.scad 檔。




趁著命令列視窗還沒關,順便教一下,如何把KLE JSON數據轉成.CSV格式。
這裡可以執行 node Convert2csv.js "willow-3x6+esrille-thumb-3x1-(v2)-r.json" 來進行轉換
老樣子,轉成功依然沒有任何回應

開啟檔案總管,D:\hotswap_pcb_generator\script_UTP 資料夾,可以找到我們剛轉出來的.CSV檔案。
裡面記載了每個按鍵的相關設定,轉出的資料,可以依照自已需求做其他的應用


三、layout.scad 內容說明

回到 scad_UTP 資料夾,我們開啟剛剛轉出的 layout.scad 檔案,我這先說明各區塊內容,然後在來實做。

第4行會記載這個檔案的layout布局來源是哪個檔案,建議可以放把該檔案一起存放,未來有需要可以便於參考。

OpenSCAD程式中,大範圍註解用的是 /* 註解內容 */ 的方式,如果有要記載關於此layout的內容,也可以紀錄存到這邊。



第7至24行,主要說明Layout值所紀載的格式,主要就是 [位置, 邊緣, 額外資料]


位置(Location),裡面還細分了 [x軸位置,y軸位置 ], 軸尺寸,[旋轉角度,旋轉x軸,旋轉y軸]
邊界(Border),裡面還細分了 上邊,下邊,左邊,右邊
額外資料(extra_data), 依照不同的項目,有不同的儲存內容格式


第25至42行,主要說明 Key switch 的 extra_data 格式,裡面記載了 


[是否旋轉列,軸體類型,軸角度資訊,軸體說明]

是否旋轉列(totate_column): 是否旋轉列線通道,以便更輕鬆地佈線
軸體類型(switch_type): 預設是使用 parameters.scad 檔案提供的 switch_type 參數,如果需要單獨變更該軸的軸體類型,可以直接用雙引號標記該位置使用的軸體,例如: "choc"'
軸角度資訊,這裡轉檔後,預設的是 ["N",0,0,0,1,h_unit,v_unit] ,可以依照需求進行調整,裡面的欄位細節:

     [軸角度與高度訊] = srp,rx,ry,h,w
     
     srp:軸體仰起位置,有 LU,L,LD,U,N,D,RU,R,RD,LU=左上、RD=右下、N=無,其他依此類推,LU表示該軸體往左邊上面翹,翹起來的角度,依照rx與ry角度調整
                                            
     rx: X軸角度
     ry: Y軸角度
     h: 軸體增加高度
     w: 牆面厚度
     bx:  X軸座大小
     by:  Y軸座大小



base_switch_layout 存放了軸體設定


這邊存放了軸以外其他零件的設定,例如MCU、TRRS等





這邊開始,就是PCB鍵盤化設計的相關設定這裡的格式,與前面所述的格式不同,因用於PCB外觀設計,所以是以mm為單位,而前面那些設定,大多是以軸體大小為一個單位,例如軸體大小設成了19mm那1就是19mm,而不是1mm。

前面會需要設定最初使用的軸體大小,也就是parameters.scad內的設定

layout.scad 的設定

parameters.scad內的設定

當 layout.scad 記錄下來後,未來如果 parameters.scad 數值有改變,PCB外觀設計,也可以依照比例進行調整,因此這部分很重要,需要先定義清楚。

顏色標記說明,在之後的設定,很多地方可以用到顏色進行標記,可以讓建構時,更容易看到設定的結果,已先列出的常用顏色,以便複製取用

OpenSCAD有一個Hull的功能,可以把兩個以上的物件,將各物定為最大範圍,然後包圍起來,合併成一個物件。
我們把PCB當作一般鍵盤使用時,也希望它長的討喜些,因此製作好看的底板是不可少的,我們使用多個群組方式,標記出外框位置,最後產生鍵盤底板的形狀。
每個外框的點,都可以設定位置、直徑大小、檢視用顏色、檢視用索引文字。



在 parameters.scad 內有個 base_pcb_layout_outer_DesignMode 設定,預設為false,會直接產生hull的結果,改成true後,會取消hull,只帶出有檢視顏色的圓圈與檢視用文字,以便快速檢視設定後的效果,如果設成 "DontShow" (需要有雙引號),則連圓圈也不顯示,這裡是當物件很多時,可以先暫時關閉檢視,以便確認其他物件設定。

parameters.scad 內的切換設定




外框邊緣設定,我們可以設定讓PCB外緣它向外延伸,並且提高,這裡可以設定X軸、Y軸與高度,可以依照自己的喜好調整。

凸起邊緣的設定

如果不需要這個凸起的外框,可以由 parameters.scad 將這設定改成false。

parameters.scad 內的切換設定


圓形自黏膠墊凹槽,這裡可以於底部建立圓圈凹槽,供黏貼膠墊時使用,可以設定位置、直徑大小、內凹高度、檢視用顏色、檢視用索引文字。



當設計時,可以把設計模式打開,以便呈現出設定的顏色與索引文字,以便快速查看與調整設計。



有凸起的外框時,會需要將外框開孔,以便讓接頭能順利突出使用,這裡使用 base_pcb_layout_IDC_Hole 來設定,可以設定位置、旋轉、外型、檢視顏色。


挖出的空間,我們在擺放上IDC接頭,這裡可以設定位置、旋轉、檢視顏色。

板子上也可以寫一些文字,讓鍵盤有歸屬感,可以用凸起、凹陷文字兩種方式來呈現,可以設定的有位置、旋轉、延伸尺寸、文字內容、字體、文字尺寸、檢視顏色。



虛擬軸體與鍵帽尺寸設定,由於鍵盤軸體可以變更角度,因此轉的角度較大時,有可能會干擾到其他按鍵,為了確可行性,藉由設定虛擬軸體與鍵帽來進行判斷,以便排除干擾問題。
這裡可以設定軸體尺寸,以及鍵帽尺寸、顏色與透明度。



在 parameters.scad 內有一系列切換功能,這裡還有是否檢視軸體對應按鍵文字,以及擺放的高度。

四、建構鍵盤外觀

1、檢視PCB Layout

開啟 pcb.scad 程式,先用F5來預覽 layout,完成後,可以用這兩個按鈕,將畫面調整到完整顯示,並且以上方方向檢視。


完成後的畫面:


這時候如果拉動畫面,在CPU不夠強的電腦,拉動時會非常的卡頓


這時候,開啟 parameters.scad 進行變更,將base_pcb_layout_DesignMode設定為true。



然後按這個按鈕存檔。

然後回到 pcb.scad ,再點一次F5執行預覽,這次執行時,軸座的細節會省略不繪製,這個時候操作就會順暢很多。


2、進行設定

A、設定軸體類型:

可以先由 parameters.scad 設定預設軸體類型,目前針Choc V1軸座建構的最齊全,本篇也以此作為範例:


軸體扣夾預設也是開啟,除非列印有問題,不然是建議開啟,軸體會較為穩固,不會撞到就掉。


B、設定間距:

軸間距設定也是非常重要的,如果是用MX軸,建議改成19.05,如果是Choc V1則是沿用預設值即可。再最初的設定下,這裡如果有修改,layout.scad也是要改,如果layout.scad內的部分都設定好了,之後要改間距的話,layout.scad內的就不用修改。

parameters.scad 內的設定


layout.scad 內的設定




C、設定PCB板外框位置:

layout.scad的 base_pcb_layout_outer 內,我們可以針對外框位置進行設定,但要怎麼知道哪邊要設定多少呢?這只能多嘗試與繪製,調整出心目中的結果。

開啟parameters.scad,我們將以下設定進行修改以利於後面說明。這裡我們讓畫面顯示設定PCB板範圍的設定點,而非設定後產生合併的畫面,另外也把虛擬軸體、虛擬鍵帽與按鍵文字關閉,讓畫面乾淨些,以便於使用。



設定完後,於pcb.scad上,F5重整一下預覽畫面,接下來開始尋找外框的外圍突出點,於外框突出點,例如紅色圓圈位置,於該位置,我們點滑鼠左鍵兩下,此時十字座標軸,就會跑到點的位置。



然後查看視窗右下角,會有十字座標軸的[x,y,z]數值,我們需要x,y座標,以此為例,我們得到了48.17, -8.67的數值。



以此座標值,我們於layout.scad上輸入以下內容,圓圈大小、索引顏色與索引描述可以依照個人喜好調整,輸入完後Ctrl+S儲存內容。


回到pcb.scad上,用F5更新預覽畫面,此時就會出現剛剛設定的點,這邊會呈現橢圓,因為邊框設定的比例不同造成的。

layout.scad上的PCB 邊緣框設定,目前x與y的值不同,這導致上述位置出現橢圓,我們先將x改成4,輸入完後Ctrl+S儲存內容。


回到pcb.scad上,用F5更新預覽畫面,此時就可以看到差異。

接下來,我們依序的把邊框位置點出來,可以得到此畫面,由於我們需要鍵盤中間下方的內凹處,也有內凹的形狀,因此分了不同的hull群組,以達到我們要的效果。


於parameters.scad,將此設定關閉,然後存檔回到回到pcb.scad上,用F5更新預覽畫面


此時會得到這樣的結果,看的不是很清楚

可以把畫面挪動一下,查看效果

如果要讓顏色有區隔,可以於parameters.scad內,修改以下內容,將"None"改成"Group",這邊會以群組來呈現不同的區塊顏色,顏色會選用該群組的第一個點設定的顏色。


修改後的效果如下:






然後,我們逐一的建立外圍資料,透過不同的顏色區隔,有助於進行調整



最後出來的效果如下:

如果希望指定顏色,不要這樣花花綠綠,可以於parameters.scad內,指定需要的顏色,這裡我們以LightYellow為例:




layout.scad上的PCB 邊緣框設定,可將剛剛x改回8,或者依照喜好去調整。


x=8

x=12 可以看到邊框左右更粗,上下則維持較細

D、設置MCU放置位置

從 layout.scad 檔案裡,我們可以存這裡設定MCU的放置位置,其實這裡跟上述的外框設定是相輔相成,設計上可以起作業,我們在這裡把設定加上去,位置的部分需要去看放置在幾U的位置,而非X軸、Y軸的數值。



E、設定IDC座放置位置

由於我的設計是儘量減少浪費,因此分離式鍵盤使用兩個MCU控制,個人就不是那麼喜歡,因此我設計的鍵盤,是盡量走IDC接線的方式,讓一個MCU即可控制整個鍵盤。
從 layout.scad 檔案裡,我們可以由這裡設定IDC放置的位置。


但這邊我們可以看到,外圍的部分會擋住接頭出口,因此我們必須設定另一個參數。


由這邊,我們將挖開接口與底板,讓IDC座直接嵌入板中。


挖開後的效果:


因為IDC接頭的設計有腰身,所以造成底板會有開口,這部分影響不大,且未來可能還可以拿來做其他用途,我這裡就沒再另外填平兩個洞。


F、自黏橡膠圓墊凹槽

底板的部分,為了讓它不那麼光滑,造成打字時鍵盤被推走的問題,所以建議貼幾個橡膠圓墊。

這邊建立的方式,也跟建立底板一樣,把需要凹槽的位置點兩下,查看x,y數據,然後建立資料,只是要建立前,我們要先把底板翻到背面,可以使用此按鈕來轉面。


轉完後,可以看到背面的情況,從這狀態下,再去點選要放置的位置。


建立後如下,這邊的直徑(Diameter),需要依照實際自黏膠墊的尺寸填寫,如果有多種尺寸,就依照該位置要放的尺寸:


效果如下:




G、立體化的軸座

最近最大的改良,就是把軸座給立體化,原本設計僅為平面,後來幾經修改後,達成立體化的效果,不過要立體化的使用,所有接線都要由上面走線,目前Choc V1與MX軸座設計已改為僅上方走線。

在 layout.scad 中,每個軸都是可以設定x,y仰角、仰角位置、增加高度、長寬尺寸,預設值為["N",0,0,0,1,h_unit,v_unit],"N"為無仰角。

接下來介紹,如何讓平面鍵盤變的立體。

我們先來調整相關設定。調整虛擬軸體與虛擬鍵帽的尺寸,以便調整時,可以檢查是否有干擾到,這裡需要依照實際使用時要使用的鍵帽,由於我都是自製小鍵帽,所以兩軸彎折時,角度小沒什麼問題,但角度太大時,還是會干擾到。

但這裡的檢視用的鍵帽樣式僅方形,如果您鍵帽樣式不是方方正正,而是側面彎曲,邊緣較窄,中間較寬,這個對角落干擾就小一些,所以實際還是得再觀察自己鍵帽樣式,才能進行綜合判斷。



於 parameters.scad 內的設定開啟虛擬軸體、虛擬鍵帽與文字


回pcb.scad後F5,即可看到虛擬軸體與鍵帽出現了



在 layout.scad 中,可以先把順序,依照跑出的鍵盤排列方式排序下去,因為轉檔時,它是依照JSON檔案內的順序,而不是依照我們習慣的順序排列,目前畫面已呈現鍵盤布局,可以依照自己習慣,把 l ayout.scad 內容整理一下。

將雜亂的順序進行調整,以便於未來調整時較不易搞錯。

依照順序整理下來

我們先來把拇指區的軸進行調整,我希望依照Fn6-Fn5-Fn4的順序,軸座逐漸升高,然後軸也逐漸傾斜。

在未設定的情況如下:



由於我希望,軸是往右上傾斜,而非純右邊傾斜,所以我先把"N"(無)改成"RU"(右上),角度的部分,我先把x,y都填寫7。



執行F5後,可以看到結果:


我們發現Fn5與Fn4需要更傾斜,且要提升高度,以便讓鍵帽可以相互銜接,而不是有斷層感。我們把Fn5的角度改成10度,Fn4改成15度,高度一個上升1mm另一個上升3mm。










接下來字母區,我們希望鍵盤都是左翹,且有階梯狀的往小指降低。

我們先以YHN為例子:

在尚未調整時





調整後,翹起位置分別為左上(LU)、左(L)、左下(LD),角度為10,高度3,LD的x軸角度僅為5,也就是往下壓時,角度沒那麼大,往上的時候較大。




檢查一下,有部分干擾,不過由於我鍵帽角落較窄,尚可避開此干擾


我們接下來處理其他column的設定,逐行減少角度,並降低高度



完成後的狀態。





如果不想使用這些仰角與高度設定,可以於 parameters.scad 內,將這個參數關閉。


這樣鍵盤就回到平面的狀態。




H、撰寫文字

這裡可以讓PCB板上撰寫浮雕或凹陷字體,位置尋找也是跟建立底板一樣,其中調整角度、字體大小等,則需要反覆測試


出來的效果如下:





凹陷字體


浮雕字體


五、產生3D列印檔案(STL)

最終完成後,可以使用F6來進行渲染,但執行前,需要修改一下設定,parameters.scad需要把PCB_layout 設計模式關閉。


另外,如果產生出來的STL檔案,是要給FDM類型的3D列印機印製,建議可以把文字、橡膠墊凹槽給關閉,因為效果通常不是很好,如果是用SLA(Resin),精度也夠高的話,就可以保留使用,否則建議關閉。

另外,要產生平面或者立體鍵盤,這裡也要記得調整:




平面版本的鍵盤



立體的鍵盤


正面效果


渲染完成後,使用這個按鈕存成.STL檔案。修改檔案名稱,以便跟其他檔案進行區隔。



產生的檔案就可以查閱與列印。


使用教學就先到這邊,使用上有什麼問題,可以再跟我聯繫。

留言