몇 년 전에 PCB없이 아크릴 레이저 커팅해서 키보드를 만든적이 있습니다.

저렇게 핸드 와이어링했죠. 나름 재미있긴 했지만 꽤 고통스런 작업이었습니다. 이 키보드는 지금도 잘 쓰고 있습니다. 그러던 어느날 에고노믹(ergonomic) 스타일 키보드가 갖고 싶어졌습니다. 에고노믹 키보드란 대충 이런 키보드들을 말합니다.

손목 건강이 안좋다거나 하는 등 심각한 이유는 아니고요. 그냥 저런 키보드도 멋있어서요. 당연히 기존 제품 중 쓸만한 것들이 있는지 찾아 봤습니다. 그런데 마음에 드는 것이 없더라구요. 결정적으로 ‘B’ 키가 문제였습니다. 한글 두벌식을 사용하고 영문 쿼티 자판을 사용한다면 영어 타이핑할 때 ‘B’키는 왼손으로 타이핑하고 ‘B’키에 매핑된 ‘ㅠ’는 오른손으로 타이핑합니다. 그래서 좌우가 갈라진 에고노믹 키보드는 ‘B’ 키가 왼쪽과 오른쪽에 둘 다 있어야 편합니다. 물론 적응해서 ‘B’와 ‘ㅠ’를 모두 왼손으로 타이핑하면 되겠지만, 그렇게 하기 싫거든요..:)
찾다보면 ‘B’키가 왼쪽과 오른쪽에 둘 다 있는 키보드도 있었는데 그런거는 레이아웃이 마음에 안들었습니다. 저는 방향키가 꼭 있었으면 좋겠거든요. 그래서 만들기로 결심했습니다. 그런데 저번처럼 핸드 와이어링하기는 싫고 해서 이번에는 PCB를 떠 볼까하고 자료 조사를 했습니다.
PCB 디자인을 할 수 있는 툴은 여러가지가 있습니다. 그 중에서 제가 고를 수 있는건 사실상 KiCAD 한 개 뿐이었습니다. 왜냐면 제가 리눅스를 메인 데스크탑 운영체제로 쓰거든요. 리눅스에서 제대로 동작하는 쓸만한 프로그램은 KiCAD 뿐입니다. 그래서 KiCAD로 PCB 디자인하기로 결정하고 최신 버전을 설치했습니다. 저는 민트 리눅스를 배포판으로 쓰는데 배포판으로 다운받는 KiCAD는 버전이 옛날꺼라 그런지 버그가 많더라구요. 그래서 그냥 KiCAD 사이트가서 다운받아 설치했습니다.

윈도우, 맥을 포함해서 아주 많은 리눅스 배포판을 지원합니다. 민트 리눅스는 우분투 기반이므로 우분투를 클릭해서 설치했습니다.
이제 설치는 했는데 어떻게 해야 할지 모르겠습니다. 그래서 쓸만한 강좌 같은 것이 있는지 검색했습니다. 검색 결과 찾은 사이트는
https://wiki.ai03.com/books/pcb-design/page/pcb-guide-part-5---creating-the-pcb
이 페이지인데요. 이 글에서 PCB 디자인하는 내용은 위 사이트의 내용을 제가 직접 해보고 쓴 것에 불과합니다. PCB 디자인은 어떻게 하는지 대충 알았으니 어떤 모양으로 키보드를 만들지 대충 구상을 합니다. 인터넷에서 적당히 참고할 만한 이미지를 찾아 봤습니다.

일단 기본적인 레이아웃은 이 키보드처럼 만들 생각입니다. 방향키가 있으니까요. 저기에 Home, End 키를 추가하고 Win키 (Meta 키라고 하던가..)도 추가하고 이중 레이어 처리를 하려면 Fn 키도 있는것이 좋겠네요. 그리고 오른쪽에 B 키도 하나 더 넣을 겁니다.

그리고 이렇게 좌우가 갈라진 형태도 괜찮아 보입니다. 위 사진은 전부 무선인것 같은데 저는 입력기기가 무선인걸 별로 안좋아해서 유선으로 연결할 생각입니다.

그리고 이렇게 가운데가 살짝 높은 형태가 손이 더 편하다고 합니다. 평평한 키보드도 잘 써 왔긴하지만 이왕 에고노믹스로 만들기로 결정했으니 할껀 다 해보려고요. :)

대략 이런 모습으로 나올 것 같습니다. 손으로 대충 그린거라 비율은 아마 그림과 다소 다를거라 예상됩니다. 그래도 대충 비슷하게 나오길 바라야죠.
다음은 컨트롤러를 결정하겠습니다. PCB를 디자인 할 것이지만 컨트롤러를 직접 PCB에 납땜하진 않을 생각입니다. 자잘한 저항등 수동 소자들 납땜할 자신이 없거든요. 대신 알리익스프레스에서 저렴하게 살 수 있는 STM32 보드를 사용할 것입니다.

‘stm32 board’로 검색하면 나오는 것들 중 흔히 bluepill 또는 blackpill로 부르는 보드를 사용할 것입니다. 대충 알리익스프레스에서 $2 ~ $3 사이 가격으로 살 수 있습니다. 따라서 PCB에는 스위치와 다이오드만 납땜할 것이고 stm32 보드는 소켓으로 연결할 것입니다.
적당한 물건을 골라서 주문합니다. 알리익스프레스에서 물건이 오려면 한 달 정도 걸리므로 보드가 오는 동안 PCB를 디자인하겠습니다. 예전에 들은바로는 bluepill 보드는 USB쪽에 저항이 없어서 USB인식이 안되는 문제가 있으니까 blackpill로 사라는 걸 들은적이 있습니다. 그러니까 잘 찾아서 USB 저항 문제가 없는 보드 혹은 blackpill 보드로 사세요.
이제 준비 다 끝났으니, KiCAD를 켜고 PCB 디자인을 하겠습니다.

KiCAD를 실행하고 메뉴에서 New > Project를 선택해서 프로젝트를 만듭니다.

키보드를 만들것이므로 저는 keyboard라는 이름으로 적당한 폴더에 프로젝트를 만들었습니다. 프로젝트 생성에 별 문제가 없다면 위 그림처럼 pcb와 sch라는 두 메뉴가 보입니다. 이름만 봐도 알듯이 pcb는 PCB를 디자인하는 것이고 sch는 회로도를 그리는 것입니다. PCB를 그리기 전에 회로도를 먼저 그려야합니다.
바로 회로도를 그리겠습니다. 그 전에 체리 스위치를 PCB에 그리기 위한 라이브러리를 로딩해야 합니다.
https://github.com/ai03-2725/MX_Alps_Hybrid.pretty
위 URL로 가서 git 프로젝트 전체를 다운 받습니다.
Git clone으로 받아도 되고

깃헙에서 ‘Download ZIP’을 클릭해서 다운 받아도 됩니다.
일단 다운 받아 놓고 다시 KiCAD로 가서 회로도를 엽니다.

Keyboard.sch를 더블클릭하면 새창이 뜹니다. 거기서 회로도를 그릴겁니다.

회로도 창에서 Preferences > Manage Symbol Libraries를 선택합니다.

그러면 Symbol Libraries 창이 나옵니다. 여기에서 Project Specific Libraries 탭을 선택하고 아래에 보이는 폴더 아이콘을 누릅니다. 빨간 네모 안에 있는 저 버튼입니다.

그리고 아까 다운받은 체리 MX 스위치 라이브러리 파일들 중에서 Schematic Library 폴더 안에 있는 MX_Alps_Hybrid.lib 파일을 선택해서 추가합니다.

추가하고 나면 이렇게 리스트에 라이브러리 이름이 보입니다.

이어서 PCB 그리는 창을 엽니다. 회로도는 회로도인데 이 PCB 그리는 창은 뭐라고 부르나요? PCB 디자인?
아무튼, 이쪽에는 footprint라고 실제로 PCB에 그리는 그림에 대한 정보를 추가합니다.
PCB 창에서 Preferences > Manage Footprint Libraries를 선택합니다.

마찬가지로 폴더 모양 아이콘이 있는 버튼을 누릅니다. 위 그림에서 빨간 네모로 표시한 버튼입니다.

그러면 폴더를 선택하는 창이 뜹니다. 거기서 MX_Alps_Hybrid.pretty를 선택합니다.

그러면 요렇게 추가됩니다.
여기까지 해서 준비 작업은 끝났습니다. 이제서야 드디어 회로도에 그림을 그릴 수 있게 되었습니다.
다시 회로도 창으로 가서 Place symbol 아이콘을 누릅니다. 오른쪽 사이드바에 있습니다.
Place symbol 아이콘을 누른 다음 캔버스에 아무데나 클릭하면 심볼을 선택하는 창이 나옵니다. 아니면 키보드 단축키 ‘A’를 누른 다음 캔버스 아무데나 클릭해도 됩니다.

검색으로 mx를 입력하면 mx가 들어간 모든 심볼이 나옵니다. 그 중 MX_Alps_Hybrid에서 MX-NoLED를 선택합니다. LED없는 체리 MX 스위치를 의미하는 심볼입니다. 그리고 캔버스에 아무데나 놓습니다.
참고로 KiCAD에서 마우스 휠은 확대/축소입니다. 캔버스 이동은 마우스 미들 버튼(보통 휠 클릭)입니다.

MX 스위치 심볼이 캔버스에 보입니다. 축하합니다. 회로도를 그렸습니다! 키보드의 동시 입력을 가능하게 하려면 스위치마다 다이오드가 붙어야 합니다. 아까처럼 Place symbol 아이콘을 누르거나 키보드 A 키를 눌러서 다이오드 심볼을 추가합니다.

다이오드는 1N4148을 씁니다. 왜 이거를 써야하는지는 모릅니다. 예전에 키보드 자작할 때 봤던 강좌에서 이걸 쓰라고 해서 그냥 씁니다.

MX스위치 심볼에 COL, ROW라고 이름을 써 놔서 이름에 맞춰 심볼을 돌렸습니다. COL이 세로고 ROW가 가로입니다. 그리고 다이오드는 COL입력에 곧바로 연결했습니다. 심볼을 돌리려면 단축키를 이용하는 것이 편합니다.
회로도에서 심볼 모양을 조작하는 단축키는 아래와 같습니다.
m: pick the component up and move it
g: drag the component up and move it while keeping wires attached to it
c: copy the component
e: edit the component
r: rotate the component
y: mirror the component
del: delete the component
esc: abort!
따라서 스위치를 선택하고 r과 y를 원하는 모양이 나올 때까지 누릅니다. 그리고 다이오드를 선택해서 r을 눌러 돌리고 m을 눌러서 이동하여 COL에 바로 연결합니다.

마우스 포인터를 드래그하면 여러 심볼을 동시에 선택할 수 있습니다. 이 상태에서 당연히 Ctrl+C, Ctrl+V를 하면 심볼을 복사할 수 있습니다. 심볼을 복사해서 키보드 스위치 매트릭스를 구성합니다.

키보드를 두 파트로 만들 생각이므로 첫 번째 파트 (키보드 왼쪽 부분)에 대한 키보드 스위치 매트릭스입니다. 먼저 스위치들끼리 와이어링을 하겠습니다.

와이어링 단축키는 w입니다. wiring을 생각하면 쉽습니다. w를 누르고 연결점을 한 번에 쭉 이으면 접점에 알아서 점이 찍히면서 연결됩니다.

연결을 완료한 회로도입니다. 단순하죠? 그냥 매트릭스라서 그렇습니다. 이제 컨트롤러와의 연결선을 그려야 합니다. 앞에서도 말했듯 저는 PCB에 컨트롤러를 납땜하지 않고 보드를 사서 소켓에 꼽을 것이기 때문에 회로도에는 소켓이 나와야 합니다.
-----------
클리앙이 게시물 한 개에 이미지가 30개 제한이 있는걸 처음 알았네요..ㅎㅎㅎㅎ 원래는 1편이 이미지 45개 짜리인데...
어쩔 수 없이 분량을 나눠야 겠습니다. 다음편은 컨트롤러 보드를 꼽을 소켓 구멍을 회로도에 그리는 작업입니다.
2편: https://www.clien.net/service/board/lecture/16405208?od=T31&po=0&category=0&groupCd=CLIEN
집에 사망한 키보드가 두대 있는데, 살릴수도 있겠다는 희밍(?)을 가져봅니다.
파는거라면 사고 싶네요. 진심..
그리고 알리에서 주문시, 배송 방법을 Ali Standard로 선택하시면 배송비가 유료가 되긴 하지만 (그래 봐야 국내 택배비 수준) 대신 배송이 보름 전후한 수준으로 단축됩니다.
ㄷㄷㄷ하네요
근데 가격이 어마어마하군요.. 37만원이라니.. ㄷㄷㄷ
친절한 내용 감사합니다
ㅠ 양쪽은 탁월한 선택이십니다
저는 문림4 기다리고 있는데.. 제발 나와만 줬으면 하는 바램입니다.
https://moonrim.io/ko
멋지시고 부지런하시네요.
저 방법 말고도 저항을 이용해서 ADC로 전압 크기 재는 방법도 있고, 컨트롤러에 핀이 엄청 많으면 모든 키를 개별 입력으로 받아서 처리할 수도 있습니다.
상하판은 나무로 깍을까 생각 중입니다. 나중에라도 적당한 아이디어 있으면 바꾸려고요.