기분이 좋은레후

'Keyboard' 카테고리의 다른 글

키캡왓다  (0) 2021.11.22
오소리 디자인 끝  (0) 2021.10.30
오소리 타건음  (0) 2021.10.21
다음 키보드 디자인 중  (0) 2021.10.14
커스텀 키보드 오소리 제작기  (0) 2021.10.07
근황  (0) 2021.09.12

아크릴 재단 맡겨야지

'Keyboard' 카테고리의 다른 글

키캡왓다  (0) 2021.11.22
오소리 디자인 끝  (0) 2021.10.30
오소리 타건음  (0) 2021.10.21
다음 키보드 디자인 중  (0) 2021.10.14
커스텀 키보드 오소리 제작기  (0) 2021.10.07
근황  (0) 2021.09.12

 

팩토리윤활만 믿고 스위치를 고대로 꼇더니 좀 서걱거린당;

'Keyboard' 카테고리의 다른 글

키캡왓다  (0) 2021.11.22
오소리 디자인 끝  (0) 2021.10.30
오소리 타건음  (0) 2021.10.21
다음 키보드 디자인 중  (0) 2021.10.14
커스텀 키보드 오소리 제작기  (0) 2021.10.07
근황  (0) 2021.09.12

 

더보기

 

저번부터 계속 이리저리 바꿔보다가 2단 슬로프 쪽으로 가닥이 잡혀서 결국 오른쪽 아래 디자인으로 결정했다.

 

 

근데 문제는 다 해놓고 보니까 너무 기시감이 들어서 찾아보니까

저번에 기키갤 댓글에 달린 바나곤이랑 판박이엿다;;

 

 

 

 

이러려고 디자인했나 자괴감들고 괴로워...

 

 

일단 그래도 오쏘배열에 노브+OLED이 핵심이니까 계속 밀고 나가기로 했다.

 

 

 


키보드 이름을 오소리(Ortholi) 라고 지어서 흰검으로 색 넣어본거


흰검 상상속에서는 분명 멋잇엇는데 솔직히 좀 촌스러운거 같다;

 

 

 


하판은 Ortholi 타이틀을 넣었다가 잡다해 보여서 빼고

전체 두께가 너무 두꺼운거 같아서 자체 경사 들어가게 수정.

 

 

 

 

요건 골드 블랙으로 색 넣어본거

 

 

 

 

응 바나밴 짭이야

 

 

 

반투명에 일부 투명으로 들어가는 것도 나쁘지 않을거같아서 고민중

 


틴지 2.0 핀맵

요건 틴지 3.2 핀맵

 

※ 나중에 안건데 틴지 옆의 숫자는 단순 버전이 아니엇다...😫

틴지3.2는 QMK 툴박스 지원도 안될뿐더러 치비OS를 올려서 USB장치로 인식시켜야한다

인터넷을 검색해봐도 3.2로 잘 끝낫다는 글보다 때려쳣다는 글이 많아서...

결국 2.0을 따로 사기로 했다...😢

 

키 매트릭스에 12+5핀 - 1~12 / 13~17

노브에 추가 2핀 - 20, 21

인디케이터 2핀 - 22, 23

OLED 2핀 (SCL, SDA) - 18, 19

총 23핀 사용 (아두이노 프로 마이크로는 총 20핀)

'Keyboard' 카테고리의 다른 글

오소리 디자인 끝  (0) 2021.10.30
오소리 타건음  (0) 2021.10.21
다음 키보드 디자인 중  (0) 2021.10.14
커스텀 키보드 오소리 제작기  (0) 2021.10.07
근황  (0) 2021.09.12
아두이노 키보드 관련 이것저것  (0) 2021.08.17

아두이노 프로 마이크로 4*12 오쏘리니어 플랭크 배열 키보드 자작기

 

 

더보기

 

요 근래 갑자기 기계식 키보드에 꽂혀서 이것저것 만들어보고 있다. (원래 쓰던건 로지텍 MX Keys)

원래는 이전 포스팅에 적엇던 것 처럼 매크로 키패드 같은걸 만들었는데

이것저것 자료를 찾다보니 오쏘리니어 키보드에 관심이 생겨서 직접 만들어보기로 했다.

 

 

 

 

설계툴은 이전부터 계속 쓰고 있는 스케치업.

기존에 만들던 키패드 디자인을 옆으로 늘리고 최대한 컴팩트하게 설계해봤다.

스케치업 무료기간이 끝나기 직전에 다행히 도안을 완성돼서 하나아크릴에 재단을 맡겼다.

 

 

 

 

그렇게 해서 뽑은게 요것.

한 38000원 정도 들은거같다.

 

 

 

 

스위치가 고정되는 보강판은 2t + 3t를 붙이는 구조고
2t 3t 각각 구멍에 약간 차이를 줘서 스위치 옆의 이빨에 맞물리게 돼있다.

바로 밑에 들어가는 2t 타공판은 저번처럼 리벳으로 핫스왑 지원.
중앙핀 주변의 구멍들은 LED나 다이오드 삽입 구멍인데 핀이 부족해서 LED는 안넣기로 했다. 

아크릴 구조물이 스위치를 감싸는 구조물에 빈공간이 거의없게 만들었는데

요러면 키감이 단단하고 통울림이 없다고 한다.

 

 

 

 

뒤쪽 와이어링은 이런식으로 깔쌈하게 완성.

전선 피복을 쭉 벗겨내서 바느질하듯이 와이어링 해주는 방식이고

선이 교차하는 부분은 높이차를 줘서 합선안되게 했는데..

아무래도 하우징에 눌릴 수 있어서 나중에 테이프를 잘라서 끼워넣어줬다.

 

 

 

 

하판의 빈공간에 아두이노와 추가 와이어링이 수납된다.

하판의 로고는 이번 프로젝트의 이름인 오소리 (Ortholi) 마크.

 

 

 

 

스위치는 카일 박스 제이드 축과 백축 혼합.

짤깍거리는게 처음에는 기분 좋았는데 쓰다보니 너무 시끄러워서😓😓😓

나중엔 다 뜯어서 클릭 스프링을 제거해줬다.

 

 

 

 

추가 배선은 이렇게.

 

 

 

 

보드 절연 + 흡음용으로 PE폼도 한장 깔아주고

 

 

 

완성!

 

 

 

 

...은 아니고 이제 하드웨어만 끝이고 소프트웨어를 만들어줘야 한다.

 

 

 

 

처음에는 아두이노 코드로 만들려고 했지만 채터링도 있고

딜레이가 실사용이 불가능할 정도로 심했다

 

찾아보니 아두이노 칩셋 자체의 클럭은 문제가 없는데,

기본으로 제공하는 Keyboard.h 라이브러리가 오지게 비효율적으로 짜져 있는게 문제였다.

 

그걸 또 개선한 마개조 라이브러리도 있긴한데...

이건 또 이거대로 업로드가 안돼서 결국 QMK로 갈아탔다.

 

 

 

 

보통 기성품 PCB를 사용하는 경우 QMK Configurator나 VIA를 통해 키를 설정해 주지만,

요건 완전 자작 아두이노 키보드 이므로 Keyboard Firmware Builder로 만들어 준다.

 

 

 

 

요렇게 키 세팅이랑 매크로 키 설정을 해주고

회사에서 일할때나 개인작업할때 쓰는 매크로도 잔뜩 넣어놔서 생각보다 꽤 편하다.

 

 

 

 

Hex파일을 구워서 QMK툴박스로 구워주면 진짜 완성!

 

 

 

 

USB만 꽂아두면 언제든지 코드를 올릴 수 있는 아두이노와 다르게

QMK는 키 세팅을 바꾸려면 하드리셋을 시켜줘야돼서

나중에 리셋핀을 따로 만들어서 백스페이스 키에 숨겨뒀다.

 

 

 

이제 진자 끗.

 

 

 

'Keyboard' 카테고리의 다른 글

오소리 타건음  (0) 2021.10.21
다음 키보드 디자인 중  (0) 2021.10.14
커스텀 키보드 오소리 제작기  (0) 2021.10.07
근황  (0) 2021.09.12
아두이노 키보드 관련 이것저것  (0) 2021.08.17
아두이노 커스텀 키패드  (0) 2021.08.07

자작 키패드 3호기는 사실 스위치 스왑이 가능하다

대충 뒷판에서 꾹꾹 눌러주면 스위치가 쇽쇽 빠지는 구조.

 

누르는 맛이 더 좋은 카일 박스 백축(클릭)으로 올스왑

 

 

키패드를 만들다보니 주화입마에 빠져서 오쏘리니어 키보드를 설계해보고있다.

 

아두이노 프로 마이크로에서 쓸 수 있는 핀이 16개라 12*4 플랭크로 설계했다.

이름은 오쏘리니어 키보드라 오쏘리. 푸하하하하ㅏ

 

이쪽은 아마도 만들어도 거의 장식용으로 쓰지않을까

'Keyboard' 카테고리의 다른 글

오소리 타건음  (0) 2021.10.21
다음 키보드 디자인 중  (0) 2021.10.14
커스텀 키보드 오소리 제작기  (0) 2021.10.07
근황  (0) 2021.09.12
아두이노 키보드 관련 이것저것  (0) 2021.08.17
아두이노 커스텀 키패드  (0) 2021.08.07

 

만들어보면서 느낀점을 정리해보는 글

 

더보기

1. 아두이노라고 모두 같은게 아님

아예 베이스가 없는 상태에서 만져본거라 나만 실수한 걸 수도 있는데 아두이노 나노랑 프로랑 용도가 다름.

C타입 usb 달린게 나노 밖에 없어서 나노로 샀는데 이건 독립적으로 구동되는 장치에 쓰이는 아두이노였음

키보드같이 컴터에 꽂아서 USB 장치로 쓸거면 레오나르도 보드에서 갈라져 나온 프로, 비틀 이런애들을 써야함.

그리고 아두이노 프로 마이크로랑 아두이노 비틀 중에 어느걸 골라 쓸건지는 크기랑 핀 수를 보고 고르면 됨.

필요한 핀 수는 키보드 매트릭스(전자 회로 부분)를 어떻게 짤지 먼저 생각하고 선택할 것.

 

 

2. CAD같은 유료 프로그램 필요없음

Sketch Up 체험판 (30일)으로 설계했고 2D 그래픽 내보내기 기능으로 DWG 파일 뽑아서 아크릴 재단 맡겼음.

온라인 무료 캐드도 써봤는데 사용감이 끔찍해서 출력한 도면 확인용으로만 썼고

설계 요소가 좀 많아지면 온라인 뷰어는 로딩이 엄청 길어지는데 이땐 무료 도면 프로그램 받아서 보면 됨.

내가 쓴 곳은 여기 : https://en.dwgfastview.com/flash/touploadfile

 

스케치업에서 캐드용 도면 파일 뽑는 법은 네이버 검색해보면 많이 나옴

주의할건 아크릴 재단 맡길 곳에서 특정 버전의 캐드 파일을 요구하는 경우가 있으므로

내보내기 할때 옵션에서 잘 선택해서 뽑아줄 것.

난 오토 캐드 2010 버전으로 출력했음.

 

 

3. 설계시 치수는 가급적 직접 재봐야함

13.9 * 13.9mm로 스위치 홀을 설계할경우 유격이 생각보다 크다고 함

나 같은 경우 가로 13.9 세로 13.85 사이즈로 설계했고, 스위치 걸쇠 부분이 눌려 들어가면서 딱 맞는 크기였음.

(물론 그래도 비키 스타일은 스위치가 빠지면 망가질 수 있으므로 글루건으로 붙여주는게 좋음)

스위치 쪽은 유격이 있으면 만들때나 실제 사용할때나 짜증날 수 밖에 없는 부분이므로 직접 재서 만드는게 좋음.

아두이노 공간이나 usb 포트 길이, 이런 부분들도 가급적이면 상상으로 만들지 말고 실물 측정으로 만들 것.

 

 

4. 아크릴 재단 맡길때 오프셋은 업체에 미리 확인하고 맡길 것

3D 프린터로 뽑아 쓰는게 아니고 업체에 아크릴 하우징을 맡기는 경우 레이저 가공 혹은 CNC 가공을 선택하는데

레이저가공은 0.5mm정도, CNC는 0.2mm정도의 추가 절삭면이 발생할 수 있음.

오차만 놓고 보면 당연히 CNC로 맡겨야 하는거 아니야? 라고 생각할 수 있지만

CNC 특성상 절삭면이 매끄럽지 않고 모서리가 날카로워서 보통은 레이저 가공으로 하우징을 만들게 됨.

문제는 설계할 때 이 절삭 단차를 포함해서 설계해야 하는 업체가 있고, 포함하면 안되는 업체가 있음

자작 키보드 하우징쪽에서 입소문으로 유명한 하나 아크릴의 경우 이런 단차를 고려해서 설계해야하고,

아코박스같은경우 단차는 포함하지않고 설계해서 보내주면 업체에서 단차를 고려해 도면을 수정해줌.

또 업체마다 견적 가격이 다르므로 가능하면 여러 업체에 견적을 받아보는게 좋음.

 

 

5. 키보드 매트릭스 설계

거의 유일한 전자회로 부분인데 크게 저항 매트릭스 / 다이오드 매트릭스로 나늬고, 보통은 두가지를 섞어 씀.

저항식은 전압 강하를 이용해 키를 스캔해오는 방식인데 필요한 핀 수가 적은대신 동시 입력이 안되고

다이오드는 회로가 도통됏는지 안됏는지로 키를 스캔하는 방식으로 필요한 핀 수는 많지만 동시 입력이 가능함.

예를 들어 6키 키패드를 만든다면 저항식 매트릭스로 아날로그핀 + 디지털 핀 총 2개 핀으로 만들 수도 있고,

다이오드 매트릭스로 아날로그나 디지털핀 구분 없이 2핀 + 3핀 총 5개 핀으로 만들 수도 있음.

일반적인 키보드의 경우 키가 120개 정도 필요하고 동시입력도 필요하므로 위의 두가지 방법을 섞어 설계함.

 

※ 이번에 만든 키패드의 경우 동시입력이 중요해서 다이오드 매트릭스로 제작했음.

※ USB 키보드는 동시 입력 수가 6개임. 무한 동시입력은 애초부터 불가능 하니 생각없이 병렬회로 수를 늘리지 말 것.

 

 

6. 아두이노 프로 마이크로 핀 갯수

보통 아두이노 프로 마이크로 핀맵으로 검색하면 이렇게 나올텐데,
왠지는 몰라도 이 핀을 쓸 수 있는건지 쓰면 안되는건지 제대로 설명된 자료가 국내웹에는 찾기 힘든거같음.

결론만 말하자면 위에 그림에 하늘색으로 넘버링 된 핀은 모두 키보드 매트릭스에 사용 가능함.

TX RX는 PC통신에 쓰이는 핀이니 쓰지 말라는 말도 있는데 무시하고 그냥 쓰면 된다.

 

또 나중에 키보드를 만들면서 알게된거지만 위에 나온 핀 외에도 추가로 쓸 수 있는 핀이 2개가 더 있음.

바로 LED 핀. 저기에 붙은 다이오드를 인두기로 녹여 떼주면 키보드 매트릭스용 핀으로 쓸 수 있다.


7. QMK vs keyboard.h
능력이 된다면 무조건 QMK를 쓰는게 좋다.
아두이노의 부트로더나 키보드 라이브러리는 확장성을 염두에 두고 만들어서 그런지
코딩 자체에 문제가 없어도 연결 핀 수가 많아지면 채터링이나 딜레이가 발생함.

 

 

 

생각나는대로 추가해야지

'Keyboard' 카테고리의 다른 글

오소리 타건음  (0) 2021.10.21
다음 키보드 디자인 중  (0) 2021.10.14
커스텀 키보드 오소리 제작기  (0) 2021.10.07
근황  (0) 2021.09.12
아두이노 키보드 관련 이것저것  (0) 2021.08.17
아두이노 커스텀 키패드  (0) 2021.08.07

여름 휴가동안 뭘할까 하다가 아두이노를 만져보기로 했다.

첫번째 프로젝트는 제일 만만해보이는 커스텀 키패드.

커스텀 가능한 4x4 매트릭스에 ESC키, 키 팔레트를 스왑할 수 있는 Fn 키를 추가해서 디자인했다.

 

아래는 코드.

키 팔레트는 배열로 구성돼있고 팔레트 스왑용 Fn키는 토글로 작동한다.

A0~A3 핀에 순차적으로 인풋을 넣고 A4~A7을 스캔해서 키 입력을 출력한다.

아직은 테스트 전이므로 실제 작동하는지는 해봐야알듯

인풋쪽 전압이 올라가면 키가 입력되도록 코드를 짰는데,

인풋 중 하나에 전압이 가해지면 GND로 빠져나갈때까지 계속 키입력 신호가 들어가는걸로 보인다

일단 실패한 코드같아서 수정 필요.. 

 

더보기

#include <Keyboard.h>
//Key Set
const byte Pin_X[4] = {A0, A1, A2, A3};
const byte Pin_Y[4] = {A4, A5, A6, A7};
const int DT = 50;
int FN = 0;
uint8_t KeySet[2][4][4] =
{
  {
    {'1', '2', '3', '4'},
    {'q', 'w', 'e', 'r'},
    {'a', 's', 'd', 'f'},
    {'z', 'x', 'c', 'v'}
  },
  {
    {'a', 'b', 'c', 'd'},
    {'e', 'f', 'g', 'h'},
    {'i', 'j', 'k', 'l'},
    {'m', 'n', 'o', 'p'}
  }
};

void setup()
{
  Serial.begin(9600);
  Keyboard.begin();
  for (int Ix = 0 ; Ix < 4 ; Ix++ )
  {
    pinMode(Pin_X[Ix], OUTPUT);
  }
  for (int Iy = 0 ; Iy < 4 ; Iy++ )
  {
    pinMode(Pin_Y[Iy], INPUT);
  }
  pinMode(0, OUTPUT);
  pinMode(1, INPUT);
  pinMode(2, INPUT);
}

void loop()
{
  digitalWrite(0, HIGH);
  if (digitalRead(1, HIGH))  //ESC
  {
    Keyboard.press(KEY_ESC);
    delay(DT);
    Keyboard.releaseAll();
    delay(DT);
  }

  if (digitalRead(2, HIGH))  //FN
  {
    if (FN == 0) FN = 1;
    else FN = 0;
    delay(DT);
  }
  digitalWrite(0, LOW);

  for (int Kx = 0; Kx < 4; x++)  //Key Matrix
  {
    digitalWrite(Pin_X[Kx], HIGH);
    for (int Ky = 0; Ky < 4; y++)
    {
      if (digitalRead(Pin_Y[Ky]), HIGH)
      {
        Keyboard.press(KeySet[FN][Kx][Ky]);
        delay(DT);
        Keyboard.release(KeySet[FN][Kx][Ky]);
        delay(DT);
      }
      else
      {
        Keyboard.release(KeySet[FN][Kx][Ky]);
      }
    }
    digitalWrite(Pin_X[x], LOW);
  }
}

 

 

결국 새로 수정한 코드.

요건 잘된다!

 

더보기

#include <Keyboard.h>
//Key Set
const byte Pin_X[4] = {A0, A1, A2, A3};
const byte Pin_Y[4] = {4, 5, 6, 7};
const int DT = 100;
int FN = 0;
uint8_t KeySet[2][4][4] =
{
  {
    {'1', '1', '1', '1'},
    {'2', '2', '2', '2'},
    {'3', '3', '3', '3'},
    {'4', '4', '4', '4'}
  },
  {
    {'a', 'b', 'c', 'd'},
    {'e', 'f', 'g', 'h'},
    {'i', 'j', 'k', 'l'},
    {'m', 'n', 'o', 'p'}
  }
};

void setup()
{
  Serial.begin(9600);
  Keyboard.begin();
  for (int Ix = 0 ; Ix < 4 ; Ix++ )
  {
    pinMode(Pin_X[Ix], INPUT_PULLUP);
  }
  for (int Iy = 0 ; Iy < 4 ; Iy++ )
  {
    pinMode(Pin_Y[Iy], OUTPUT);
  }
  pinMode(10, OUTPUT);
  pinMode(8, INPUT_PULLUP);  //ESC
  pinMode(9, INPUT_PULLUP);  //FN
}

void loop()
{
  digitalWrite(10, LOW);
  if (digitalRead(8))  Keyboard.release(KEY_ESC);
  else
  {
    Keyboard.press(KEY_ESC);
    delay(DT);
  }
  if (digitalRead(9) == LOW)
  {
    if (FN == 1)  FN = 0;
    else  FN = 1;
    delay(DT);
  }
  digitalWrite(10, HIGH);
  
  for (int Kx = 0; Kx < 4; Kx++)  //Key Matrix
  {
    for (int Ky = 0; Ky < 4; Ky++)
    {
      digitalWrite(Pin_Y[Ky], LOW);
      if (digitalRead(Pin_X[Kx]))  Keyboard.release(KeySet[FN][Kx][Ky]);
      else
      {
        Keyboard.press(KeySet[FN][Kx][Ky]);
        delay(DT);
      }
      digitalWrite(Pin_Y[Ky], HIGH);
    }
  }
}

 

완성~🤗

'Keyboard' 카테고리의 다른 글

오소리 타건음  (0) 2021.10.21
다음 키보드 디자인 중  (0) 2021.10.14
커스텀 키보드 오소리 제작기  (0) 2021.10.07
근황  (0) 2021.09.12
아두이노 키보드 관련 이것저것  (0) 2021.08.17
아두이노 커스텀 키패드  (0) 2021.08.07

+ Recent posts