WiiヌンチャクをArduinoで活用: I2C接続とライブラリによる完全ガイド
必要なパーツと材料
| パーツ | 数量 | 備考 |
|---|---|---|
| Wiiヌンチャク (純正または互換品) | 1 | |
| レベルシフター (SparkFun等、双方向I2C対応) | 1 | 3.3V動作のヌンチャクを5V Arduinoで安全に使うため推奨 |
| Arduino Uno | 1 |
プロジェクト概要
Wiiヌンチャクは安価で、ジョイスティック (2軸)、加速度センサー (3軸)、2ボタン (C/Z) を備え、I2Cで通信する優れた入力デバイスです。しかし安定したライブラリが見当たらなかったため、筆者が独自にヘッダーライブラリ (nunchuk.h) を作成し、詳細なプロトコル解説と共に公開しました。
純正 vs 互換品
- 純正: ケーブルシールドあり、ジョイスティック分解能高、加速度センサー精度良。長寿命なら純正推奨。
- 互換品: 安価 (約10-15ユーロ安)。ケーブルシールドなし、ジョイスティック微小動作検知せず、加速度センサー精度劣る。ただしカルマンフィルターで実用レベルに補正可能。
コネクターと配線
任天堂独自コネクター (6ピン) はアダプター購入か、コネクター破壊して直結。配色は個体差あり、必ず分解してピンアサイン確認のこと。
純正例: 緑=SDA、赤=3.3V、白=GND、黄=SCL (他2ピンNC)
互換品例: 黄=SDA、緑=3.3V、赤=GND、白=SCL (黒=NC)
Arduino側: SDA→A4, SCL→A5。3.3V電源はArduinoの3.3Vピンから供給可。レベルシフター使用時はそれに準ずる。WiiChuckアダプター使用時はA2=3.3V, A1=GND に接続し nunchuk_init_power() 呼び出し。
ソフトウェア: ライブラリの使い方
#include <Wire.h>
#include "nunchuk.h"
void setup() {
Serial.begin(9600);
Wire.begin();
// nunchuk_init_power(); // アダプター使用時
nunchuk_init();
}
void loop() {
if (nunchuk_read()) {
// nunchuk_data 構造体から各種値取得可能
nunchuk_print(); // シリアル出力デモ
}
delay(10);
}
主なアクセス関数
nunchuk_buttonZ()/nunchuk_buttonC(): ボタン状態 (0/1)nunchuk_joystickX()/nunchuk_joystickY(): ジョイスティック値 (キャリブレーション済み)。_raw()版で生値も取得可。nunchuk_joystick_angle(): ジョイスティック角度 (ラジアン)nunchuk_accelX()/nunchuk_accelY()/nunchuk_accelZ(): 加速度値 (キャリブレーション済み)。_raw()版あり。nunchuk_pitch()/nunchuk_roll(): ピッチ/ロール角 (ラジアン)。ヨーは加速度計だけでは取得不可。
キャリブレーション定数はライブラリ冒頭で定義。ニュートラル位置の生値を読んで調整推奨。
I2Cプロトコル詳細 (上級者向け)
デバイスアドレス 0x52。初期化シーケンスで暗号化無効化推奨 (0xF0,0x55 + 0xFB,0x00)。データ読み出しはアドレス 0x00 から6バイト。ボタンビットは反転、加速度下位2ビットはバイト6に格納。キャリブレーションデータは 0x20 から16バイト。デバイスIDは 0xFA (ヌンチャク: 0xA4200000)。
ソースコード / リソース
- ライブラリ
nunchuk.hとサンプルスケッチ - GitHub: Fritzingパーツ / 回路図
- Processing用デモスケッチ付属 (ジョイスティックで円錐バランスゲーム)
カスタムパーツ / 回路図
Fritzing形式のパーツ定義と回路図が提供されています。
製造プロセス
- LIRCなしでRaspberry PiにIRリモコンを接続 - Python UARTアプローチ
- Arduino MegaでPWM制御:プッシュボタン付きLEDフェード制御チュートリアル
- Arduinoで作るモニター用Ambilightシステム:没入感アップの自作ガイド
- Python連携で信頼性向上: Arduino RFID勤怠管理システム
- K30 CO2センサで室内空気質をリアルタイム監視する
- 1SheeldとArduinoで盲ろう者のコミュニケーションを支援する
- スマート貯金箱を作ろう:Arduino Nanoでコインアクセプターを制御
- Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
- ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター
- ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
- Arduinoベースのヌンチャク操作6自由度ロボットアームキット