키보드를 만듭시다. 어때요~ 참 쉽죠? (1)

나빌레라의 이미지

이 글은 커스텀 기계식 키보드를 하드웨어부터 펌웨어까지 모두 만들어본 이야기다. 첫 번째 이야기. 하드웨어 편.

원래는 그냥 기계식 키보드 하나 새로 사려고 했다. 그런데 기계식 키보드는 종류가 매우 많기 때문에 인터넷 검색질을 하면 할 수록 더욱 고르기 어렵게되는 문제가 있다. 어떤 키보드가 대충 80% 정도 마음에 드는데 다른 키보드는 부족한 20%를 채우고 있지만 나머지는 다 마음에 들지 않는 그런 상황이다. 그래서 생각했다. 그냥 내 마음에 드는 걸로 만들어 보는건 어떨까.

목표 설정

키보드를 만들기로 결심했으니, 어떤 키보드를 만들지 목표를 정해야 한다. 나는 아래 목록처럼 만족해야 할 조건 몇 가지를 정했다.

  • 텐키리스
  • 방향키가 있을 것
  • 펑션키(F1 ~ F12)가 있을 것
  • 표준 크기 키캡을 사용할 것
  • 키보드 중앙과 스페이스바 중앙이 일치할 것
  • 변경 가능한 키맵

제품으로 팔리고 있는 기성품을 보면 의외로 위 조건을 모두 만족하는 제품이 별로 없다. 특히 키보드 중앙과 스페이스바 중앙이 일치하는 좌우 대칭 키보드를 찾기 어려웠다. 방향키를 오른쪽에 배치해 놔서 스페이스바 중앙이 키보드 전체적으로 보면 왼쪽에 치우친 제품이 많았다. 내가 키보드를 직접 만들기로 마음먹은 가장 직접적 이유다.

이런식으로 스페이스바가 가운데에 있지 않다

흔히 포커 배열 혹은 60% 배열이라고 해서 스페이스바가 키보드 중앙에 있는 대칭형 키보드 제품도 매우 많다. 그런데 이 제품들은 거의 다 방향키가 없다. 방향키를 넣으면 스페이스바를 중앙에 넣을 수 없기 때문이라고 생각한다. 오른쪽 시프트 키와 오른쪽 컨트롤, 알트키를 조정해서 방향키를 밀어넣어 스페이스바를 가능한 가운데로 배치한 키보드도 있다.

그러다가 한국산 키보드 중에 꽤나 마음에 드는 것을 찾았다.

이정도면 거의 가운데라고 치고 그냥 이거로 살까 했더니 펑션키(F1~F12)가 없다. 나는 소프트웨어 개발자라 각종 코딩툴과 개발툴을 많이 쓴다. 이 개발툴들은 공통으로 펑션키를 단축키로 적극 활용한다는 것이다. 그래서 나는 펑션키가 꼭 필요했다.

키보드를 직접 만들기로 결심하기 직전까지 그냥 살지를 고민하게 만든 제품이 있다.

스페이스바도 대충 가운데고 펑션키도 있고 방향키도 있다. 네모 공간에 꽉차게 키를 배열한 것도 마음에 들었다. 거의 사려고 마음 먹었을 때, 방향키 위로 버튼이 저렇게 꽉차게 있으면 방향키 누르다가 잘못 누르지 않을까? 누군가의 한 마디로 마음을 돌렸다. 그래.. 잘못 누를 것 같은 배치야.. 그러면서 든 생각이 버튼 한 줄이 왼쪽에 있으면 좌우 균형이 얼추 맞을텐데..였다.

왜 가운데를 고집하는가?

개인 취향이다. 아무렇지 않아 하는 사람들이 더 많을지도 모른다. 그러나 나에겐 몇가지 이유가 있다. 앞에서 말했듯 텐키리스든 풀사이즈 키보드든 스페이스바 중앙, 쉽게 말해 손가락 기본자리는 왼쪽에 치우쳐져 있다.

그런데 사람은 모니터를 중앙에 놓고 보지 않는가? 그래서 모니터와 사람을 중앙에 맞추고 풀사이즈 키보드 기본자리를 가운데 맞추면 위 그림처럼 키보드가 오른쪽으로 치우친다. 그런데 쓰다보면 점점 키보드를 가운데로 맞추게 된다. 사람이 다 그런건지 나만 그런건지 모르겠지만, 아무튼 나는 그런다. 그래서 시간이 지나면 이렇게 된다.

두 손은 계속 타이핑을 해야하니 키보드 기본 자리에 가 있다. 하지만 무의식 중에 키보드 자체를 모니터와 몸 중앙에 맞추다보니 허리를 45도 정도 비틀고 컴퓨터를 쓴다. 이러면 몸이 틀어졌기 때문에 모니터를 쳐다보고 있는 목도 돌아간 상태가 된다. 이 상태로 컴퓨터를 계속 쓴다. 별로 개의치않은 사람들도 있을것이다. 그런데 나는 이러면 허리도 아프고 목도 아프고 온몸이 쑤신다. 몸이 강건치 못한게 문제다. 몸을 하루아침에 튼튼하게 만들 순 없으므로 도구를 바꾸기로 했다.

그래서 키보드 자체 중심선과 기본자리 중심선(스페이스바 중심) 그리고 모니터 중심과 몸의 중심을 정렬하면 몸을 비틀지 않고 컴퓨터를 사용할 수 있다. 이 조건에 맞는 키보드를 찾지 못해서 만들기로 결심한 거다.

완성품부터 공개

그래서 완성한 키보드다. 기존 표준 배열에는 없는 왼쪽에 키 다섯개를 일렬로 배치한 것이 가장 큰 특징이다. 오른쪽에 방향키 때문에 키 한 개 반 크기 만큼 늘어난 것을 왼쪽에 키를 배치해서 상쇄한 것이다. 그래서 결과적으로 스페이스바를 중앙에 배치할 수 있었다. 사실 측정해보면 여전히 스페이스바가 키보드 정 중앙에 있진않다. 약 4mm 정도 왼쪽으로 비껴 있는데 이정도면 거의 중앙이다.

완성품과 처음 정했던 목표를 비교해 보면, 일단 텐키리스다. 방향키도 있다. 펑션키도 있다. 표준 키캡을 사용했다. 언급했다시피 스페이스바는 거의 중앙이다. 그리고 키맵도 변경 가능하다. 나중에 펌웨어 강좌에서 이야기할 것이다.

재료들

키보드는 크게 다음과 같은 부품으로 만든다.

  • 하우징 (케이스)
  • 기판
  • 보강판
  • 스위치
  • 키캡
  • 컨트롤러

한국 키보드 커뮤니티에서는 하우징이라고 부르고 미국쪽에서는 그냥 케이스라고 부르는 부품은 말 그대로 키보드 가장 겉을 감싸고 있는 바로 그것이다. 제품으로 파는 키보드는 거의 플라스틱으로 만든다. 일부 고급 제품은 알루미늄으로 만들기도 한다. 당연히 알루미늄이 훨씬 비싸다. 커스텀 세계로 넘어가면, 어떤 재료로든 하우징을 만들 수 있다. 나무, 종이, 유리 뭐든.

기판은 우리가 잘 알고 있는 그 PCB 기판이다. 이 기판에 스위치와 컨트롤러를 납땜한다. 필요에 따라 LED를 추가하기도 한다. 이런 부품을 PCB 기판에 붙인다. PCB 기판을 직접 만들려면 PCB 기판을 그리는 방법을 알아야 한다. 한마디로 기술이 있어야 한다. PCB 기판을 직접 만드는 것은 전문가 영역이다.

보강판은 PCB에 붙인 스위치를 잡아주는 일을 한다. 키보드 스위치라는 것이 지속적으로 충격(키보드 타이핑)을 받는 부품이다보니 PCB에 납땜한 것으로는 불안하기 때문이다. 위에서 계속 내려치고(타이핑) 있는데 혹여나 PCB에 땜질해 놓은 납이 떨어질 수도 있지 않은가. 그래서 키보드 스위치는 PCB가 아니라 보강판에 고정되고 PCB는 보강판 아래에서 스위치 다리만 전기적으로 연결하고 있는 것이다. 그래서 PCB가 없어도 키보드를 만들 수 있다. 보강판에 스위치만 고정하고 스위치 배선은 PCB 없이 직접 전선을 납땜하는 것이다. 내가 이렇게 만들었다. PCB를 만들 줄 몰라서.

스위치는 키보드 부품 중에서 가장 중요한 부품이다. 그리고 가장 단가가 비싼 부품이다. 케이스를 뭐로 하느냐에 따라서 예산이 가장 많이 필요한 부품이거나 두번째로 비싼 부품이다. 키보드 하나 만들려면 스위치가 90~100개 정도 있어야 한다. 내가 만든 키보드는 82키짜리지만 여분을 생각해서 90개를 구매했다. 스위치는 종류가 엄청나게 많다. 제조하는 회사도 많고 회사별로 다양한 스위치를 만들어 팔고 있다. 스위치에 대해 공부해 보려고 찾아보면 청축, 갈축, 흑축, 적축 그리고 클릭, 넌클릭, 클리어 등 용어(?)가 마구 나온다. 스위치 관련 용어를 이 글에서 다 쓰진 않을 것이다. 내용이 너무 많기 때문이다. 그리고 인터넷에 잘 정리된 글이 많다. 검색해서 관련 글을 찾아보길 추천한다.

키캡도 종류가 엄청 많다. 키보드 덕질의 시작은 키캡 놀이부터란 말이 있다. 쓰고 있는 키보드에 키캡을 다른 것으로 바꾸는 것에서부터 키보드 덕질을 시작한다는 말이다. 크기, 색은 당연한 것이고 재료, 각인 인쇄 방식도 다 다르다. 키캡 높이에 대한 용어도 따로 있다. 스위치와 마찬가지로 잘 정리된 글이 인터넷에 많다. 궁금하신 분들은 검색해 보면 좋은 자료들을 많이 찾을 수 있을 것이다.

스위치 입력을 처리해서 키 스캔 코드를 만들고 이 스캔 코드를 USB HID 스팩에 맞춰서 호스트로 보내는 동작을 할 무언가가 필요하다. 바로 컨트롤러다. 컨트롤러를 제어하는 펌웨어도 필요하다. 컨트롤러와 펌웨어가 있기 때문에 키보드는 엄연히 독립된 임베디드 시스템이다. 키보드 전용 컨트롤러 칩 같은게 있는지 모르겠다. 보통 커스텀 키보드는 AVR이나 ARM Cortex-M3 계열 칩 중 가격이 싸고 GPIO가 많이 달려있는 컨트롤러를 많이 쓴다.

나의 선택

커스텀 키보드 만드는 사람들 중에는 CAD같은 툴로 3D 디자인을 해서 알루미늄 케이스를 CNC로 깍아서 만드는 사람들도 있다. 존경스러운 덕력을 가진 사람들이다. 나는 그 정도 실력이 되지 못하기에 가장 쉽게 만들 수 있는 아크릴을 하우징과 보강판으로 선택했다. 아크릴을 선택한 이유는 간단히 2D 벡터 그래픽으로 그린 도면만 있으면 레이저로 깍아서 배송까지는 해주는 서비스들이 있기 때문이다. 인터넷으로 앉아서 다 할 수 있어서다.

스위치는 체리 갈축을 선택했다. 나는 회사에서 체리 적축을 사용한다. 집에서는 흔히 키보드 끝판왕이라고 하는 정전식무접점러버돔 스위치를 쓰는 리얼포스를 쓴다. 그리고 서브로 심심할 때 청축 키보드를 쓴다. 다들 각기 장점과 단점이 있기에 쓰진 않겠다. 어디까지나 취향 영역이니까. 갈축 스위치를 선택한 이유는 별거 없다. 안써봤으니까.

앞에서 살짝 말했듯 PCB는 쓰지 않는다. 내가 PCB를 그릴 줄 모르기 때문이다. 알면 아마 주문 제작 했을 것이다. 그래서 보강판에서 바로 배선하는 방식으로 키보드를 만들었다.

컨트롤러는 ARM Cortex-M3 중에서 제일 싸고 싼것들 중에서 GPIO가 가장 많은 것을 골랐다. 사고 나서 나중에 안 사실인데, 내가 고른 그 칩과 보드가 Cortex-M3 범용 개발 보드 제품 중에서 가장 많이 쓰는 것이었다. 덕분에 펌웨어 개발할 때 자료 찾기가 수월했다.

여기까지가 계획, 준비, 기획 뭐 이런식으로 많이 불리는 단계다. 다음은 실행, 진행, 액션 뭐 이렇게 불리는 단계다.

레이아웃 설계

이 글 서두에 완성품을 먼저 공개했다. 최종 레이아웃은 이것이다.

위 그림같은 레이아웃을 확정할 때까지 여러번 레이아웃을 변경했다. 그 중에는 이런 안도 있었다. 레이아웃을 그린 툴이 다르다. 그래서 초기에 그린 아래 레이아웃이 조금 못생겨 보인다.

표준 키보드의 맨 윗줄 펑션키를 왼쪽으로 옮겼다. 그렇게 해서 스페이스바 위치를 키보드 중앙에 맞춘것이 핵심 컨셉이다. 다만 문제는 5줄 수를 맞추려다보니 펑션키가 F1~F10까지 10개만 들어간 것이다. F11과 F12는 많이 안쓸것이라고 생각했는데 나중에 알고 보니 무려 비주얼 스튜디오에서 F12를 많이 쓰더라. 그래서 다음으로 생각 했던 것이, 어찌되었든 레이아웃은 마음에 드니까 나중에 키맵 변경으로 왼쪽 10개를 재정의해서 쓰면 되지 않을까하는 것이었다. 맞는 말이다. 키맵 재정의해서 F12 배치해 넣으면 되니까. 그럼에도 최종 레이아웃으로 결정하지 않은 이유는, 위 레이아웃으로 도면을 그렸더니 아크릴 기본판에 들어가지 않았다. 키보드가 옆으로 좀 길었다. 그보다 큰 원판을 써야 했는데, 그랬더니 가격이 많이 비싸졌다. 가격이야 돈 조금 더 쓰면 되는 거지만, 키보드가 꽤 길다는 사실에 키보드 길이를 줄이는게 낫겠다는 생각을 했다.

그래서 다시 F1~F12를 표준 배열처럼 위로 올리고 왼쪽에는 한 줄만 놨다. 그리고 비슷하게 균형을 맞춰서 방향키를 오른쪽 시프트 자리를 파먹어서 배치했다. 친구의 조언을 받아들여 방향키 주변에 키를 없애고 자주 사용하는 딜리트 키만 백스페이스 키 옆에 배치했다.

케이스와 보강판 도면 그리기

별도로 통짜 케이스를 쓰는 것이 아니라 아크릴이나 알루미늄을 적층해서 하우징을 만드는 것을 키보드 덕계에서는 샌드위치 방식이라고 부른다. 보통 샌드위치 방식으로 하우징을 만들 때 적게는 3층, 많게는 5~6층 정도로 만든다. 다른 사람들이 만든걸 보니 4층으로 만드는게 일반적인것 같다.

  • 윗판
  • 보강판
  • 중간판 (PCB)
  • 아래판

상판, 보강판, 중판, 하판이라고 부르기도 한다.

위 그림을 보면 각 판이 어떤 역할을 하는지 바로 알 수 있다. 그림 설명과 위 목록이 다르긴 하지만 중요한것은 쌓아서 만든다는 것이다. 상판이 없는 키보드도 많다. 상판이 없는 키보드를 비키 스타일이라고 부른다. 진짜인지는 모르겠는데 이 비키 스타일에 발상지가 한국 키보드 커뮤니티라고 한다.

그래서 비키 스타일로 키보드를 만든다고 하면 상판이 없어도 되다. 비키 스타일로 만들면 판 3개면 되는 것이다. 보강판, 중간판, 아래판. 나는 비키스타일로 판 4개를 썻다. 중요한 것은 판을 몇개 썻느냐가 아니다. 실제 완성품의 크기와 높이다. 3층으로 만든다고 하더라도 중간판 아크릴을 15mm 짜리 같은 두꺼운 판재를 쓴다면 3mm 아크릴 서너장 쌓은것보다 높은 키보드가 된다.

보통 보강판에 2~3mm 아크릴을 쓰고 중간판에 5~10mm, 아래판으로 다시 2~3mm 아크릴을 쓴다. 이러면 겉에서 보기에도 깔끔하고 10~20mm 사이로 사용하기 적당한 키보드 높이가 나온다. 다만 문제는 다른 두께 원판을 두 장 써야 한다는 것이다. 돈이 더 들어간다. 그래서 나는 그냥 3mm 네장으로 만들기로 결정했다. 원판 한장에 최대 판 5개를 넣을 수 있기 때문이다. 그러나 판 5개를 넣었더니 제작비가 너무 많이 나와서 판 4개만 쓰기로 했다. 내가 만약 다른 아크릴 업체를 이용했다면 계획이 달라졌을 지도 모른다.

  • 보강판
  • 중간1
  • 중간2
  • 아래판
  • 컨트롤러 수납 (여기에 컨트롤러랑 USB 구멍을 뚫음)

중간1과 중간2는 높이를 제공하는 목적 말고는 아무 역할이 없다.

아크릴 한 장이 790x384mm다. 이 아크릴 한 장에 딱 들어간다. 그림을 보면 중간판1은 보강판과 동일하다. 중간판 2는 스위치 구멍이 일부만 있다. 도면으로 봐서 이해가 될지 모르겠지만 머릿속에서 3mm 높이로 3차원 랜더링을 해 보라. 그러면 전체적으로 열십자 모양 기둥이 서 있고 기둥 내부에 스위치가 들어가는 구멍이 있는 모양이다. 왜 이렇게 했나면

중간판의 역할은 높이를 제공하는 벽이기 때문에 상식적으로 벽만 있으면 충분하다. 실제로 충분할지도 모른다. 그러나 나는 이런 걱정을 했다. 아무리 그래도 길이가 30cm 넘는 판인데다가 스위치 꼽는다고 구멍 숭숭 뚫려 있고 지속적으로 위에서 아래로 행해지는 충격(키보드 타이핑)을 받는 보강판이 휘어지지 않는다는 보장이 없지 않은가? 저렇게 중간판이 벽만있으면 가장 많은 충격을 받는 키보드 중앙 부위는 공중에 그냥 떠 있는 셈인데 뭔가 아래서 받춰줘야 하지 않을까?

조금 극단적인 상태를 표현한 그림이지만, 내 머릿속에서 상상했던 최악의 상황은 위 그림과 같은 것이었다. 그래서 가운데 기둥 역할을 하게끔 보강판에서 아래판까지 연결하는 벽을 세운 것이다. 이 벽이 스위치 배선을 방해하면 안기에 중간판 1은 아예 보강판하고 같은 것을 붙여서 스위치가 충분히 아크릴 판 안에 파뭍히게 만들었다.

사실 그냥 보강판하고 똑같은 판 세장을 겹쳐도 된다. 그러면 바로 아래판과 물리적으로 접촉하므로 단단한 느낌을 줄것이다. 그런데 중간2판을 저렇게 만든 이유는 스위치를 연결한 전선이 어딘가에 모여 있을 공간이 필요해서다. 비록 높이 3mm 밖에 안되는 공간일 테지만 없는것 보다는 나을테니.

컨트론러 수납판은 한쪽에 구멍이 뚫려있다. 이 구멍으로 USB 케이블을 연결한다. 당연히 구멍 안쪽에는 컨트롤러 보드가 있어야 한다. 컨트롤러 보드가 고정되어야 하기 때문에 보드를 고정할 나사가 들어갈 구멍 자리를 그렸다. 그리고 아래판을 통해서 컨트롤러 보드가 들어가게끔 아래판에 컨트롤러 크기에 딱 맞는 구멍을 뚫었다.

표준 키캡 크기는 18mm x 18mm다. 키캡과 키캡 간격은 1.05mm다. 그래서 레이아웃을 디자인 할 때는 키 하나 크기를 19.05mm x 19.05mm로 사각형을 그리고 디자인 하면 된다. 이 크기를 키보드 업계에서는 1u라고 부른다. 키보드에서 가장 많이 보이는 정사각형 키가 1u다. 당연히 컨트롤, 알트 같은 키나 엔터 등은 옆으로 더 기니까 사이즈가 정해져 있다.

  1. 컨트롤, 알트 등 모디키 : 1.25u
  2. 탭, 역슬래시 : 1.5u
  3. 백스페이스, 키패드0 : 2u
  4. 왼쪽 시프트, 엔터 : 2.25u
  5. 오른쪽 시프트 : 2.75u
  6. 스페이스바 : 6.25u
  7. 캡스락 : 1.75u

그리고 스테빌라이저라는 것이 있다. 이것은 스페이스바나 엔터처럼 2u가 넘어가는 키를 양쪽에서 잡아줘서 긴 키를 옆에서 눌러도 인식이 되게끔 하는 부품이다. 2u가 넘는 키는 백스페이스, 시프트, 엔터, 스페이스바다. 스페이스바를 제외한 나머지 키는 스위치 중심에서 11.5mm 양쪽으로 3.05mm 너비로 네모를 뚫으면 된다. 스페이스바는 스위치 중심에서 50mm 양쪽으로 네모를 뚫는다. 그런데 스테빌라이저는 내가 그려 놓고도 확실치 않았다. 그래서 일단 그린다음 종이에 출력해 종이를 칼로 오려서 스테빌라이저 부품을 끼워 본 다음 위치를 조정했다.

키캡 사이즈는 18mm인데 보강판에는 스위치를 끼운다. 그래서 일단 키캡 사이즈로 레이아웃을 잡은 다음 13.9mm x 13.9mm 크기로 네모를 그려서 각 키캡과 가로세로 가운데 정렬하여 위치를 잡는다. 체리 MX 스위치 크기가 14mm x 14mm인데 레이저 커팅하면 0.1mm 정도 녹아 없어지므로 13.9mm로 네모를 그리면 된다. 스위치의 중앙과 키캡의 중앙이 일치하면 되므로 키캡 레이아웃 기준으로 각각 가운데 정렬해서 스위치 구멍 위치를 다 잡았으면 키캡 네모를 레이어 처리하든 지우든 해서 안보이게 하면 위 그림처럼 스위치 구멍이 자리잡은 도면이 만들어 진다.

도면은 SVG 포멧으로 업체에 보내면 된다. 다른 업체들도 다 SVG 면 되는 것 같다. 그외에 일러스트레이터 등으로 그린 어떤 형태든 벡터 그래픽 포멧 파일이면 웬만한 업체에서는 다 처리해주는 것 같다. 나는 리눅스에서 잉크스케이프로 그렸다. 잉크스케이프를 처음 써 봤다. 사실 벡터 그래픽 작업도 처음해봤다. 중간 직선 하나 지우는 것 조차도 쉽지 않았다. 물론 내가 요령과 방법을 몰라서 그러는 것일 테지만, 내게는 정말 고통스러운 작업이었다. 이거 때문에 차라리 CAD를 공부하는 게 낫겠다 싶어서 FreeCAD 책도 샀다. 잉크스케이프로 어찌저찌 필요한 도면을 그려서 CAD를 쓰진 않았다. 그래도 책 값이 아까우니 읽어야지.

배송받은 아크릴 케이스

도면을 그려서 아크릴 업체에 보내면 이렇게 깍아서 보내준다. (내 손이 찬조 출연했다.) 배송 받자마자는 사진 찍는 걸 까먹어서 스위치를 이미 몇개 체결한 후에 찍은 사진이다. 내가 사는 곳이 미국이라 저거 깍는데 재료값 포함해서 $50 넘게 나왔다. 이거도 그나마 도면 설계를 바꿔서 금액을 줄인거다. 처음엔 $70 넘게 나왔다. 한국에서는 저만큼 하는데 얼마 정도 나올지 궁금하다. 사실 아크릴에 들어가는 돈이 스위치보다 많을거라 생각하지 않아서 아크릴 가격 나온것 보고 심한 충격을 받았다.

부품 구매

부품은 모두 알리 익스프레스에서 샀다. 나도 키보드를 처음 만드는 거라 어떤게 필수로 필요하고 어떤게 없어도 되는지 몰라서 모든 부품을 한번에 주문한게 아니라 생각 날 때마다 하나씩 주문했다. 게다가 내가 미국에 살고 있어서 물건을 하나 주문하면 태평양을 건너오느라 한 달 가까이 걸렸다. 덕분에 키보드를 디자인하고 물건을 주문하고 물건이 오는걸 기다리는 동안 펌웨어 개발을 했다.

그리고 부품외에 작업할 때 필요한 도구도 샀다. 납땜 인두기, 컷팅 매트, USB-to-Serial 보드, 전선류 같은 것들이다. 얘네들 사 놓은 것이 한 번만 쓰고 묵혀두긴 아까워서 키보드를 한 개 더 만들까 생각 중이기도 하다. 이번에는 PCB까지 디자인해서.

아래는 필요한 도구 목록이다.

  • 인두기
  • 실납
  • 플럭스
  • 핀셋
  • 테스터기
  • 컷팅매트
  • 전선
  • USB-to-Serial 보드
  • 버니어캘리퍼스

도구는 바로 필요한 것들이어서 알리익스프레스에서 주문하고 기다릴 수 없었다. 그래서 아마존에서 샀다. 동일 제품이라도 아마존에사면 최대 두 세배까지 아마존이 비싸다. 그래도 빨리 받을 수 있기에 당장 필요한 것은 아마존에서 샀다.

부품은 키보드를 만드는데 필요한 것들이다. 즉, 키보드를 만들 때마다 사야 하는 것들이다.

  • 스위치
  • 다이오드
  • 키캡
  • 스태빌라이저
  • 컨트롤러
  • USB 케이블
  • 아크릴 케이스

아크릴 케이스를 제외하고 모두 알리익스프레스에서 구매했다. 개별 가격을 여기에 쓰진 않겠다. (왠지 쓰면 안될것 같다.) 나는 아크릴 케이스에 판을 4개나 쓰는 바람에 아크릴 케이스 주문 비용이 제일 많이 들었다. 아크릴 케이스른 단순하고 얇게 만들면 보통은 스위치 구매 비용이 제일 많이 든다. 전체 재료비에 대략 $140 정도 들었다. 원화로 해도 대충 15만원 언저리면 재료를 살 수 있을 것 같다.

다이오드는 왜 필요한가

다른 사람이 쓴 커스텀 키보드 자작기를 보면 무한 동시 입력이 되게 하려면 각 스위치 마다 전부 다이오드를 연결해야 한다고 써 있다. 무한 동시 입력과 다이오드가 어떤 관계길래 필요하다는 걸까. 회로를 그려서 상황을 만들어보면 이해할 수 있다.

컨트롤러(정확히 펌웨어)는 아래 순서로 동작하면서 키 눌림을 인식한다. 위 그림을 기준으로 설명한다. 행(R0~R2)에는 출력 신호핀을, 열(C0~C2)에는 입력 신호핀을 연결했다.

  1. R0~R2 출력을 모두 Low로 한다.
  2. R0 출력만 High로 한다. (A, B, C 중 뭐가 눌렸는지 보려고)
  3. C0~C2을 순서대로 읽는다. High가 인식되는 키가 눌린거다.
  4. R0 출력을 Low로 바꾼다.
  5. R1 출력을 High로 한다. (D, E, F 중 뭐가 눌렸는지 보려고)
  6. C0~C2을 순서대로 읽는다. High가 인식되는 키가 눌린거다.
  7. R1 출력을 Low로 바꾼다.
  8. R2 출력을 High로 한다. (G, H, I 중 뭐가 눌렸는지 보려고)
  9. C0~C2을 순서대로 읽는다. High가 인식되는 키가 눌린거다.
  10. R2 출력을 Low로 바꾼다.
  11. 계속 반복

사람 손가락은 10개기 때문에 사람은 최대 10개까지 키보드 키를 동시에 누를 수 있다. 혓바닥, 발가락 등 신체 다른 부위를 동원하면 더 많이 누를 수 있다. 아무튼 괜찮은 키보드라면 키보드 키가 한 개 이상 동시에 눌려 있을 때 동시에 눌린 키를 모두 잘 처리해야 한다.

평범하게 E 키를 눌렀다고 치자. 그러면 회로에서 전기 신호는 아래 그림처럼 지나갈 것이다.

별문제 없다. 그런데 실제 전기 신호는 저렇게 깔끔하게 전선 한 개에만 있는게 아니다. 연결된 모든 전선에 신호가 다 퍼져 있다. (수도 파이프를 지나가는 물을 생각하면 쉽다.) 이렇게.

이 상태에서 B 키가 눌리면 High 신호는 B 키 스위치를 타고 아래로 퍼진다. 이렇게

뭔가 좀 문제가 있어 보이긴한다. 그래도 아직까지는 괜찮다. R0에 High 나갈 때 B를 인식하고 R1에 High 나갈 때 E를 인식한다. 아직은 별 문제가 없다. 하지만 여기서 키를 하나 더 누르면 문제가 생긴다. C나 F 키를 누르면 문제가 생긴다. 예를 들어 C 키를 눌렀다면, 아까 B 키를 통해서 거꾸로 퍼진 High 신호가 C 키 입력으로 들어가서 C2 핀으로 들어간다. 따라서 현재 R1에 High를 출력하고 R0는 Low를 출력하고 있지만 C 키는 R0에 연결된 신호선 입력으로 High를 C2에 보낸셈이 된다. 문제는 R1 열을 확인하고 있으므로 C2에 High가 들어오면 펌웨어는 F 키가 눌린것으로 인식한다는 것이다. 실제 F 키는 눌리지 않았는데도.

사용자는 키를 3개 (E, B, C) 눌렀는데 키보드에서는 4개(E, B, C, F)가 눌린걸로 인식하는 문제가 생긴다. 고스트 입력(ghost input)이라고 불리는 현상이다. 이 고스트 입력을 방지하려고 다이오드를 모든 키마다 붙이는 것이다. 다이오드 위치는 입력 신호선 앞이다.

키가 9개므로 다이오드도 9개 붙였다. 만약 104키 표준 키보드라면? 다이오드 104개 붙여야한다. PCB가 있으면 좀 수월할테지만 나는 PCB 없이 생으로 배선했다. 다이오드 붙이는 작업은 꽤나 지루하고 고통스러운 작업이었다. 아예 스위치 안에 다이오드가 들어간 키보드 스위치도 판다고 한다. 그런데 체리 스위치는 비싸고 싼건 중국산 카피 제품이다. 돈을 아끼면서 체리 스위치를 쓰고 싶으니 나의 시간과 노력을 투입하는 수 밖에. 다이오드를 추가한 회로에서 다시 E 키와 B 키를 같이 누르면 신호 상태는 어떨까?

B 키 스위치 입력에 붙어 있는 다이오드가 입력 신호선으로 내려가는 High 신호를 막는다. 그래서 R0에 연결된 신호선에 불필요한 High가 생기지 않는다.

이렇게 다이오드로 가짜 입력을 방지한다. 그러면 키보드 펌웨어는 단순 확인만 반복하면서 동시 입력처리를 할 수 있다. HID 스펙은 동시 입력 데이터를 최대 6개까지만 보낼 수 있다. 쉬프트, 알트, 컨트롤 등 Modi key까지 포함하면 7개다. 그래서 USB 키보드는 키보드 스위치를 아무 많이 눌러 놔도 한 시점에는 7개만 인식한다. 이건 스펙에 있는 제약이라 모든 키보드가 다 이렇게 동작한다.

다이오드 납땜

체리 MX 스위치를 보면 이렇게 다이오드 기호가 겉에 새겨져 있다.

사진에 잘 보일런지 모르겠다. 빨간 동그라미 세 개 중 큰 동그라미 안에는 다이오드 기호가 새겨져 있다. 그리고 작은 동그라미 두 개 위치에는 구멍이 뚫려 있다. 저 구멍으로 다이오드 다리를 빼라는 의도 같다. 아니어도 상관없다. 나는 그렇게 했으니까. 그런데 아무래도 그 의도가 맞는것 같은게 다이오드 다리 철사 굵기랑 저 구멍 직경이랑 딱 맞는다.

다이오드를 납땜하고 나면 스위치 한 쪽에 다이오드가 자리잡고 있다. 위치상 키캡의 움직임을 방해하지 않는다. 확실히 다이오드 넣으라고 뚫어 놓은 구멍이 맞는것 같다.

스위치 다리는 두 개니까, 출력 신호를 받을 스위치 다리에 다이오드를 정방향으로 연결한다. 나는 헷갈리기 싫어서 그냥 스위치에 새겨진 다이오드 기호 방향으로 다이오드를 꼽고 다리를 연결했다. 다이오드 한쪽 다리는 스위치 다리에 납땜했다. 그래서 컨트롤러에서 나오는 출력 신호는 스위치 다리와 납땜하지 않은 다이오드 다리에 연결할 것이고, 컨트롤러로 들어갈 입력 신호는 남아있는 스위치 다리에 연결할 것이다. 위 그림처럼 스위치 한 개에 다이오드 한 개를 꼽고 한 쪽 다리에 납땜하는 작업을 82번하면 된다...

이 글을 다 쓰고나서 생각이 났다. 저 구멍 LED 넣으라고 만든것 같다. 그럼 정확하게 밭광 다이오드 기호를 새겨 넣든가.. 아무튼 난 잘 활용했으니 됐다.

스위치 끼우기

스위치는 보강판 구멍에 하나씩 꼽는다. 이 때 정방향으로 꼽을지 역방향으로 꼽을지 결정해야 한다. 나는 정방향으로 꼽았다. 정방향은 사용자가 봤을 때 스위치에 새겨진 체리 로고가 제대로 읽히게 꼽는 것이다. 다이오드가 체리 로고 아래에 있으므로 정방향으로 꼽으면 다이오드가 아래쪽으로 쭉 정렬된 모습으로 스위치가 보강판에 꼽힌다.

정방향으로 꼽으면 이렇게 된다

이렇게 보이는게 정방향이다. 역방향은 당연히 반대겠지. 내가 알기로는 정방향이나 역방향이나 키감에는 차이가 없고 LED를 달았을 때나 차이가 난다고 한다. 앞에서 내가 다이오드를 꼽은 자리가 LED 넣는 자리인것 같다고 했다. 정방향으로 꼽으면 LED가 스위치 아래 (사용자 방향)에 있다. 그래서 키보드 키 밑에 LED 불빛이 새어나와 사용자의 눈을 직접 공격할 수도 있다. (눈뽕!) 역방향으로 스위치를 꼽으면 LED 불빚이 스위치에 가려서 사용자의 눈으로 직접 닿지 않는다. 이래서 기성품들은 보통 역방향 스위치라고 하는 글을 어디서 봤다. 나는 키보드에 LED 번쩍 거리는 것을 개인적으로 별로 좋아하지 않는다. 그래서 애초에 LED 사용을 전혀 고려하지 않아서 이 정방향 역방향 차이에 대해 관심이 별로 없다. 그냥 다 정방향으로 꼽으면 되니까. 궁금한 분들은 알아서 찾아 보시길 바란다.

사실 체리 스위치는 정사각형에 키캡이 꼽히는 십자 모양 핀이 가운데 있기 때문에 아무렇게나 꼽아도 될것 같다. 그러나 이건 막연히 겉에서 보이는 것만 보고 판단한 것이니, 확실한 것은 데이터시트를 보고 수치를 확인해야 한다. 다만 귀찮으니 하지 않고 그냥 정방향으로 잘 꼽아 놓았다. 이러면 문제될것 없으니까.

글루건

스위치를 다 꼽고 혹시 고정이 잘 안될까봐 글루건으로 하나씩 다 고정했다. 글루건으로 쭉쭉 고정하고 났더니 사진처럼 지저분하게 글루건 찌꺼기들이 실처럼 묻어서 일일이 핀셋으로 다 제거했다..

배선과 납땜

배선이야 말로 반복 노가다 끝판왕이다. 배선 작업에 10시간이 넘게 걸렸다. 이거 하면서 느낀 것이 있다면 두 번 할 짓은 못된다는 것과 앞으로 키보드를 또 만든다면 무조건 PCB를 만들어야 겠다는 것이다. 이렇게 오래 걸릴 줄은 몰랐다.

배선 작업을 하기 전에 계획을 세워야 한다. 어떤 키를 입력과 출력에 연결할지 미리 정해 놔야 한다는 것이다.

미리 정해 놓은 매트릭스

위와 같이 매트릭스를 미리 정해 놨다. 6x14 짜리 매트릭스다. 컨트롤러에 GPIO핀 6개를 row에 연결하고 이 6개를 출력으로 설정한다. 그리고 GPIO 핀 14개를 col에 연결하고 이것을 입력으로 설정한다. 펌웨어는 출력핀 6개를 순서대로 한 개씩 출력으로 설정하고 입력핀 14개 입력을 확인한다. 입력에 1이 들어오면 키가 눌린것이다. 이 작업을 계속 반복한다. 자세한 내용은 펌웨어 강좌에서 설명할 것이다. 위 그림은 키보드를 위에서 본 모양을 기준으로 그린 것이므로 실제 배선 작업을 할 때는 위 그림이 거울 반사된 모양을 머릿속에 그리고 작업해야 한다.

그래서 일단 배선을 완료하면 이렇게 된다.

배선 완료한 사진

키보드 스위치에 납땜한 전선과 컨트롤러 GPIO 핀을 연결하면 된다. 바로 연결해도 되지만, 나는 혹시나 나중에 분리해서 뭔가 수리할 일이 있을까봐 핀헤더와 소켓으로 끝을 작업해서 끼우는 식으로 작업했다.

컨트롤러쪽에 소켓을 연결 스위치쪽에는 핀헤더

이러면 나중에 컨트롤러 보드를 분리할 일이 있을 때 소켓과 핀헤더만 뽑으면 된다. 실제로 최초 키보드 조립 완성하고 몇 가지 문제가 있어서 고칠 때 유용하게 써먹었다. 나의 선견지명이란!

하드웨어 완성

전선과 컨트롤러 보드를 연결한다. 어차피 키보드 케이스 안에 다 들어가는 것이라 전선을 길게 연결하지 않아도 된다. 그래도 작업을 조금 수월하게 하려고 일부러 전선을 좀 길게 뺏다. 헷갈리지 않으려고 전선마다 포트 번호 태그도 붙여 놨다. 혹시 나중에 키보드를 다시 열어 기능 업그레이드를 할 일이 생길지 몰라서 태그도 그대로 붙인채 그냥 납땜했다.

이상태에서 최종 점검을 한다. 컨트롤러 보드에 USB 연결을 하고 타이핑을 해 본다. 최대한 이 상태에서 할 수 있는 테스트를 다 해 본다. 연결한 모든 키 스위치를 하나씩 다 눌러보고 동시 입력도 테스트한다. 키맵 변경도 해 보고, Fn 키랑 조합해서 키맵 레이어도 확인한다. 펌웨어 다운로드도 확인한다. 다 확인했으면 이제 마지막 순서만 남았다.

마지막 작업을 진행하기 전에 해도되고 안해도 그만인 작업을 하나 더 한다. UART 연결 핀에 전선을 미리 빼 놓는 작업이다. 혹시라도 나중에 다 조립해 놓고 디버그 할 일이 생길지도 모르니 미리 선을 빼 놓는 것이다. 아예 외부에 소켓 형태로 노출되게 하는 방법도 생각해 봤으나 케이스 디자인을 더이상 어떻게 할 수 없어서 그냥 핀만 빼서 내부에 붙여 놓기로 결정했다.

이제 컨트롤러 보드를 케이스에 고정해야 한다. 아래판에 뚫어 놓은 구멍에 나사를 꼽아서 고정하면 된다. 컨트롤러 보드에 핀헤더를 납땜해 놨는데, 핀헤더 때문에 컨트롤러 보드가 높아져서 9mm 안에 넣지 못한다. 그래서 컨트롤러 보드에서 핀헤더 다리를 모두 잘라낸다.

아까 UART 핀을 미리 빼 놓은 이유가 이렇게 다리를 다 잘라 버리기 때문이다. 나중에 UART 연결할 일 생길 때 다리가 없으면 난감하니까. 납작해진 컨트롤러 보드를 아래판에 위치하고 볼트, 너트를 조여서 고정한다.

이제 다 했다. 아크릴 케이스 다섯 장을 포개고 볼트, 너트 조여서 하나로 합친다.

완성

이 글의 진짜 목적은 펌웨어 강좌

글이 너무 길다. 한 세 편 정도로 나눠서 올릴 분량인데 한 편으로 길게 올린 이유는 이번편은 프롤로그기 때문이다. 게다가 이런 글은 KLDP보단 키보드 매니아에 더 어울릴 글이다. 그러나 이 글을 KLDP에 올린 이유는 내가 키보드 매니아에 회원 가입을 하지 않아서고 이 글은 하드웨어 강좌가 아니기 때문이다. 이 글의 목적은 펌웨어 강좌다. 그래서 하드웨어 제작기는 그냥 한 편으로 몰아서 쓰고 프롤로그로 삼았다. (커스텀 키보드 자작 관심 있는 분들은 볼테니..)

다음 편부터 펌웨어 강좌를 시작한다.

뻘소리

그러고 보니, 나는 지난 연말부터 한글 세벌식 자판 배열을 혼자 만들었고 그걸 쓰려고 리눅스와 윈도우 입력기를 만들었다. (리눅스 입력기는 수정). 그리고 그걸 내가 만든 키보드로 타이핑하고 있다. 내가 무슨 입력기와 자판 입력 시스템 전체에 집착이나 신념, 의지 같은게 있는 것도 아닌데 반년 가까이 자판 입력 관련 프로젝트만 혼자서 계속 하고 있다. 이 글 다 쓰고 나면 이제 다른거 해야지.

댓글

세벌의 이미지

안 쉬운데요? 저에게는 :)

저는 영어 QWERTY, 한글 두벌식 찍힌 아주 아주 평범한 키보드에, 한글 세벌식, 영어 Dvorak으로 설정만 바꾸어서 쓰렵니다.

나빌레라 님은 좋겠다. 이렇게 어려운 걸 참 쉽죠? 라고 하시니 :p

나빌레라의 이미지

흠... 저에 대한 조롱인가요?

전 그저 세벌님이 다소 지나친 감이 있는 분인가보다 하고 말았는데, 기본적으로 예의나 매너가 부족하시군요. 유머 감각이 없거나요.
상대방을 기분 나쁘게 만드는 재주가 있으십니다. 아니면 일부러 그러시는 것이겠지요. 같은 표현도 상대방 기분 상하지 않게 하는 수 많은 방법이 있다는걸 아실 텐데요. (모르시나요?)
님프(nimf) 개발자님께서 세벌님께 왜 그런 감정을 가졌는지 알것 같군요.

그래서 저도 세벌님을 기분 나쁘게 하렵니다. 현시간부로 저는 세벌님을 트롤로 간주하겠습니다.

이 댓글이 세벌님에 대한 저의 마지막 댓글입니다.
아시죠? DNFTT

더불어 웬만하면 그냥 제 글에 답글 달지 말아 주세요. 이건 부탁입니다.
상호간에 기분 나쁜일 만들지 않았으면 좋겠습니다.

이렇게 부탁까지 했는데도 계속 제 글에 답글 달면,
최소한 제 블로그에 한해서라도 (블로그는 개인 공간이니) 운영진 허락하신다면 세벌님의 댓글은 무조건 삭제하도록 하겠습니다.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

Hodong Kim@Google의 이미지

와... 열정이 대단하십니다

나빌레라의 이미지

과찬이십니다. :)

열정이라기보단..
그냥 시간이 많아서.. 남는 시간에 뭐라도 하려다보니 이러고 있습니다..

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

폐인교주의 이미지

제게는 정말 가뭄에 단비같은 내용입니다... ㅠㅠ

커스텀 키보드 취미로 하면서
CAD 와 3DCAD, kiCAD 까지는 자습으로 어케어케 했는데,

펌웨어는 정말 감이 없더라구요.

더구나 제가 소프트웨어 개발자라 접근이 쉬울거라 생각했는데,
입력스캔 개념부터 일반적인 프로그래밍에서 정반대의 개념으로 동작하는지라...
멘붕이 얼마나 왔던지 -_-;;

차근차근 읽으며 시작하겠습니다.!!!

나빌레라의 이미지

이곳에 올린 글만 봐서는 안됩니다. 꼭 소스 코드와 함께 읽어 주세요. 그래야 이해할 수 있습니다.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

sephiron의 이미지

혹시 Ctrl키를 손의 어느 부위로 누르시는 지 알수 있을까요?
저는 Capslock키를 Ctrl키로 바꾸고 왼손 새끼손가락으로 누르던지, 아니면 원래 왼쪽 Ctrl키를 손바닥과 손가락이 연결되는 관절부분(손가락 뿌리??)로 누르는 편입니다. 한데 이렇게 하면 왼손 새끼손가락이 아프던가 손바닥으로 누르지 못하는 단축키(Ctrl+z)가 있던가 하는 불편이 있습니다.
그래서 선생님처럼 왼쪽 Ctrl이 쉬프트키 만큼 큰 커스텀 키보드를 만들어 볼까 하는데요, 선생님께서도 비슷한 고민을 하시지는 않았나 궁금합니다.

나빌레라의 이미지

그냥 왼손 새끼 손가락으로 누릅니다...

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

고수님 이시군요 ㅎㅎ 의 이미지

궁금한게 있습니다. 혹시 키보드 설계를 의뢰하는곳도 있나요?
금융쪽에 종사하고 있습니다. 혹시 키보드 설계가 가능한지 해서요. 의뢰할수 있는 곳이 있으면 좀 부탁드립니다. (글쓴 분은 너무 하이...엔드 종사자셔서 ㅎㅎ )

나빌레라의 이미지

글쎄요. 키보드매니아 사이트에 가면 있지 않을까요?

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

굉장하십니다의 이미지

세벌식에 관심이 생겨 검색하다가, 3-18 na 자판에 대해 쓰신 글을 흥미롭게 읽은 기억이 있습니다.
요즘은 키보드 배치 자체를 바꾸고 싶은 생각이 들어 검색하다가, 또 마주치게 되네요.
저는 막연히 몽상만 하고 있는데, 선생님께서는 이렇게 실행으로 옮기시고 성공해내시니ㅡ
굉장하시다는 생각이 듭니다~!!! 실행력과 능력이 부럽고요~!!
또, 남들이 참고할 수 있도록 상세한 글로 설명 해주셔서 감사합니다~
좀더 여유시간이 많을 때, 선생님 쓰신 글 참고하며 저도 저만의 키보드를 만들어보고 싶네요~!
3-18 na 글에는 눈팅만 했었는데, 이번에는 넘넘 대단하시다는 생각이 들어 댓글 남깁니다~
앞으로도 좋은 글 많이 써주시길

나빌레라의 이미지

감사합니다.

관심 가지신 김에 3-18Na 자판도 써 보시고, (윈도우라면 나빌입력기를 쓰시면 됩니다. https://github.com/navilera/NavilIME ) 키보드 만드실 때는 고수 펌웨어( https://github.com/navilera/Gosu )도 쓰고 개선 부탁 드려요.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

Besquis의 이미지

제가 찾던 키보드 레이아웃과 가장 비슷하네요.

노트북 키보드도 보여주신 최종 레이아웃에서 Delete 키와 오른쪽 방향키 사이에 Caps Lock, Scroll Lock 키를 추가한 형태로 나오면 의외로 수요가 있을 것 같은데 말이예요...

최종 레이아웃을 보니까 의외로 제품화하면 수요가 꽤나 있을 듯 한데 혹시 디자인을 요즘 나오는 일반적인 중저가형 키보드만큼 개선시켜서 제품화 할 생각은 없으신가요?

세벌의 이미지

kldp가 말 꺼낸 사람이 시작하는 동네라서...

나빌레라 님이 많이 고민해서 만든 고급 디자인을 중저가형 키보드만큼 개선하라고요?
Besquis 님의 말씀이 모순인 듯 하네요.

bisquis의 이미지

제가 스위치만 꽂혀있는 사진만 봐서 상하좌우 간격이 넓을 중 알았는데 내려서 보니 그게 아니었네요...

제품화 할 때 가격이 전반적으로 비싼 듯 한 기계식 말고 좀 더 저렴한 멤브레인, 펜타그래프 버전도 있으면 좀 더 많이 사지 않을까 하네요.

나빌레라의 이미지

비싸야 팔리죠.

레이아웃에 특허가 있는 것도 아니니 제품으로 만들고 싶으면 누군가 만들겠죠.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

Firky의 이미지

저도 비슷한 자작 작업을 저보다 약간 빨리 시작을 하셨었네요ㅎㅎㅎ
조금만 일찍 이 글을 보았더라면 삽질을 좀 덜할 수 있었을 것 같은데...ㅠㅠ
이 작업을 저도 한번 해보았기에 많은 공감이 됩니다ㅎㅎㅎ

저는 보강판을 스테인리스 1.5T 재료로 업체 가공 맡겨서 진행하고,
PCB판쪽은 플라스틱판에 구멍을 뚫고 동테이프로 배선을 하였습니다ㅎㅎㅎ
스테빌라이저를 PCB에만 고정해야 하는줄 알고 꼭 필요한 줄 알았거든요
컨트롤러는 Atmel칩을 쓴 Teensy라는 개발용 보드에 QMK firmware를 수정하여 올렸습니다...
이 작업 마무리하는데.. 거의 1년반 정도 걸린 것 같습니다...ㅠ_ㅠ

ㅇㅇ의 이미지

키보드 PCB를 그리다가 다이오드의 용도가 궁금하여 방문하게 되었습니다
무한 동시 입력에 대한 알기 쉬운 설명 잘 보고 갑니다
LED 자리에 다이오드가 꽂혀있는 것이 유니크하네요

백호의 이미지

안녕하세요. 저는 이번 연도 컴퓨터 공학과에 입학한 대학생입니다. 거의 하나도 모르는 내용이지만 천천히 읽어보니 조금씩은 이해가 되는 거 같네요. 1학년은 할 일이 별로 없는 거 같기도 하니 한번 오픈소스로 풀려있는 분리형 키보드 3D모델을 출력해서 stm32보드 두개로 분리형에 트랙볼까지 적용된 펌웨어 만들기 도전해보겠습니다! 혹시 막히면 코드들고 질문하러 와도 괜찮을까요? 좋은 글 작성해 주셔서 감사합니다.

나빌레라의 이미지

1학년은 연애하고 술마시고 노세요.
그래도 되는 나이입니다.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

백호의 이미지

충분히 놀고 있기도 하고 뭔가를 만드는 게 취미생활이어서요ㅎㅎ 물론 원래는 간단한 것만 만들었지만 키보드는 찾아보면 볼수록 만족할 만한 것이 없어서 여기까지 왔네요

growbook91의 이미지

최근에 임베디드 개발자로 입문하게 돼서 커뮤니티에 가입하게 되었는데 대단하신 분들이 많으시네요..좋은 자극이 되었습니다..!

shaig****@Naver의 이미지

최근에 키보드에 관심이 많이 생겨서 여러가지 중저가형 모델을 사면서 배워가고있는 유저입니다. ㅎㅎ..
이번에 장난감느낌으로 LT84라는 중국 저가 키보드를 구매했는데 lcd가 참 맘에들어서 스위치교체후에 회사에서 사용 중입니다. 다름이 아니라 제가 전문지식이 부족해 알고싶은게 있는데 검색해도 나오는곳이없어서.. ㅠㅠ 혹시 노브를 돌리는 것을 마우스 휠 돌리는 걸로 인식을 시키고 싶은데 제공해주는 드라이버에서는 노브에 그런 기능을 넣는거는 지원을 안해주고 있어서... 혹시 방법이나 어떤식으로 진행해야하는지 정도 도움을 주실 수 있을까요???

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.