아두이노이용 키보드 장치 제작에 고수님들의 의견을 구합니다.

안녕하세요.
이전 댓글 7
Ley 2019-01-06 21:37
일단 http://www.kbdmania.net/xe/index.php?&mid=tipandtech&search_target=title_content&search_keyword=%EB%A7%A4%ED%8A%B8%EB%A6%AD%EC%8A%A4&document_srl=8794285 이 글을 보면 아시겠지만, 작은 아두이노 보드 하나로도 미니 키보드 정도는 구성이 가능합니다. 찾아보면 좀 비싸긴 해도 아두이노 레오나르도 호환 중에도 30핀정도 되는 물건이 있으니, 그걸 쓰시면 키스캔은 하나로 가능할거라 봅니다. 제가 프로그래밍을 잘 아는 것이 아니라 wire 통신은 정확히 모르겠으나, 이 방식으로 일단 키스캔에 보드 두개를 쓰는 현상은 없어지겠죠. 그리고 제 생각입니다만은, 어차피 매트릭스 키 스캔은 전압차로 감지하는 것이니까, 링크 글 기준으로 키보드 와이어링 해서 아두이노에 납땜해주는 부분에 철사를 더 붙여서 모든 보드가 키스캔을 하면 되지 않을까~싶습니다.(모든 아두이노 보드를 병렬로 연결) 이건 되는지 여부를 저도 실험을 해 봐야 알겠지만, 그냥 키 스캔을 모두가 하게 하면 딜레이를 걱정할 필요는 없지 싶은데요.
탈퇴자 2019-01-07 12:04
- 아두이노는 하나만 쓰고 그 아두이노에 여러개의 USB칩셋"만" 추가로 붙여서 각각 따로 USB키보드 노릇을 하게 하는 게 제일 합리적으로 생각이 되는데 아두이노로 그게 가능할지 모르겠네요. 아두이노 문외한이라.. 대충 보기에는 아두이노만 갖고는 어려워 보입니다. 말씀하신 하드웨어 장비가 아마 이런 구조겠죠. 아두이노를 쓴다는게 아니라, 메인 컨트롤러1개 + 여러 개의 USB디바이스 칩셋이라는 구조 말이죠.  - 헌데, 매트릭스를 동시에 사용하는 건 가능해 보입니다. 아두이노 네개가 동시에 켜져있다는 가정하에, 전압을 인가하는 놈은 그중에 하나만 하고 나머지 셋은 읽기만 하면 된다는 얘기죠. 그럼 현재 읽는 라인이 어딘지 어떻게 아느냐? 그 부분의 출력을 다른 아두이노의 입력으로 넣으면 되겠죠. 즉, 매트릭스를 지정하는 신호와 해당 매트릭스의 키 입력 상태를 모조리 인풋으로 받으면 된다는 겁니다. 이를 응용하면 아두이노 입력 단자 부족 문제도 해결할 수 있겠죠. 현재 쓰시는 방식과 비슷하나, 통신을 키 데이터가 아니라 매트릭스 선택에 대해서 한다는게 다른 점입니다. 데이터의 추가 가공이 필요없으니 지금보단 훨씬 빠르겠죠. 이쪽도 동기화 문제가 발생할 확률이 높지만 조금만 추가처리를 해주면 어렵잖게 해결할 수 있을 겁니다. 다 해놓고 나면 결국 마스터-슬레이브방식 버스 신호처리 또는 패러렐 통신쪽과 아주 비슷해지겠네요.  - 또는, 현재 통신부분 구현을 어떻게 하셨는지 모르겠습니다만 스캔 상황을 계속 공유하지 말고 상태가 변한 것만 전송한다면 최적화가 가능할지도.. 아두이노는 구식 시리얼통신도 가능한걸로 알고 있는데 이를 통해 입력이 변한 키에 대한 정보만 1대3으로 즉각 브로드캐스팅한다면 쉽게 해결이 가능할 수도 있겠습니다. 시리얼통신이 느리다지만 저정도 정보는 문제없을것 같군요.  - 단자부족으로 아두이노 하나가 풀 매트릭스 지원을 못하는건 인코딩(디멀티플렉싱)으로 해결할 수 있습니다. 현 매트릭스 방식은 아마도 출력 하나가 매트릭스 한줄을 담당하는 것일텐데, 예를 들어, 인코딩을 동원하면 출력단자 4개로도 16개(2의 4승)의 매트릭스 줄을 제어할 수 있게 됩니다. 물론 단자가 더 많은 하드웨어를 쓸 수 있다면 그냥 쓰는게 편하기야 하겠죠.  - 추가2에 적어주신 키보드는 제가 확인해보니 그냥 단순 스위칭입니다. 동시 사용이 안됩니다. 본문 내용상 스위칭이 아닌 동시사용을 원하시는 게 확실해보이니 고려하실 이유가 없어 보입니다. 말하자면 그냥 KVM기능을 (키보드 부분에 한해) 내장한 키보드입니다. 단순 스위칭이었으면 USB셀렉터만 있어도 바로 끝나는 얘기.  - 그냥 속도가 대폭 빠른 컨트롤러를 써버리는 것도 방법입니다. (...) 비효율적 로직을 클럭파워로 때우는 것도 분명 고려해볼만한 방법이죠.  - 현재 버스통신은 어떤식으로 하시나요? 아두이노 병렬연결에 대한 연구와 예제는 수없이 많으므로 그중에 최적화된 통신기법을 쓰고 있는 건지도 따로 확인해보셔야 합니다.  - 만약 취미생활 목적이 아니고, 사용처가 게임이나 바이오스 제어처럼 반드시 하드웨어 방식이어야 하는 쪽도 아니라면, 그냥 아두이노 없이 소프트웨어적으로 해결하시는게 가장 편할 겁니다. 네트워크로 키 입력 정보만 공유하면 돼서 아주 간단하고 레이턴시도 적습니다. 
아가페 2019-01-07 17:39
안녕하세요. 제가 이해한게 맞다면... KVM 위치랑 같은걸 구현 하시려고 하시는 것 같은데요...
리수 2019-01-07 21:36
좋은답변들을 많이 달아주셨네요. 제가 굳이 이런걸 구입하지않고 직접 구현하려고한 이유는 연결 딜레이 때문이었습니다. 위에 제가 써놓은 듀얼박스? 라는 18만원짜리 장치는 문의결과, 연결on/off 시에 약간의 끊김이 여전히 존재한다고합니다. usb 키보드나 마우스를 끼거나 뺄때 약간의 렉과 딜레이가 있는것처럼요. 그런 딜레이가 아예 없도록 하려면, 연결은 여전히 되어있는상태에서 눌러도 신호만 안 가도록 구현해야하고, 아두이노 4개 각각으로 구현해야 한다고 생각해서였죠. 음... 아무튼 내일이나 모레쯤 여기서 나온 아이디어들을 구현해봐야겠군요.
마이 2019-01-09 22:55
키보드 제작이 목적인가요? 저라면 synergy 같은 소프트웨어로 해결할 것 같습니다.
flimbs 2019-01-10 11:32
일단 봤을땐 느릴이유가 전혀 없을거같은데.. 혹시 소스공개 가능하신가요?
리수 2019-01-14 19:24
이 프로젝트 완료되었습니다. wire 방식을 그대로 쓰되 각 아두이노끼리 주고받는 데이터량을 많이 줄여서 속도를 충분히 빠르게 만드는데 성공했습니다. 처음 만들었던거부터 지금까지 생각해낸 아이디어들을 전부 합치니까 어느정도 되더군요 초기 아이디어에서는 무한키 동시입력+고스트키 감지기능까지 다 되도록 구현하려고 했었는데 그걸 4키동시입력으로 제한하니까 많은부분을 없앨수 있네요. 아무튼 이제 잘 되었습니당^^ 댓글달아주신분들 감사합니다.
← 질문답변 목록으로