Physical 3-Tile-Match Puzzle [제작중]

우리나라에서 3-Tile-Match 퍼즐 게임 하면 보통 애니팡을 떠올리지만, 세계적으로 가장 유명한 작품은 Bejeweled 가 아닐까 싶다. 단순하면서도 중독성있는 게임성은 퍼즐게임 중에서도 단연 최고라고 해도 과언이 아닌데, 아두이노를 활용하여 물리적인 게임기기로 만들어 보자.

1. Tact Switch Matrix Prototype

Hexpad Board Circuit Diagram

키패드 회로는 미디 컨트롤러에 쓰이는 Hexpad Board를 참고하여 다음과 같이 구성하였는데, 그대로 DigtalRead 명령어를 사용하면 Floating 현상이 나타나 제대로 된 값을 읽을 수 없다.

digtalRead 에서 5V 는 1, Ground 는 0 으로 표시되는데 아무런 값이 들어오지 않을 경우 (즉, 아무것도 연결이 안되어있는 경우) 어떤 값이 나오는지 알 수 없기 때문에 다양한 현상 (1과, 0이 반복되거나 1만 나오는 등 예측할 수 없음) 이 나타난다. 따라서 pinMode 를 INPUT_PULLUP 으로 바꾸어서 스위치가 연결될때 Ground 가 들어오도록 만들어 평소에는 digtalRead시 1이, 스위치를 누르면 0 값이 나오도록 만들어 사용해야 한다.

*PULL UP 은 평상시에 5V 의 값을 주는 것을 말한다.

void setup(){
  Serial.begin(9600);
  pinMode(2, INPUT_PULLUP);
  pinMode(13, OUTPUT); 

}

void loop(){
  int sensorVal = digitalRead(2);
  Serial.println(sensorVal);

  // 보통 버튼을 누르면 digitalRead 시 1이 들어오나 input_pullup 
  모드에서는 Ground 와 연결하므로 0이 들어오게 된다.
  if (sensorVal == HIGH) {
    digitalWrite(13, LOW);
  } 
  else {
    digitalWrite(13, HIGH);
  }
}

다만 여기에서는 Arduino 에서 제공하는 Keypad Library 를 사용하기로 한다.

삽질의 흔적1 삽질의 흔적2

첫번째 시도한 것으로 전선끼리 닿아도 절연되는 에나멜 선을 이용했다. PULL-UP 에 대한 개념이 없는 터인지 제대로 작동하지 않았다. 2-3차 시도는 사진이 없어서 패스.

3x3 Keypad Prototype

완성된 프로토타입으로 코드는 Arduino Keypad Library 샘플 코드를 일부 수정하여 사용하였다. 회로 구성은 PCB 제작 후 Schematic 으로 공유할 예정.

#include <Keypad.h>

const byte ROWS = 3; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'}
};

byte rowPins[ROWS] = {2, 3, 4};
byte colPins[COLS] = {5, 6, 7};

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){
    Serial.begin(9600);
  }

void loop(){
  char key = keypad.getKey();

  if (key != NO_KEY){
    Serial.println(key);
  }
}

각 버튼이 클릭될 때마다 왼쪽 상단에서부터 1에서 9까지 전화기 배열대로 Serial Monitor에 표시된다.

테스트 결과

2. PCB Layout

Eagle 캐드를 이용하여 Schematic 을 작성한 후,

Schematic

Schematic 을 기반으로 Board Layout 을 그렸다. 테스트의 용의성을 위해서 우선 보드와 컨트롤러는 분리하기로 결정했다. 작성된 Layout 을 바탕으로 3D 로 대략의 크기를 모델링 한 뒤 3D 프린터로 출력하여 컨트롤러를 올려보았다.

Board

보드의 크기는 Eagle CAD 무료 버전의 최대 크기 제한인 100mm x 80mm.

진행상황에 따라 업데이트 됩니다.

comments powered by Disqus