본문 바로가기
개발/아두이노와 라즈베리파이

아두이노로 키보드 만들기

by 장모 2021. 11. 27.

- 2015. 11. 23. 10:09 에 작성한 글을 이동

 

 

준비물.

 

 

 

 

 

 

 

 

 

 

 

버튼과 조이스틱을 만능 기판에 납땜한다. 이 더러움이 바로 내 실력... 중요한건 핀을 아두이노에 꼽아서 바로 사용할 수 있게 자리를 잡아주는게 중요함.  

 

 

 

 

그리고 아두이노에 꼽아준다.

 

 

 

완성!

 

 

이제 아두이노에 각각의 이벤트를 코딩해서 넣어주면 되는데, 

아두이노에서 Serial.write로 값을 쏴주면 된다. 

 

 

uint8_t buf[8] = { 

  0 

};  

Serial.write(buf, 8);  

 

저 buf에 Keycode를 보내면 되는데, 각 바이트의 용도는 아래와 같다.

 

출처 : http://www.usb.org/developers/hidpage/HID1_11.pdf 

 

 

Modifier는 shife, alt 이런걸 얘기하는 것이고 여러개를 누른 경우엔 서로 더해서 0번 바이트에 넣어주면 된다. 

2번 바이트부터 키코드를 채워 넣으면 되는데, 만약 asdf, 4개의 키를 눌렀으면 2, 3, 4, 5번에 순서대로 a, b, c, d의 키 값 0x04, 0x16, 0x07, 0x09를 채워주면 4개의 키를 누른 것이 된다. 

 

그 상태에서 a키만를 뗐다면 2,3,4번 바이트에 0x16, 0x07, 0x09를 넣어서 보내주면 된다.

 

이 키코드들은 아래 파일에서 볼 수 있다. 출처는 : www.mindrunway.ru/IgorPlHex/USBKeyScan.pdf

USBKeyScan.pdf
다운로드

 

 

이걸로 코딩을 하면 shift, a버튼과 조이스틱으로 방향키를 누르는 것에 대해 작성한 파일을 아래 첨부했다. 

keyboard.zip
다운로드

 

이 파일을 아두이노에 올려도 키보드로 동작하지 않는다. 왜냐면 아두이노의 펌웨어는 PC에서  아두이노로 인식을 하지 키보드로 되어있지 않기 때문이다.  

이를 위해서 펌웨어 업데이트를 해 줘야 한다. 이 과정에서 아두이노가 벽돌이 될 수 있다고 한다. 무시무시하다. 

 

펌웨어 업데이트를 하기 위해서는 dfu-programmer가 필요하다. mac에서는 brew를 통해 설치할 수 있고 윈도우는 잘..

(윈도우는 바이너리가 배포되고 있으니 이를 받아 사용하면 될 것..아마..)

 

이를 설치한 후에 아두이노를 PC에 연결한다. 그리고 아래 사진의 두 핀을 점퍼나 전선 등으로 연결했다 떼면 LED가 깜빡깜빡 한다. 

 

 

이 상태에서 dfu-programmer를 사용해 사로운 펌웨어를 올리면 되는데 아래 두개 파일이 필요하다. Arduino-keyboard-0.3.hex는 키보드로 변경할 때, Arduino-COMBINED-...는 원래대로 돌릴 때 사용한다.

 

Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex
다운로드
Arduino-keyboard-0.3.hex
다운로드

 

터미널로 나간 후 

 

키보드 펌웨어 업데이트

dfu-programmer atmega16u2 erase

 

dfu-programmer atmega16u2 flash Arduino-keyboard-0.3.hex 

 

dfu-programmer atmega16u2 reset

 

이렇게 하면 PC가 아두이노를 키보드로 인식한다. (안된다면 USB다시 연결)

이제 키보드이기 때문에 코딩을 해서 아두이노에 올릴 수 없다. 이를 하려면 다시 아두이노로 펌웨어 업데이트를 해야한다. 

 

아두이노 펌웨어로 업데이트 (아래 명령들을 실행하기 전에 핀 두개를 연결해 LED 깜빡깜빡 하는거 보고..)

 

dfu-programmer atmega16u2 erase

 

dfu-programmer atmega16u2 flash Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex --suppress-bootloader-mem

 

dfu-programmer atmega16u2 reset

 

 

이제 아두이노를 키보드로 만드는 것에 대한 내용은 모두 끝났다. 

 

그런데 아두이노 우노는 굉장히 번거롭지만 레오나르도는 바로 지원이 된다고 한다. 예제를 보면 Keyboard라는 것이 있다. 이를 열어보면 무척 사용하기 쉽게 되어있는데, 이게 바로 레오나르도용 샘플. 키보드로 사용하는게 목적이면 레오나르도 사는게 편할 듯 하다.

 

 

아래는 제작 과정의 실수들...

 

 

물라스틱을 사용해 케이스를 만들었는데 만들고 보니 펌웨어 업데이트를 안해서 다시 뜯어냈다. 

물라스틱 강도가 너무 단단해서...뜯어내는 과정이 너무 힘들었다.

물라스틱 : http://artrobot.co.kr/front/php/product.php?product_no=520&main_cate_no=&display_group=

 

 

뜯어낸 물라스틱을 다시 녹여 여유롭게 모양을 잡았는데 굳고나니 작아서 안들어간다.

 

 

 

또 하기 귀찮아서 그냥 종이상자 잘라 사용했다.

이게 최종.

 

 

 

 

댓글