이전에 적었던 스플릿 키보드의 프로토타입을 완성해서 올리는 포스트.

 

더보기

 

시작은 PCB 부터

 

 

매번 애용하고 있는 JLC PCB에서 주문했고 가격은 배송비 포함 6만 2천원 정도.

3D 모델 공유하면 주는 7달러 쿠폰을 써서 5만원 정도에 주문할 수 있었다.

 

배송 옵션은 S.F Express로 골랐는데 생산+받아보기까지 약 10일 정도 걸렸던 것 같다.

제작하고 픽업하는데 5일 정도 걸린거로 나왔으니 배송 자체는 꽤 빠른편이다.

 

 

 

 

the Ave 때도 그렇고 그동안 카일 소켓에 쓰루홀 다이오드만 써왔는데 

이번에는 TTC 핫스왑 소켓 + 온보드 다이오드로 설계해봤다.

 

기존 카일 소켓은 생각없이 떔질하다보면 위아래 바꿔껴서 스위치를 못끼는 경우가 있었는데

TTC 소켓은 점대칭 구조라 실장할 때 위아래를 구분할 필요가 없다는게 최대 장점이고

사진처럼 위쪽 빈 공간에 다이오드를 넣는 식으로 공간을 최대한 아낄 수 있어서 좋다.

 

 

 

 

부품들이 다 작은데다 방향까지 신경써야돼서 눈이 좀 아프긴한데

슈카월드 틀어놓고 생각없이 땜질하다보니 어느새 끝나있었다.

 

 

 

 

문제는 컨트롤러와 커넥터가 올라가는 메인 보드의 FPC 커넥터 부분.

1mm 피치라는 말에 별거 아니네 했는데 역시 플럭스 없이는 무리였다;; (플럭스 안사둠)

 

납끼리 뭉친게 핀 안쪽으로 들어가면 구제 방법이 없길래 기판 3개를 날려먹었고

4개째에서 겨우 좀 잘된 것 같아 보여서 일단 넘어갔다.

 

 

 

 

그래서 완성된게 이거.

입체적으로 갈라진 부분이 많다보니 구성이 꽤 난잡하다.

 

커넥터도 생각없이 배치하다보니... (사실 생각은 했지만 뇌용량이 딸려서;;)

매트릭스쪽과 컨트롤러 쪽의 핀배치가 반대로 된 부분도 꽤 있었다.

 

기판은 공개전에 수정할 곳이 꽤 많아서 체크리스트도 따로 작성해두고 수정 중이다.

 

 

 

아무튼 이래저래 납떔도 끝났겠다 키 + LED만 구성해둔 테스트용 펌웨어로 LED 테스트.

 

LED 부분은 Vcc / GND가 병렬로 쭉 연결되고 DIO는 일렬로 이어주는 구조이므로

중간부터 안나올 경우 끊긴 부분의 LED 방향을 체크해보거나 납땜을 다시해주면 보통 다 해결된다.

 

 

Split 연결은 Full Duplex로 구성했다.

왠지는 몰라도 QMK 문서 Split Wiring 항목에 바로 안나오던데

통신용 핀으로 TX RX 2개를 소모하는대신 저항을 따로 준비하지 않아도 된다.

 

정석은 TX-RX / RX-TX 로 교차시켜서 선을 따줘야 하지만

RP2040은 소프트 스왑을 지원해서 개떡같이 연결해도 찰떡같이 돌아간다.

config.h :
  #define SERIAL_USART_FULL_DUPLEX
  #define SERIAL_USART_TX_PIN GP0
  #define SERIAL_USART_RX_PIN GP1
  #define SERIAL_USART_PIN_SWAP

 

여기서 맨 밑의 SWAP이 Slave쪽의 TX/RX를 스왑해 준다는 뜻.

 

 

 

 

그렇게 기판만 만들어 놓고 한참 지나서 받아본 하우징.

주문은 PCB랑 같이 넣었던 것 같은데 JLC 측에서 생산전에 컨펌해주는게 있어서 꽤 걸렸다.

 

 

 

 

상판은 블랙레진, 하판은 8111X 레진으로 출력했고 총 13만원 정도가 나왔다.

믿고 쓰는 JLC답게 프린팅 수준은 추가 가공 없이 바로 조립이 가능한 정도였다.

 

 

 

 

특히 조이스틱과 터치패널 부분은 설계대로 정확하게 나와서 감탄스러울 정도.

 

 

 

근데 조립하다보니 발견한게 하판 뒷꽁무니 부분을 너무 좁게 설계해놔서 TRRS 케이블이 안들어갔다;;

커넥터 핀 부분 규격이야 당연히 다 맞았지만 손잡이 부분이 두꺼운걸 생각 못해서 생긴 문제.

 

사진은 갈아서 넓혀준 뒤 찍은건데 곡선 디자인이다보니 매끄럽게 넓힐수가 없어서 어설프게 됏다.

사실 여기서 좀 현타가 많이 오긴했는데 뭐 이런거 체크하려고 뽑은 프로토 타입이니까...

 

 

 

이렇게 조립 과정에서 발견한 문제점들은 모델파일에 바로바로 적용해줬다.

 

아래 쪽이 수정한 버전.

TRRS 케이블 손잡이 부분이 두꺼운건 1센치 가까이도 가길래 1.1cm까지 넓혀줬다.

 

 

 

그렇게 어지쩌지 끝!

 

 

...이면 좋겠지만 예상치 못한 문제가 발생했다

우선 조이스틱 XY 핀을 아무렇게나 할당해놨었는데

뒤늦게 문서를 읽어보니 아날로그 핀에 할당해야됐다.

 

 

그리고 앞에서도 불안하다 싶었던 FPC 커넥터.

 

 

눈이 안좋아서 육안으로 봐서는 분명 잘 연결된거 같은데

정작 해당 컨트롤러를 마스터로 잡고 터치패드를 연결해보면 작동이 되지를 않았다.

 

더 시도해보기엔 여분 기판도 여분 커넥터도 한개 밖에 안남은데다가

테스트할 때마다 컨트롤러를 갈아넣을 수도 없는 노릇..

 

 

결국 그래서 [minimal-fpc-i2c-pcb] 를 주문해서 I2C로 연결하기로 했다.

물론 커넥터 납땜은 내가 하기엔 무리라고 판단해서 PCBA로 주문했다.

 

 

 

 

FPC 커넥터 (PCBA) + 새로 뽑은 메인보드 기판 + 배송비까지 다 합쳐서 6만원 정도. (돈지랄)

 

조이스틱이 들어가는 왼쪽 기판은 조이스틱 XY 핀을 아날로그 핀에 다시 할당해줬고

터치패드가 들어가는 오른쪽 기판은 납땜하기 편하게 I2C 핀아웃으로 변경했다.

Cirque Trackpad - FPC - I2C 변환 PCB - I2C 핀 이런식으로 연결된다.

 

 

 

...그럼 이제 다 해치웠나 싶지만...언제나 그렇듯 지금부터가 진짜 시작인 법.

 

에러가 안날때까지 무한 수정

 

특히 이번 펌웨어는 유난히 우여곡절이 많았다.

 

일단 QMK 문서에 있는 조이스틱 코드 예제가 제대로 된게 없어서 삽질을 오지게 했다.

거기다 조이스틱 모듈도 Idle 값이 미묘하게 틀어져 있어서

그거 알아낸다고 또 3일정도 소모했던 것 같고..

 

꾸역꾸역 해결하고 나니 이번엔 뭐이리 예민한지 좀만 건들여도 계속 인풋이 발생하길래

결국 QMK 제공 조이스틱 코드는 버리고 자체 스캔 코드를 넣고 데드존을 넓게 설정하는 걸로 해결했다.

 

config.h :
  #define JS_X_PIN GP28
  #define JS_Y_PIN GP29
  #define JS_X_MID 720
  #define JS_Y_MID 755
  #define JS_DEAD 200

keymap.c :
  void matrix_scan_user(void) {
    if (!JS_R && JS_X > JS_X_MID+JS_DEAD) {
      JS_R = true;
      register_code(KC_WH_R);
    } else if (JS_R && JS_X < JS_X_MID+JS_DEAD) {

 

여기서 JS_DEAD가 입력을 무시하는 데드존 기능.

 

 

그러다 중간부터 진짜 머리 터질뻔 했던게

rules.mk에서 아날로그 드라이버만 켜주면 Slave쪽 연결이 안되는 문제였는데

 

TRRS쪽 납땜만 몇번이나 다시해줬는데도 해결안되고..

아예 컨트롤러 TX RX 핀에서 선따서 넣어줘도 안되고..

비슷한 구성의 Stront를 보니까 mcuconf.h가 있길래 이거 넣어야 하나 싶어서 만들어줫더니

 

이번엔 뭔 QMK 문서에도 안나오는 ADCx 세팅을 해줘야 한댄다.

 

QMK 디코에 물어보니 ChibiOS 쪽 세팅 값이라서 QMK에는 안나올거라는데

막상 ChibiOS 쪽 페이지 가도 안나오는건 매한가지.

 

 

QMK 디코에도 아는 사람이 없어서 포기하려던 타이밍에

I2C 관련 세팅 항목 이름이 "RP_I2C_USE_I2C1" 이길래

똑같이 "RP_ADC_USE_ADC1"로 만들어줘 봤는데 어이없게도 정답이었다;;

 

물론 이게 Slave쪽 연결 안되는걸 해결해주진 못했고;;;;;;

연결 안되는 문제는 결국 QMK 디코의 elpekeñin 님이 해결해주셨다.

keymap.c :
  void matrix_scan_user(void) {
    if (is_keyboard_master()) {
      JS_X = analogReadPin(JS_X_PIN);
      JS_Y = analogReadPin(JS_Y_PIN);

 

자체 조이스틱 스캔 코드에서 Master인지 체크하고 아날로그 핀값을 읽어오는 구문이 있는데

해당 핀에 대한 모드 지정 (아날로그 핀으로 쓸지 디지털 핀으로 쓸지) 이 선행되지 않아서

Slave측이 뻗어버리는 것 같았다. (정황상)

 

 

긴가민가 하면서 알려준 핀 지정 코드를 추가해봤는데

keymap.c :
  void pointing_device_init_user(void){
    if (is_keyboard_master()) {
      setPinInputHigh(JS_X_PIN);
      setPinInputHigh(JS_Y_PIN);

 

기가막히게도 해결돼버렸다.

 

Greatest Of All Time

 

 

 

그 밖에도 디버그 하면서 몇개 알게 된게 있는데

 

'report_joystick_t' has no member named 'axes'

이건 config.h에서 조이스틱 관련 세팅이 누락될 경우 뜨는 에러다.

config.h :
  #define JOYSTICK_BUTTON_COUNT 0
  #define JOYSTICK_AXIS_COUNT 2
  #define JOYSTICK_AXIS_RESOLUTION 10

 

22년도 쯤에 작성된 옛날 코드들을 참조해서 만들다보면

JOYSTICK_AXES~ 로 잘못 적어서 컴파일이 안될 수 있다.
(23년도 쯤에 JOYSTICK_AXIS~ 로 바뀌었음)

 

 

그리고 Cirque Trackpad는 FPC 케이블로 연결할경우

위에 적은 [minimal-fpc-i2c-pcb] 로 연결하는거면 정방향 케이블이면 된다.

 

만약 SPI로 연결하려는데 잘 모르겠으면 무조건 앞뒤 정방향인거랑 역방향인거 2개 같이 사라.

근데 사실 잘 모르겠으면 그냥 시도를 안하는게 돈아끼는 방법이긴 하다.

 

keymap.c :
  void pointing_device_init_user(void){
    pointing_device_set_cpi(800);

 

그리고 QMK 디코의 pfn0님이 알려준 코드인데

Cirque Trackpad 사용시 포인터 속도 조절은 이 코드로 하면 된다.

 

Greatest Of All Time 2

 

 

또 키 입력은 잘되고 키보드 연결 직후에만 터치패드가 잘 작동하다 잠시 후 먹통되는 경우

이건 FPC 케이블이 씹혔거나 핀위치가 틀어져서 커넥터 안에서 쇼트난거다.

코드 문제는 아니니 시간낭비 하지말고 그냥 위치를 잘 잡아주면 해결된다.

 

 

 

 

고생고생해서 ErgoRox50 프로토 타입 완성!

 

 

 

 

https://github.com/ReGenBot03/Ergorox50

 

GitHub - ReGenBot03/Ergorox50: Personal Split Keyboard Project with Thumstick & Trackpad

Personal Split Keyboard Project with Thumstick & Trackpad - GitHub - ReGenBot03/Ergorox50: Personal Split Keyboard Project with Thumstick & Trackpad

github.com

 

아직은 Schematics랑 QMK 코드만 올려뒀고

모델파일이랑 PCB는 몇가지 좀더 수정해서 공개할 예정이다.

 

끗.

 


본문에 적었던 JLC PCB 3D 프린팅 주문방법도 같이 적어본다.

 

우선 3D 프린팅은 STL 파일을 먼저 준비해줘야 한다.

인벤터 기준으로 설명하자면 

 

 

파일 - 내보내기 - CAD 형식을 선택하고 파일 형식은 STL을 선택해 준다.

 

 

그리고 아래보면 이렇게 옵션이 있을텐데

 

 

여기는 단위 mm, 해상도 높음으로 선택해주면 된다. (중요)

아마 기본 설정이 Brep일텐데 저걸로 출력하면 JLC 컨펌에서 진짜 이걸로 뽑아드려요;;? 하고 연락온다.

그 밖에 저기 곡면 편차나 법선 편차 같은 숫자들은 딱히 안맞춰줘도 되므로 스킵하자.

이제 주문하러 가면 된다.

JLC PCB 로 들어가서 상단의 3D 프린팅 항목을 눌러주고

 

 

업로드 견적하기 버튼을 눌러주면 3D 프린팅 주문 화면으로 들어가진다.

 

 

파일 업로드는 가운데의 Add 버튼을 눌러서 불러와도 되고 드래그앤 드랍으로도 가능하다.

스샷에는 설연휴 때문에 시간이 더 걸린다고 나왓는데 보통은 48시간 내에 다 끝내고 발송해준다.

 

 

맨날 질문 받는게 이 레진쪽인데 경험적인 내용이라도 조금 적자면

Black Resin은 어두운 회색 빛에 무광 재질이고 워블 (뒤틀림) 은 약간 있는 편.

유튜브에 강도 테스트한 영상도 있는데 약간 탄성도 있으면서 꽤 튼튼하다.

Imagine Black은 시꺼멓게 약간 유광으로 프린팅되고 워블이 거의 없다.

개인적으로 느낀 단점이라면 뭔가 물묻은 채로 손톱으로 긁으면 소름돋는 느낌이다;;

그래서 사포질할때 좀 기분나쁘다는게 애매하지만 약간 단점.


아무래도 손에 자주 닿는 키보드니까 습도에 강한 이매진 블랙을 선택하는게 맞을 것 같긴하지만

경험상 Black Resin도 딱히 물먹는다고 박살나거나 뒤틀리지는 않아서 좀 더 싼 Black Resin으로 뽑는걸 추천한다.

 

그리고 설명에서 나오는 내열 온도는 솔직히 뭔지 잘 모르겟다.

뒤틀린거 잡는다고 온수에 담궈도 안잡히고 인두로 지져도 안녹음.

그리고 흰색은 8111X 레진이랑 LEDO 6060으로만 뽑아봤는데

둘다 약간 누리끼리 + 미묘하게 옥색도 있는 듯한? 흰색이다.

물론 도색할거라면 전혀 문제없는 부분이긴 한데 LEDO가 더 누리끼리해서 8111X을 추천한다.

 

 

Product Description은 매번 그렇듯이 Keyboard Enclosure로 입력.

 

아마 내부적으로 수집되는 3D 모델들 분류하려고 넣은거로 추측되는디

이거 딴거 선택한다고 실제로 뭐가 바뀌는지는 잘 모르겠다;;

 

 

그 밖에 따로 건드릴건 없으니 Save To Cart.

 

 

그럼 이렇게 장바구니에 추가되고 주문을 넣을 수 있게 된다.

 

 

배송방법은 급하지 않다면 제일 싼 e-Express를 써도 되지만 개인적으로는 S.F를 선호한다.

페덱스나 DHL보다 훨씬 싼데 왠만하면 5일 안에 받아볼 수 있다.

 

 

그럼 이렇게 지불 페이지로 넘어가는게 아니고 Reviewing 상태로 넘어가게 된다.

 

 

프린팅 담당자가 일일히 수작업으로 체크하는 시스템인데

별 문제 없으면 이렇게 메일로 결제하라고 연락이 온다.

 

 

문제있을 경우 이렇게 체크해주는데 진짜 모델링이 아작난 경우나 STL 출력을 잘못한게 아니라면

왠만한 경우에는 [Online STL Repair Tool] 로 해결할 수 있다.

아예 주문 전에 Repair Tool 돌리고 올리는 방법도 있겠지만 대기열이 꽤 있는 서비스다.

가급적이면 자기 선에서 먼저 해결해보는게 좋다.

 

 

그 뒤엔 발뻗고 기다리면 된다.

스샷은 이번에 수정본으로 재주문 넣은 파츠들.

 

 

1월 20일 토요일에 주문 넣고 23일 화요일에 컨펌완료,

31일 수요일에 출력 시작해서 2월 4일 일요일에 출력 끝내고

2월 5일에 픽업해서 6일에 인천에 도착했다. (아직 집에 안옴)

 

설날전에 받아보려고 돈 더주고 UPS Express Saver로 주문 넣었는데 받아볼 수 있을지 모르겠다.

→ 설연휴 직전에 받아봄!

(근데 급하게 보내준건지 후가공 거의 없이 기름같은 것도 약간 남은채로 왓음)

 

진자 끗

'Hobby' 카테고리의 다른 글

ErgoRox50 v1  (1) 2024.03.17
ErgoRox50  (4) 2023.08.17
MidnightGlow40 v1  (2) 2023.08.07
Mini Ave v2.0 2호기  (1) 2023.07.23
Mini Ave v2.0  (1) 2023.04.17

+ Recent posts