프로젝트

나도 메이커! 메이커스 여러분들의 작품/프로젝트를 공유하는 공간입니다.

미로 탈출 게임기 만들기

2015-12-31 13:53:06

 

안녕하세요! Klant입니다. 

어느덧 한 해의 마지막이 찾아왔아요.. 이렇게 한 살을 더...ㅜㅜ

여러분은 2015년 한 해 잘 마무리하고 계신가요?

저도 2015년을 이대로 보내기가 아쉬워 2015년 마지막 프로젝트를 만들어보았습니다~

이름하여 미로 탈출 게임기!

저 같은 경우 쉬는 시간에 내기를 많이 하는 편인데, 뭔가 참신한 내기 도구가 없을까라는 생각이 들어 만들게 되었습니다.

누가 먼저 미로에서 탈출하는지 시간을 측정해서 내기를 하면 재밌겠죠?

내기는 소중하니까요^^

자 그럼 미로 탈출 게임기에 대해 소개해볼까요?

 

 

 

개요

 

이번에 만든 프로젝트는 오렌지보드를 활용해 만든 미로 탈출 게임입니다.

예전에 사보님께서 올리신 스마트폰 컨트롤러를 보고 아이디어를 얻었습니다.

작동 원리는 X축, Y축에 해당하는 서보 모터 2개가 조이 스틱의 방향에 따라서 움직이게 됩니다.

즉 조이 스틱의 방향에 맞춰 서보 모터가 기울게 되는 것이죠~

이쪽 저쪽으로 기울이면서 미로 안에 있는 조그만 공을 탈출 시키는 게임입니다.

 

3d 모델링은 스케치업을 사용하였습니다.

요즘은 3d 모델링 하는 재미도 쏠쏠하고, 뽑는 재미도 쏠쏠합니다.

내년에는 3d 모델링 및 프린팅에 관련해서 많이 공부를 해봐야겠어요!

 

 

 

 

관련 튜토리얼

 

이 프로젝트에서는 조이스틱 모듈, 서보 모터를 사용합니다. 

코코아팹 튜토리얼을 참고해 미리 사용법을 익혀주세요!

- 게임 조이스틱 활용하기

- 서보모터 제어하기

 

 

 

 

부품 목록

 

NO 부품명 수량 상세 설명
오렌지 보드 arduino UNO
2 서보 모터  2 FS5106B
3 조이스틱 모듈  1 keyes Sjoys
4 DC 커넥터 1  
5 5V 어답터 1  
6 브레드 보드 1 mini
7 점퍼 케이블 20 이상  

 

부품명 오렌지 보드 서보 모터 조이스틱 모듈
파트

 

 

 

 

하드웨어 메이킹 

 

브레드보드 레이아웃

 

 

 

 

회로도(스케메틱)

 

 

 

 

 

소프트웨어 코딩

 

#include <Servo.h>

Servo Motor_H;     // 좌우 서보모터 정의
Servo Motor_V;     // 상하 서보모터 정의

int H = 0;
int V = 0;
int posx = 90;     // 좌우 서보모터 각도 초기값
int posy = 90;     // 상하 서보모터 각도 초기값

void setup() 
{
  Serial.begin(9600);
  Motor_H.attach(9);   // 좌우 서보모터 9번핀 연결
  Motor_V.attach(10);  // 상하 서보모터 10번핀 연결
  Motor_H.write(90);   // 좌우 서보모터 최초 각도 90도
  Motor_V.write(90);   // 상하 서보모터 최초 각도 90도
  delay(2000);
}

void loop() 
{
  int x, y, sumx, sumy;
  int i, j;

  sumx = 0;
  sumy = 0;

  for(i=0;i<20;i++)       // 조이스틱의 아날로그 값을 20번 추출하여 평균값을 내어줍니다(오차 감소)
  {
    x = analogRead(A0);   // x 변수에 조이스틱 x축 값 저장
    y = analogRead(A1);   // y 변수에 조이스틱 y축 값 저장
    sumx += x;            // sumx에 x 값 누적
    sumy += y;            // sumy에 y 값 누적
  }
  x = sumx / 20;          // sumx를 20으로 나눈 값(평균값)을 x 변수에 저장
  y = sumy / 20;          // sumy를 20으로 나눈 값(평균값)을 y 변수에 저장
  
  if(x >520)              // 조이스틱이 x축 오른쪽으로 움직일 때  
  {
    if(posx<180){posx++;} // x축 각도 오른쪽으로 증가
    else if(posx == 180){}// 서보모터 각도가 180일 경우 동작 안함(최대 각도 180도)
  }
  else if(x < 500)        // 조이스틱이 x축 왼쪽으로 움직일 때
  { 
   if(posx>0){posx--;}    // x축 각도 왼쪽으로 증가
   else if(posx = 0){}    // 서보모터 각도가 0도일 경우 동작 안함(최소 각도 0도)
  }
  if(y > 500)             // 조이스틱이 y축 위쪽으로 움직일 때
  {
    if(posy<180){posy++;} // y축 각도 위쪽으로 증가
    else if(posy==180){}  // 서보모터 각도가 180일 경우 동작 안함
  }
  else if(y < 430)        // 조이스틱이 y축 아래쪽으로 움직일 때
  {
    if(posy>0){posy--;}   // y축 각도 아래쪽으로 증가
    else if(posy==0){}    // 서보모터 각도가 0일 경우 동작 안함
  }

  // 위 에서 계산된 각도 값을 각 상단, 하단 서보모터에 입력  
  Motor_H.write(posx);    
  Motor_V.write(posy);

  // 모니터링 목적의 씨리얼 출력함수
  Serial.print(x);
  Serial.print(" ");
  Serial.println(y);
  delay(50);
}

 

 

 

 

 

제작 과정

 

미로 탈출 게임기를 만드는 과정에 대해 살펴볼까요?

다른 프로젝트와 마찬가지로 3D 모델링을 진행하였습니다.

항상 느끼는거지만 3D 모델링을 하는 과정은 조금 어렵지만, 완성되고 나서의 뿌듯함은 정말 큰 거 같아요ㅎㅎ

 

미로를 올릴 판을 모델링하였습니다.

서보 모터와 결합시킬 홈도 만들어주구요!

 

 

미로를 거치시킬 기둥들도 만들어주구요!

3D 프린팅 진행 시에 아래 화면 그대로 출력하게 되면 기둥 높이 만큼 서포터가 생겨서 출력 시간이 늘어나기 때문에

따로 출력해주었습니다.

 

 

서보 모터 2개를 이어줄 파츠입니다.

 

 

가장 중요한 것! 몸체겠죠~ 조이 스틱이 나올 부분과 서보 모터를 끼울 홈 그리고 DC jack이 나올 부분을 고려해서 모델링해줍니다.

 

 

오렌지보드와 브레드 보드를 고정시킬 밑판입니다.

오렌지보드의 크기에 맞게 기둥을 올려주었어요! 

 

한 가지 색으로 모두 출력하기에는 모양이 너무 심심할 것 같아서 몸체 윗 부분에 덮어줄 파츠를 만들어 주었습니다.

 

 

자 모델링이 끝났으니 바로 출력을 해봐야겠죠? ;)

오늘도 3D 프린터는 열심히 돌아갑니다ㅎㅎ 

 

모든 파츠들이 출력되었어요~ 

자 이제 신나게 만들어볼까요? ;) GO GO~

 

 

미로를 올려 놓을 판에 기둥을 붙여줍니다.

 

 

추가로 미로를 올려주구요! 뭔가 그럴싸해졌네요 ;)

 

 

이제 몸체에 각종 부품들을 넣어줄 차례입니다.

모델링 할 때는 공간이 넉넉할 줄 알았는데 그렇게 넉넉하지는 않더라구요...

차곡 차곡 부품을 넣어줍니다. 

 

 

부품을 다 넣었으니 이제 서보 모터만 끼우면 되겠죠? 

서보 모터 2개를 서로 결합 시켜준 후 홈에 쏘옥 넣어줍니다. 

 

 

마지막으로 서보 모터에 미로판을 결합시켜주면 완성입니다! ;)

 

 

 

 

완성 모습

 

완성된 미로 탈출 게임기의 모습입니다. 

어떤가요? 게임기 느낌이 나나요?

출력된 결과물은 굉장히 깔끔하게 나와서 출력에 애를 먹지는 않았습니다. 

미로 속에 숨어있는 자그만 공이 보이시나요?

저 공을 미로에서 탈출시켜주면 됩니다~ ;)

 

 

 

 

리소스

 

프로젝트에 사용된 소스들입니다. 이미지를 클릭하여 해당 파일을 다운받으세요! ;)

 

                                        

 

 

 

 

Klant

오렌지보드, 코코아팹, 아두이노, 아두이노 미로 탈출 게임기, 서보 모터, 조이스틱, orangeboard, kocoafab, arduino, servo motor, joystick