산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노로 Wii 눙척(Nunchuk) 연동하기: 단계별 가이드

부품 및 소모품

부품 수량 비고
닌텐도 눙척 (또는 호환 복제품) 1
스파크펀 레벨 시프터 1 3.3V 눙척을 5V 아두이노와 안전 연결
아두이노 우노 1

프로젝트 소개

서문

원문은 www.xarg.org에 게시되었습니다.

Wii 눙척을 아두이노와 함께 사용하기

게임패드는 우리 손에 익숙한 입력 장치라 어떤 응용에도 적합합니다. 닌텐도의 눙척은 Wii 리모컨용 저가 확장 컨트롤러로, I2C 프로토콜을 사용해 로우 데이터에 쉽게 접근할 수 있습니다. 안정적인 구현체를 찾기 어려워 직접 라이브러리를 만들게 되었습니다.

하드웨어

아두이노로 Wii 눙척(Nunchuk) 연동하기: 단계별 가이드

눙척 구성:

권장 전압: 3.3V. 5V 아두이노와 직결 시 레벨 시프터 필수 (수명 연장).

최소 필요 부품

정품 vs 복제품

둘 다 테스트해본 결과:

눙척 커넥터 핀아웃

닌텐도 전용 커넥터(6핀) 사용. 커넥터를 자르고 선을 납땜하거나 어댑터 보드 사용.

정품 눙척 선 색상/핀맵 (커넥터 정면 기준):

핀 색상 신호
1 녹색 SDA (데이터) → 아두이노 A4
2 - NC
3 빨강 3.3V 전원
4 흰색 GND
5 - NC
6 노랑 SCL (클럭) → 아두이노 A5

복제품 눙척 선 색상/핀맵 (예시, 반드시 실물 확인!):

핀 색상 신호
1 노랑 SDA
2 검정 NC
3 녹색 3.3V
4 빨강 GND
5 - NC
6 흰색 SCL

아두이노로 Wii 눙척(Nunchuk) 연동하기: 단계별 가이드

색상만 믿고 연결하지 마세요! 커넥터를 열어 실제 배선 확인 필수.

WiiChuck 어댑터 사용 시

아두이노로 Wii 눙척(Nunchuk) 연동하기: 단계별 가이드

소프트웨어: 눙척 라이브러리

I2C(TWI) 통신, 기본 400kHz Fast Mode. 간단한 사용법:

#include 
#include "nunchuk.h"

void setup() {
  Serial.begin(9600);
  Wire.begin();
  // nunchuk_init_power(); // A1/A2 전원 핀 사용 시
  nunchuk_init();
}

void loop() {
  if (nunchuk_read()) {
    // 눙쿠 데이터 사용
    nunchuk_print(); // 시리얼로 전체 데이터 출력
  }
  delay(10);
}

라이브러리 다운로드: GitHub

주요 제공 함수

함수 설명
nunchuk_buttonZ() Z 버튼 눌림 여부 (1/0)
nunchuk_buttonC() C 버튼 눌림 여부 (1/0)
nunchuk_joystickX() / _raw() 조이스틱 X축 값 (보정됨/원시값)
nunchuk_joystickY() / _raw() 조이스틱 Y축 값 (보정됨/원시값)
nunchuk_joystick_angle() 조이스틱 각도 (라디안)
nunchuk_accelX() / _raw() 가속도계 X축 (보정됨/원시값)
nunchuk_accelY() / _raw() 가속도계 Y축 (보정됨/원시값)
nunchuk_accelZ() / _raw() 가속도계 Z축 (보정됨/원시값)
nunchuk_pitch() 피치 각도 (라디안, 중력 기준)
nunchuk_roll() 롤 각도 (라디안, 중력 기준)

주의: nunchuk_yaw() 함수는 없습니다. 가속도계는 회전 속도(요우)를 측정할 수 없고 방향성 힘만 측정하기 때문입니다. 피치는 180°까지만, 피치가 180° 넘으면 롤 각도도 부정확해집니다. 계산은 "중력만 작용한다"는 가정 하에 이루어집니다 (정지 또는 등속 운동 시 유효).

보정 (Calibration)

라이브러리 상단의 상수들로 영점(중립값) 설정 가능. 본인의 눙척을 중립 상태로 들고 원시값 읽어 상수 조정하세요.

I2C 프로토콜 상세 (참고용)

라이브러리만 쓰면 몰라도 되지만, 프로토콜 이해에 도움됩니다.

1. 눙척 초기화 (암호화 기본)

START, 0x40, 0x00, STOP

이후 읽는 모든 바이트는 (x ^ 0x17) + 0x17로 복호화 필요.

2. 눙척 초기화 (암호화 비활성화) - 권장


START, 0xF0, 0x55, STOP
START, 0xFB, 0x00, STOP

복호화 불필요, 복제품과도 호환.

3. 장치 ID 읽기 (확장 레지스터 0xFA)


START, 0xFA, STOP
READ 6 byte

응답: 눙척=0xA4200000, 클래식 컨트롤러=0xA4200101, 밸런스 보드=0xA4200402 등.

4. 측정 데이터 읽기 (주소 0x00, 6바이트)


START, 0x00, STOP
READ 6 byte

데이터 구조:

바이트 내용
1 조이스틱 X축 [7:0]
2 조이스틱 Y축 [7:0]
3 가속도계 X축 [9:2] (상위 8비트)
4 가속도계 Y축 [9:2]
5 가속도계 Z축 [9:2]
6 Az[1:0] Ay[1:0] Ax[1:0] ¬Bc ¬Bz (하위 2비트씩 + 버튼 반전값)

버튼 값은 반전됨 (눌림=0). 가속도계 하위 2비트는 6번 바이트에 분산 저장. 라이브러리에서 10비트 값으로 조합. 하위 비트 버리면 정보 손실 → 칼만/상보 필터로 노이즈 처리 권장.

5. 보정 데이터 읽기 (주소 0x20, 16바이트)

0G/1G 기준값, 조이스틱 최대/최소/중심값, 체크섬 포함. 현재 라이브러리에서 미사용.

코드 예제

#include 
#include "nunchuk.h"

void setup() {
  Serial.begin(9600);
  Wire.begin();
  // nunchuk_init_power(); // A1/A2 전원 사용 시
  nunchuk_init();
}

void loop() {
  if (nunchuk_read()) {
    nunchuk_print(); // 시리얼 플로터용 시각화 데이터 출력
  }
  delay(10);
}

함께 제공되는 Processing 스케치 실행하면 화면의 원뿔을 눙척으로 균형 잡기 가능.

아두이노로 Wii 눙척(Nunchuk) 연동하기: 단계별 가이드

커스텀 파트 및 인클로저

Fritzing 파트 파일: GitHub

아두이노로 Wii 눙척(Nunchuk) 연동하기: 단계별 가이드

제조공정

  1. LIRC 없이 라즈베리 파이에서 IR 리모컨 명령 캡처하기: 파이썬 UART 방식
  2. 아두이노 메가에서 푸시 버튼으로 PWM을 이용해 LED 밝기 제어하기
  3. 아두이노로 모니터 앰비라이트(Ambilight) 시스템 직접 만들기
  4. 파이썬 연동 아두이노 RFID 출석 관리 시스템 구축하기
  5. K30 CO2 센서: 실시간 실내 공기질 모니터링
  6. 1Sheeld와 아두이노로 시각/청각 장애인 간 소통 돕기
  7. 스마트 저금통 만들기: 아두이노 나노로 동전 인식기 제어하기
  8. 아두이노와 스마트폰으로 만드는 스마트 전압계 – 초간단 DIY 프로젝트
  9. 아두이노와 MAX30100으로 만드는 실시간 IoT 심박수 모니터
  10. 아두이노 블루투스로 LED 제어하기 - HC-05 & MIT App Inventor 입문 가이드