LAINO의 개발노트

아두이노 조이스틱으로 게임패드 만들기 본문

임베디드 , ARM, 아두이노/프로젝트

아두이노 조이스틱으로 게임패드 만들기

Laino 2017. 3. 26. 01:27



최근 아두이노를 여러가지 가지고 놀면서 여러 잉여로운것중 하나를 오늘 블로그에 소개해볼까합니다.


바로 아두이노 UNO를 이용한 조이스틱 제작입니다. 오늘은 가장 기초적인거만 다루어보도록 하겠습니다.





일단 오늘의 주인공인 2축 조이스틱입니다. 

알리익스프레스를 통해 구매하였습니다. (1년째 애용중이지만 언제 구매해도 배송속도는 적응이 안됩니다, 잊고있을때쯤이면 무언가 와 있는게 특징인...)


일단 조이스틱들이 잘 작동하는지 먼저 태스트하겠습니다.



위처럼 배선을 한뒤에 (조이스틱에 달린 스위치는 배선을 하지않았습니다.)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const int pin_X = 0;
const int pin_Y = 1;
 
void setup() {
    Serial.begin(9600);
}
 
void loop() {
    Serial.print("X :");
    Serial.print(analogRead(pin_X));
    Serial.print("\n");
 
    
    Serial.print("Y :");
    Serial.print(analogRead(pin_Y));
    Serial.print("\n\n");
 
    delay(300);
}
cs


위와같이 코드를 작성해보았습니다.


일단은 잘 작동합니다.

이제 그럼 본격적으로 조이스틱 제작을 해보겠습니다.


준비물 : 아두이노 우노 R3, 적당한 점퍼들, 작은 미니 빵판, 맘에드는 택트스위치, 이모든걸 조립해서 고정할만한거


마지막이 관건인데요 뭐 3D프린터로 인쇄해서 게임기의 형태를 갖추어도 좋을거같고,

저같은경우에는 어렸을적 가지고 놀던 로봇키트에 있던놈을 사용하기로 했습니다.



나중가면 상당히 비주얼이 골때리네요.. ㅡㅡ;


이제 아두이노 우노를 조이스틱으로 바꿀 차례입니다.

UnoJoy라는 펌웨어를 아두이노에 입혀서 작동시키게 만드는 구조로 알고있는데요,

아두이노 우노의 FTDI칩이 ATMEL 16u4인 환경에서만 태스트해보았습니다. 간혹 호환보드들 중에는 CH340을 달고 나온녀석들이 있는데 그녀석들은 잘모르겠네요.


일단 https://code.google.com/archive/p/unojoy/downloads 에 들어가셔서 

위쪽의 두개중 자신의 환경에 맞는것을 받도록 합시다.


저는 롬 플레싱은 윈도우에서 진행하였기에 윈도우용을 받았습니다.


받은파일을 열어서 Example폴더에 가보면 굉장히 많은 예제들이 있습니다. 아무래도 요 며칠은 심심하지 않을듯 싶습니다.

하지만 우리가 써야할 가장 기본적인 컨트롤러 예제는 받은 파일 루트의 UnoJoyArduinoSample 폴더 내에 있습니다.

폴더내의 ino파일을 아두이노 IDE를 켜서 업로드 하도록 합시다.


스케치 업로드가 끝났으면, 이제 아두이노에 펌웨어를 플레싱할수있도록 DFU 모드로 바꿀차례입니다.

@@DFU 모드 진입하기@@



아두이노를 컴퓨터와 연결한상태에서 빨간색으로 동그라미친 두 핀을 쇼트시켜줍니다.


받은 파일에 보면 손쉽게 DFU 드라이버부터 펌웨어를 씌웠다가 원래 우노 펌웨어로 돌렸다가 하는 BAT(배치파일)이 있는거 같은데 저는 잘 작동을 하지 않아서 수동으로 DFU드라이버 부터 펌웨어를 씌우는 작업을 했습니다.


일단 쇼트를 하면 장치관리자에 알수없는 16u4 장비가 하나 뜹니다.


먼저 http://sourceforge.net/projects/dfu-programmer/ 에 들어가서 dfu-programmer 바이너리를 받습니다.

받고나서 폴더안에 amd64에 가면 ATmega 16u4 DFU 드라이버 파일이 있습니다. 알아서 잘 설치해두도록 합시다.



다시 http://sourceforge.net/projects/libusb-win32/ 에 들어가서 파일을 받습니다. 압축을 푼 후 폴더내 bin/x86/libusb0_x86.dll 파일을 libusb0.dll로 이름을 변경하고 아까 dfu-programmer.exe가 있는 폴더내로 복사를 해줍니다.


이제 cmd를 열어줍시다. dfu-programmer은 항상 3단계의 사용으로 구성됩니다. erase-flash-reset



1
2
3
dfu-programmer atmega16u2 erase
dfu-programmer atmega16u2 flash <펌웨어 파일(경로)>.hex [--suppress-bootloader-mem]
dfu-programmer atmega16u2 reset

cs


펌웨어 파일은 아까받은 UnoJoy파일의 /ATmega8u2Code/HexFiles/ 에 있습니다. UnoJoy.hex파일을 플레싱 하시면 됩니다.
플레싱이 끝난후 USB를 뽑았다 다시 끼워줍시다. 그럼 새로운 조이스틱 장비로 인식하기 시작합니다.

간단한 태스트를 거친후 저는 프레임 조립에 들어갔습니다.



아까 맨처음에 봤던놈입니다. 이놈에 



이렇게 지지대를 씌워줍시다.



그다음 하판에 보드를 달수있도록 가이드(?)를 설치해줍시다. 구멍이 오묘하게 안맞는 대참사가 일어나서 어쩔수없이 저런 프레임을 달았네요



아까 오늘의 주인공이였던 조이스틱을 상부 판넬(상판)에 달아줍시다.



보드를 하판에 장착해줍시다. 어째 갈수록 비주얼이... 



대충 상판을 얹어봅시다. 아무래도 비주얼은 포기하고 다음 포스팅은 이놈을 3D프린터로 케이스부터 인쇄하는걸 해야할것 같습니다.



저는 주로 유로트럭을 하기때문에 변속기, 깜박이등을 위해 아까 준비했던 빵판에 택트 스위치를 적절하게 달아줍시다.



적절한(?) 점퍼들입니다 배선을 시작해보도록 하겠습니다. 배선은 아래 사진을 참고해주세요.



joy.fzz

프릿징 파일 첨부하였습니다.



중간 과정입니다.



그럭저럭 완성! 했습니다. (비주얼이 폭탄맞은듯 합니다만 태스트 해보니 잘돌아갑니다.)


실제 유로트럭을 해보니 스티어링 정밀 컨트롤이 조금 힘듭니다 ㅡㅡ; 조금 비싼 조이스틱을 사서 써야할듯



여기에 사용했던 아두이노는 다른용도로 사용하려고 하면 사용이 불가합니다. 먼저 기존 펌웨어로 돌려야 정상적으로 사용이 가능합니다.


아까 UnoJoy펌웨어가 있던 폴더를 다시 보시면 Arduino-usbserial-uno.hex 라는 파일이 있습니다. 위에 과정과 동일하게 해당파일을 플레싱 해주시면 정상적으로 아두이노를 이용가능합니다.





오늘 두서없이 처음쓰는 글이기도하고 무언가 따라하기에는 이해 안되는 부분도 있으실수도 있습니다.

댓글 남겨주시거나 podcastm1@gmail.com으로 메일 주시면 제가 아는 한도내에서는 최대한 성실히(?) 답변드리겠습니다.


다음 포스팅에서는 무슨일이 있어도 이놈 케이스를 뽑는글을 포스팅 해야 할것같습니다.


펌웨어 플레싱에 관해서는 http://courage59.blogspot.kr/2015/06/arduino-uno-dfu.html 이글을 참고하였습니다.



Comments