카테고리 없음

아두이노 발로란트 컨트롤러 제작 feat. 오락실 건슈팅 게임기 제작

kytto 2024. 11. 5. 21:01
728x90
반응형

어릴때 부터 다양한 fps형식의 다양한 pc게임과 오락실에서의 다양한 게임을 좋아하는 학생으로서 다양한 게임을 접하면서 자라왔습니다 최근에는 발로란트라는 게임에 빠져 많은 시간을 게임을 하면서 보내고있는데 이러한 발로란트와 같은 fps형식의 게임을 오락실에서 하는 건슈팅 게임 형식으로하면 더 재미있게 할 수 있지 않을까? 라고 생각하였고 이러한 생각을 현실화 시키기로 하였습니다.

오락실 건슈팅 게임기

이러한 오락실에서 흔히 볼 수 있는 게임기 중 하나인 건슈팅게임기와 같이 실제 총모양의 컨트롤러를 가지고 pc게임을 할수 있는 컨트롤러를 제작하기로 하였습니다.

 

먼저 시작하기 전에 저는 이러한 컨트롤러의 기능을 먼저 정하고 제작하였습니다

 

1. 총기모양의 컨트롤러

2. 다양한 게임에서 사용가능

3. 조이스틱을 이용한 이동

4. 자이로를 이용한 시점변환

5. 총기의 격발기능 구현

6. 총기의 장전기능 구현

7. vr을 이용한 실감난 체험

 

이 6가지를 중점으로 fps컨트롤러를 제작하기로 하였습니다. 

 

먼저 이러한 컨트롤러를 제작하기 위한 설계를 프릿징 소프트웨어를 이용해서 설계를 하였습니다.

설계도

아두이노 레오나르도를 이용해서 조이스틱으로 wasd를 조작할수 있고 각각의 버튼들이 기능키로서 사용 가능하도록 그리고 mpu6050 자이로센서를 이용해서 시점변환이 가능하도록 설계하였습니다.

 

그리고 이 설계를 기반으로 제작에 필요한 준비물을 정리하였습니다

1. 비비탄총(scar-l) 이 프로젝트에는 아카데미과학의 scar-l 을 사용했습니다

아카데미 과학 scar-l

2. 버튼

푸쉬버튼 unlock

3. 아두이노 레오나르도

아두이노 레오나르도

4. 조이스틱 모듈

조이스틱 모

5. 자이로 모듈(mpu-6050)

mpu 6050

6. 스마트폰 vr

pico u vr

7. 전선

8. 저항 

etc...

이러한 준비물을 가지고 컨트롤러를 제작하였습니다.

이러한 방식으로 다양한 기능키들과 트리거 장전기능 그리고 수직 손잡이에 조이스틱을 설치하여 조이스틱을 이용해 wasd+앉기가 가능하도록 제작하였습니다 

 

이 이후 이 컨트롤러를 컴퓨터에 인식하도록 프로그래밍을 하였습니다

https://github.com/milk-001/fps_controler

 

GitHub - milk-001/fps_controler

Contribute to milk-001/fps_controler development by creating an account on GitHub.

github.com

#include <Keyboard.h>  
#include <Mouse.h>
#include <Wire.h>

const int MPU_addr=0x68;
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;

int mouse_moving = 13;
int shift = 9;
int mouse_r = 8;
int mouse_l = 5;
int r = 12;
int q = 10;
int f = 11;
const int sw=7;
int x=0;
int y=0;

void setup(){
  Wire.begin();
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x6B);
  Wire.write(0);
  Wire.endTransmission(true);
  Serial.begin(115200);
  Mouse.begin();
  Keyboard.begin();
  Serial.println("Mouse Start!!");
  pinMode(mouse_r, INPUT);
  pinMode(mouse_l, INPUT);
  pinMode(r, INPUT);
  pinMode(q, INPUT);
  pinMode(f, INPUT);
  pinMode(1, INPUT);
  pinMode(shift, INPUT);
  pinMode (sw, INPUT_PULLUP);
  pinMode(mouse_moving, INPUT);
}

void loop(){
  x=analogRead(A0);
  y=analogRead(A1);
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x3B);
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_addr,14,true);
  AcX=Wire.read()<<8|Wire.read();
  AcY=Wire.read()<<8|Wire.read();
  AcZ=Wire.read()<<8|Wire.read();
  Tmp=Wire.read()<<8|Wire.read();
  GyX=Wire.read()<<8|Wire.read();
  GyY=Wire.read()<<8|Wire.read();
  GyZ=Wire.read()<<8|Wire.read();
 
  int16_t gyroX, gyroZ;
  int Sensitivity = 300;
  gyroX = GyX / Sensitivity / 1.1 * -1;
  gyroZ = GyZ / Sensitivity * -1;

  if(digitalRead(mouse_moving) == HIGH){
    Mouse.move(gyroZ, gyroX);
  }
  if(digitalRead(mouse_l) == HIGH){
    Mouse.press(MOUSE_LEFT);
  }else{
    Mouse.release(MOUSE_LEFT);
  }

  if(digitalRead(mouse_r) == HIGH){
    Mouse.press(MOUSE_RIGHT);
  }else{
    Mouse.release(MOUSE_RIGHT);
  }
  if(digitalRead(shift) == HIGH){
    Keyboard.press(KEY_LEFT_SHIFT);
  }else{
    Keyboard.release(KEY_LEFT_SHIFT);
  }
  if(digitalRead(r) == HIGH){
    Keyboard.press('r');
  }else{
    Keyboard.release('r');
  }
  if(digitalRead(q) == HIGH){
    Keyboard.press('q');
  }else{
    Keyboard.release('q');
  }
  if(digitalRead(f) == HIGH)
    Keyboard.press('f');
  }else{
    Keyboard.release('f');
  }
  if (x==0) {
    Keyboard.press('s');
  }else{
    Keyboard.release('s');
  }
  if (x > 1000) {
    Keyboard.press('w');
  }else{
    Keyboard.release('w');
  }
  if (y==0) {
    Keyboard.press('a');
  }else{
    Keyboard.release('a');
  }
  if (y > 1000) {
    Keyboard.press('d');
  }else{
    Keyboard.release('d');
  }
  if (digitalRead(sw)==LOW) {
    Keyboard.press(' ');
  }else{
    Keyboard.release(' ');
  }
}

이렇게 아두이노레오나르도를 이용해서 자이로로 받은 신호를 마우스신호로 바꾸고 기능키와 조이스틱이 가능하도록 제작하였습니다.

 

그리고 추가적으로 vr을 사용하기 위해서 스마트폰을 이용해서 컴퓨터의 화면을 보내주는 프로그램을 찾던중 trinus vr프로그램을 알게 되었고 이 trinus vr을 이용해서 pc의 화면을 스마트폰을 출력하도록 구성하였습니다.

https://trinusvr.com/

 

TRINUS VIRTUAL REALITY - Trinus Virtual Reality

REVISIT YOUR FAVOURITE CLASSICS IN VRTrinus key feature is conversion of nonVR games. This lets you immerse in your favourite games from the last 20 years.Conversion is extremely fast and works even if your PC is not VR Ready.Original Doom (and also its mo

trinusvr.com

 

 

나중에 이 컨트롤러에서 부족한 점으로 느낀 무선기능 추가, 기능키 추가, 진동피드백 등의 여러 기능을 추가하고 다음번에 도전할예정

728x90
반응형