フォト
2017年3月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
無料ブログはココログ

« Wii用ヌンチャクを購入しました | トップページ | UART-I2Cブリッジの使い方 - リアルタイムクロックの調査 - »

2015年5月17日 (日)

Wiiヌンチャクの動作確認しました

以前購入したWiiヌンチャク用(多分ぱちもん)
ブレッドボードやArduinoに接続するアダプタが到着したので動作を確認しました。
動作確認にはちょっとハマりました。

アダプタはこんな感じの製品です。

Dscn3820

Wiiヌンチャクの端子にこんな感じで接続します。

Dscn3821

早速、arduinoに接続して動作を確認します。

arduinoでの使い方は次のサイトを参考にしました。
todbot blog - “WiiChuck” Wii Nunchuck Adapter Available

アダプタの接続はアナログポート A2からA5を使います。
A2 : Lレベル  0V出力 (GND)
A3 : Hレベル  5V出力
A4 : I2C SDA
A5 : I2C SCL

電圧は、3.3V推奨のようですが、5Vでも動作します。

Dscn3818

次にプログラムを参考サイトのリンクから入手しArduinoの書き込みます。
todbot/wiichuck_adapter - https://github.com/todbot/wiichuck_adapter

早速動かして見たのですが...

04

値がちゃんと取れません。プログラムを修正してエラーを返すようにしても
エラーは発生していないようです。
アダプタを抜くと、I2Cの通信エラーとなるのでI2Cのアドレスが正しく、かつ
データ取得も正常のようです。

05

そこで、以前製作したUART-I2C変換モジュールで動作確認してみました。

Dscn3819

接続して、TeraTermからサンプルソースを参考にして、I2Cのコマンドを
送信してみます。

@wA4@h4000 がハンドシェイク用のコマンド、@wA4@h0000が利用開始、
@gA406がデータ取得です。

06

試した感じでは、I2Cの通信は問題なさそうです。
ただし、読み取り値がFFFFFFFFFFと正常な値ではありません。

「うーん、これは不良品ではないだろうか」
取りあえず、WiiヌンチャクのI2Cコマンド仕様を探して調べてみることに...
多くのサイトで紹介されており、今回使ったコマンドで問題ないようです。
下記のサンプルやI2Cの解説も同じ感じです。
http://www.robotshop.com/media/files/PDF/inex-zx-nunchuck-datasheet.pdf

ところが、下記の資料の中で
http://web.engr.oregonstate.edu/~sullivae/ece375/pdf/nunchuk.pdf

次の文面を発見
To communicate with the Nunchuk,we must send a handshake signal.
If you are using a black Wii Nunchuk, send 2 bytes 0xF0, 0x55 to initialize
the first register and 0xFB, 0x00 to initialize the second register of the Nunchuk.
On a white Wii Nunchuk, send 0x40, 0x00 followed by 0x00.

要するに、「黒ヌンチャク」と「白ヌンチャク」でハンドシェイクで送るデータが違うようです。
サンプルソースや、出回っている情報は「白ヌンチャク」のものだけです。

私のは「白ヌンチャク」ですが、ぱちもんなので「もしかしたら...」と思い
「黒ヌンチャク」用のハンドシェイクを行ってみると、

07

それらしい値が帰ってきました。
私のは「黒ヌンチャク」のようです。

この修正をArduinoに反映してみると、それっぽい値が取れました。

08

ヌンチャクの操作によって値が変わります。
加速度センサーもちゃんと動いているようです。

I2Cで送信するコマンドは単純なので、IcihoJamでも使えそうです。

(追記)
IchigoJamでも試したのですが、結果はダメでした。
IchigoJamに、データ取得だけを行うコマンドがありません。
I2CR(I2Cアドレス、送信データアドレス、データ長、受信データアドレス、データ長)
というコマンドは、データ送信付きの受信コマンドのため使えませんでした。
データ長に0を指定すると256バイト送信されます。

今回は諦めることにします。

関連記事
LPC810を使ったUART-I2Cブリッジの改良版が出来ました (16/07/21)
LPC810を使ったUART-I2Cブリッジの機能拡張の検討中 (16/07/13)
UART-I2Cブリッジの使い方 - リアルタイムクロックの調査 (15/05/17)
Wiiヌンチャクの動作確認しました (15/05/17) [この記事です]
LPC810を使ったUART-I2Cブリッジがやっと出来ました (15/04/15)
ATtiny13AでUART-I2Cブリッジを試作したが微妙 (15/03/29)
ATtiny13AでUART-I2Cブリッジの製作 - まずその準備3 (15/03/26)
ATtiny13AでUART-I2Cブリッジの製作 - まずその準備2 (15/03/25)
ATtiny13AでUART-I2Cブリッジの製作 - まずその準備 (15/03/24)

公開・ダウンロードサイト
GitHub - LPC810 UART-I2Cブリッジモジュール

« Wii用ヌンチャクを購入しました | トップページ | UART-I2Cブリッジの使い方 - リアルタイムクロックの調査 - »

arduino」カテゴリの記事

LPC810」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/571408/61601902

この記事へのトラックバック一覧です: Wiiヌンチャクの動作確認しました:

« Wii用ヌンチャクを購入しました | トップページ | UART-I2Cブリッジの使い方 - リアルタイムクロックの調査 - »