Picture 1.png

MoteDaemon은 WII Mote를 Mac에 연동해서 쉽게 사용할 수 있게 해 주는 프로그램이다.

지금까지 나온 유사한 종류의 프로그램들은 대부분 모트를 마우스 대용으로 사용하거나 리모컨 용도로 사용할 수 있게 해 주었지만 자신이 직접 만든 프로그램에서 자유롭게 사용하기는 쉽지 않았다.

특히 플래쉬로 프로그램을 만드는 경우 플래쉬에서 위 모트와 직접 인터페이스를 할 방법이 없었다.

위의 그림은 플래쉬로 만들어 진 샘플 프로그램으로 먼저 MoteDaemon을 실행한 다음 WII Cockpit을 실행하면 위와 같은 화면이 나오게 되고 모트의 1과 2 버튼을 동시에 누른 다음 화면의 Connect를 눌러주면 된다. 정상적으로 연결되고 나면 모트를 움직이면 그에 반응해 화면의 계기들이 움직인다.

(MoteDaemon은 맥에서만 동작하고 윈도우에서는 동일한 역할을 해 주는 프로그램으로 WiiFlash가 있다. 다만 WiiFlash는 메세지 포멧으로 XML대신 binary를 사용하고 있다.)

MoteDaemon은 모트와 인터페이스를 담당하고 그 결과를 소켓 인터페이스를 통해 XML 메세지로 바꿔 전달해 준다. 즉 MoteDaemon이 모트와의 연결관리, 블루투스를 통한 데이터 교환을 담당해 주기 때문에 어느 프로그램에서건 별도로 블루투스 프로그래밍을 배울 필요 없이 일반 네트웍 소켓 프로그래밍 하는것과 동일한 방법으로 위 모트의 입력을 전달받을 수 있다.

사용자 삽입 이미지

사용자 삽입 이미지

물론 대부분의 경우는 MoteDaemon과 Client는 같은 컴에서 실행되지만 다른 컴퓨터에서 실행되도 관계 없다.

클라이언트와 서버간 통신은 간단한 XML 프로토콜을 사용한다.


XML 메세지 포맷

MoteDaemon은 다음의 프로토콜을 사용한다. MoteDaemon에서 클라이언트로 보내는 각각의 메세지는 다음의 XML root element 타입중에 하나를 가지게 된다.

<device />

이 element는 한번에 여러개의 axis values를 가지게 된다. 메시지를 보내는 리모트의 주소를 값으로 가지는 attribute와 각 축의 값을 가지는 여러개의 axisValue 타입의 child element를 포함하게 된다. X,Y,Z 축의 가속도 센서와 조이스틱의 값은 0~255 사이의 정수이다. Pitch와 Roll 축은 +- 사인을 가지는 부동소수점으로 도(degree)로 표현된다.

<buttonChange />

리모트 컨트롤러의 버튼 이벤트를 나타낸다. state attribute는 버튼의 상태 변화를 나타낸다. (버튼이 눌리면 1, 눌린 버튼이 띠어지면 0). ID attribute는 상태가 변한 버튼이 어떤 것인지 알려준다.

<disconnect />

리모트 컨트롤러와의 association이 어떤 이유에서건 취소되었다는걸 알려준다.

<error />

서버에 에러가 발생하면 <error /> 메시지로 알려주게 된다.


XML 메세지 예제

아래 메세지 예를 보면 어떤 식으로 데이터가 전달되는지 쉽게 알 수 있을 것이다.

Listing 1: Record combined with axis data

<device address="00-19-1d-62-36-84">

<!-- Accelometer of WII remote control -->

<axisValue axis='wx' value='128' /> <!-- X-Axis -->

<axisValue axis='wy' value='124' /> <!-- Y-Axis -->

<axisValue axis='wz' value='100' /> <!-- Z-Axis -->

<axisValue axis='wp' value='0.01' /> <!-- Pitch axis -->

<axisValue axis='wr' value='-10.2' /> <!-- Roll axis -->

<!-- Nunchuk Accelometer -->

<axisValue axis='nx' value='128' /> <!-- X-Axis -->

<axisValue axis='ny' value='128' /> <!-- Y-Axis -->

<axisValue axis='nz' value='90' /> <!-- Z-Axis -->

<axisValue axis='np' value='4.4' /> <!-- Pitch axis -->

<axisValue axis='nr' value='-1.2' /> <!-- Roll axis -->

<!-- Joystick -->

<axisValue axis='jx' value='62' />

<axisValue axis='jy' value='65' />


Listing 2: Button, Disconnect and error event

<!-- Button 5 of remote control 00-19-1d-62-36-84 goes low -->

<buttonChange state='1' id='5' address='00-19-1d-62-36-84' />

<!-- Button 5 of remote control 00-19-1d-62-36-84 goes high -->

<buttonChange state='0' id='5' address='00-19-1d-62-36-84' />

<!-- Connection to remote control 00-19-1d-62-36-84 finished -->

<disconnect address='00-19-1d-62-36-84' />

<!-- error message -->

<error type='discovery' message='A Bluetooth error occured. Please remove all RVL-CNT-01 devices from Bluetooth preferences and try again.' />


Posted by nautes

댓글을 달아 주세요

제목대로 블루투스 리모콘으로 사용해 보겠다는 핑계에 아직 Wii도 없는 주제에 Wii mote를 먼저 질러버렸다. -.-;

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

Wii mote는 블루투스 HID profile을 사용하기 때문에 PC/Mac에서 그 메세지를 해석할 수 있으면 키보드, 마우스로 인식하게 된다.
인터넷을 뒤져보면 이미 message 종륭와 데이터 포맷까지 다 분석이 되어 있고 Windows/Mac OS X/Linux용 디바이스 드라이버도 몇종류 구할 수 있다.
 
Wiibrew.org

Wii mote는 알려져있다시피 컨트롤러 내에 3축 방향(X, Y, Z축)의 가속도 센서(ADXL 330), 적외선 카메라, 럼블(진동)기능을 내장하고 있다. 아래 사진의 가운데 부분의 검은색 창이 적외선 필터이다. 움직임을 좀 더 자세히 컨트롤 하기 위해 Wii에는 센서바라는것이 포함되어 있다. 센서바에는 양쪽 끝부분에 적외선 LED들이 붙어 있어서 모트에 있는 적외선 카메라가 이 적외선 LED들의 위치름 감지해서 최대 4개까지의 움직이는 물체를 추적할 수 있다.
내장되어 있는 카메라는 1024*768 모노 카메라이고 앞부분의 적외선 필터를 통해 적외선만 감지하게 되어 있는데 앞부분의 필터를 제거하면 아무거나 밝은 물체를 감지할 수도 있다.
사용자 삽입 이미지

모트의 아래 부분에는 Nunchuk이나 Classic controller를 연결할 수 있는 6핀 커넥터가 제공된다.  이 포트는 2-wire인터페이스를 사용해서 Synchronous serial통신을 한다.
사용자 삽입 이미지

모트는 AA타입 배터리를 2개 사용한다. 일반 배터리를 사용하지만 이미 충전지까지 포함되어있고 동시에 2개의 모트를 충전할 수 있는 스탠드 제품도 나와있다. 뒷면의 커버를 열어보면 배터리 홀더와 빨간색의 블루투스 싱크 버튼이 보인다.
사용자 삽입 이미지
사용자 삽입 이미지
Windows용 소프트웨어도 몇가지가 나와있는데 쉽게 구해서 쓸 수 있는 소프트웨어로 WiinRemote, GlobePie, RMX Automation 같은것이 있다. 여기서는 WiinRemote를 사용해서 설명한다.
모트를 리모콘으로 사용하려면 먼저 PC와 연결시켜 줘야 한다.
먼저 각자의 블루투스 매니져에서 모트를 pairing시켜줘야 한다. 등록이 되면 HID profile을 사용하기 때문에 디폴트로 키보드, 마우스형태의 아이콘으로 나타난다.
사용자 삽입 이미지

모트를 연결시키고 나서 WiinRemote를 실행시키면 아래의 화면이 나타난다. 각 버튼을 누르면 좌측 Controller 그림에서 그에 해당하는 버튼 색깔이 붉은색으로 변한다. 모트 자체를 각 방향으로 움직여주면 Motion Sensor에 나오는 그래프 값이 변하게 된다. 그리고 가운데 아래부분의 IR Sensor가 적외선 카메라의 입력을 처리해서 물체를 추적한 결과이다. 모트 앞에서 TV 리모콘 같은걸 가지고 아무 버튼이나 누르면서 움직여보면 현재 왼쪽 제일 위에 조그마한 점이 움직이는걸 볼 수 있다.
이 프로그램을 실행시킨 상태에서 파워포인트 같은 소프트웨어를 실행해서 버튼을 눌러보면 완벽하게 리모트컨트롤이 되는걸 볼 수 있을 것이다. 다만 디폴트로 가속도 센서(Motion sensor)로 마우스 커서를 움직이게 되어 있는데 이 센서는 예를들어 커서를 좌측 한 방향으로 계속 움직이게 하려면 모트를 계속 좌측으로 점점 더 빨리 움직이게 해 줘야 하기때문에 완전히 마우스 대신으로 사용하기에는 무리가 있다.
사용자 삽입 이미지

이 프로그램도 물론 각 키값 설정이나 그 이외 여러가지 설정을 변경해 줄 수 있다.
사용자 삽입 이미지

GlobePie나 RMX Automation같은 경우는 스크립트를 만들 수 있기 때문에 소프트웨어별로 다른식으로 동작하게 설정할 수도 있다.

아직 구입해서 사용한지 얼마 안되어서 모든 기능을 완전히 파악하지는 못했지만 이 정도만 해도 블루투스 리모콘으로 사용하는데 문제는 없으리라 본다.

물론 그동안 프리젠테이션용 리모콘 제품이 없던건 아니지만 대부분의 경우 PC에 USB동글 타입의 수신기를 꼽아줘야만 했기때문에 아무래도 불편했는데 모트를 사용하면 별도의 동글 없이 바로 사용할 수 있어서 편리하다.
더욱이 모트가 있으니 그걸 120% 활용해보기 위해 Wii를 지르자는 핑계가 될 수 있으니 일석이조 아니겠는가... :)

블로그코리아에 블UP하기

Posted by nautes

댓글을 달아 주세요

  1. 2007.08.08 13:21 신고

    클리앙에서 글 보고 왔습니다.
    좋은 정보 감사드립니다. ^^

  2. 2008.06.03 03:38

    ir pen 만들어 쓰시면 편하겠어요.
    http://www.terracode.com/IR_Pen/DIY_IR_Pen.html 만드세요 별로 1만원 안에서 만들수 있을꺼에요

이전버튼 1 이전버튼