보통 키보드 레이아웃은 키보드 배열을 말하는데, 어떤 배열의 키보드를 만들지 정해야 회로도나 pcb를 설계할 때 고민할 일이 없으니 만들어 놓고 시작하는 것이 좋습니다.
키보드 레이아웃은 keyboard-layout-editor 에서 만들 수 있습니다.
GitHub 계정이 있다면 만든 레이아웃을 저장할 수도 있습니다. JSON 파일로 저장해도 됩니다.
회로도와 PCB는 KiCad 라는 프로그램을 사용해서 설계할 것입니다. 버전은 7.0 이상의 stable 버전을 기준으로 설명하겠습니다.
키보드 매트릭스 원리 이해하기에 잘 정리되어 있습니다.
적게는 40키, 많게는 100키가 넘어가는 키보드의 모든 스위치를 하나하나 컨트롤러에 연결하기에 컨트롤러의 핀 개수가 모자르게 됩니다.
때문에 행과 열로 스위치를 묶어서 연결하고 각 행과 열을 컨트롤러에 연결하면 훨씬 적은 핀으로 다수의 스위치를 인식할 수 있게 됩니다.
이렇게 되면 스위치를 하나만 눌렀을 때는 잘 작동하지만 여러 스위치를 동시에 눌렀을 때 눌리지 않은 키까지 인식하는 경우가 생깁니다. 이럴 때 사용하는 것이 다이오드
입니다.
다이오드는 전기를 한 방향으로만 흐르게 만드는 데, 이게 누르지 않은 스위치가 눌리는 현상을 막아줍니다. 잘 이해가 안된다면 스위치 하나당 다이오드 하나가 필요하다
정도로 생각하면 되겠습니다. 저는 46개의 스위치를 사용하기 때문에 다이오드 46개가 필요하겠네요.
Ctrl + n
또는 New Project를 눌러 새로운 프로젝트를 생성합니다. 프로젝트를 생성했을 때 프로젝트이름.kicad_pcb
와 프로젝트이름.kicad_sch
파일을 확인하면 됩니다.
Symbol은 우리가 키보드에 사용할 부품의 회로도 그림이고, Footprint는 pcb 설계할 때 사용할 부품의 실제 그림이라고 생각하면 되겠습니다.
우리가 사용할 부품을 잘 정리해놓은 scottoKicad가 있습니다. DownGit사이트에서 바로 다운로드 할 수 있습니다.
라이브러리 적용 방법은 KiCad 라이브러리 적용방법에 정리해두었습니다.
추가한 스위치와 다이오드를 옮겨서 위와같이 만들어줍니다. 스위치와 다이오드 하나가 세트입니다.
이제 앞에서 만든 레이아웃대로 스위치와 다이오드를 배치하겠습니다.
스위치와 다이오드를 드래그하고 복사하면 됩니다. 일정한 간격으로 배치해야 와이어를 연결할 때 편리합니다.
이런 구조가 되는데, 연결할 때 검은색 원 안의 초록색 점은 서로 연결되었다는 뜻입니다. 연결되지 않은 선 끼리는 빨간색 원처럼 아무것도 표시되지 않습니다. 와이어 교차할 때 주의해야 합니다.
다음은 각 행과 열에 라벨을 붙여줘야 합니다. 같은 이름의 라벨은 PCB 설계 단계에서 서로 연결됩니다.
Ctrl + L
또는 회로도 편집기 우측의 Global Label
을 선택하고 이름을 정해주면 됩니다.
총 23개의 핀이 있는데 그중에서 3V3
,GND
,5V
외에는 자유롭게 행열을 연결할 수 있습니다. 다만 스플릿 키보드를 만들 때는 좌우 컨트롤러의 시리얼 통신을 위해 GPIO0
, GPIO1
핀을 비워주겠습니다.
MCU의 통신방법은 여러가지가 있는데 우리는 시리얼 통신, 그중에서도 USART Full-Duplex
방식을 사용하겠습니다. 이름부터 어려워보이는데 그냥 선 네 개만 잘 연결하면 됩니다.
좌우의 연결은 3.5mm 이어폰 잭 (TRRS)로 할겁니다. 따라서 TRRS 커넥터를 추가하겠습니다. Placeholder_TRRS
로 검색해서 두 개 추가해줍니다.
USART Full-Duplex 방식은 TX를 RX에, RX를 TX에 연결해야 합니다. 저는 간단히 TRRS 커넥터의 TX와 RX를 좌우가 엇갈리도록 하겠습니다. 빨간 박스처럼 하면 됩니다.
같은 종류의 부품을 shift + 마우스클릭
으로 선택해주고 라이브러리에서 부품에 맞는 풋프린트를 더블클릭해주면 적용됩니다.
각 심볼에 맞는 풋프린트의 라이브러리와 이름은 다음과 같습니다.
심볼 | 라이브러리 | 풋프린트 이름 |
---|---|---|
Diode | ScottoKeebs_Components | Diode_D0-35 |
Keyswitch | ScottoKeebs_MX | MX_PCB_1.00u |
RP2040_Zero | ScottoKeebs_MCU | RP2040_Zero |
TRRS | ScottoKeebs_Components | TRRS_PJ-320A |
회로도, pcb에디터 각각 상단의 버튼을 눌러 왔다갔다 할 수 있습니다.
이게 왜 좋냐면 회로도 에디터에서 심볼을 선택하면 PCB 에디터에서도 선택된 상태가 됩니다.
또 스위치 정렬이 잘 안될 때가 있는데 스위치를 드래그할 때 스위치의 중심부를 잡고 이동하셔야 스위치간 간격이 정확히 맞습니다.
다이오드 정렬이 끝났습니다. 이제 rp2040-zero와 trrs 커넥터를 배치하고 회로도에 맞춰 선을 연결해주겠습니다.
단축키 X
키로 배선을 시작할 수 있습니다.
배선작업을 하기 전에 미리 볼트가 들어갈 구멍을 뚫고 시작해도 됩니다.
위 영상에서는 배선 굵기를 조절하는데, 우리는 스위치가 눌린 것만 인식하면 되는 키보드라 따로 조절할 필요는 없습니다. F.Cu
와 B.Cu
를 단축키 V
로 바꿔가면서 배선을 할 수 있습니다.
Placeeholder_Mounting_Hole
로 검색하고 추가해줍니다.
Footprint Assignment Tool을 열어 MountingHole
라이브러리의 MountingHole_2.2mm_M2
를 선택해줍니다. M2 사이즈의 볼트를 사용할겁니다.
이제 보강판, 하판 설계를 해야합니다. 저는 Fusion360 무료버전을 사용해서 만들었습니다.
이 부분은 설명하기가 너무 어려워서 잘 만들어진 유튜브 강좌로 대체하겠습니다.
진짜 너무 어려워서 설계하기가 힘들다 하시는 분들은 스위치를 고를 때 5핀 스위치를 선택하시고 하판은 최소구매 수량때문에 남는 PCB를 하판으로 이용하면 됩니다.
근데 이러면 키보드가 정말 기괴해지니까 저는 보강판을 설계하겠습니다.
메이커를 위한 Fusion 360 모델링 - YouTube
How to save or export a Sketch as DXF in Fusion 360