2007/12/29
地球上を歩き回る GoogleEarth 対応 WbalanceGE v1.00
バランスWiiボード を使って GoogleEarth 上を歩けるようにしてみました。
ダウンロード及び詳細はこちら
・WbalanceGE v1.00

3D 視点のリアルスケールで、リアルな時間で実際に足を動かして移動します。
○特徴
・体重の表示は無く、純粋に歩き(走り)に特化しています。
・コントローラは不要で、バランスボードだけで歩きます。
・歩行と区別できる 走り検出 を行ってみました。
・ログファイル保存記録機能あり
正月に、箱根を一緒に走れるかもしれません!
自分視点なので GoogleEarth で「建物の 3D 表示」を ON にしないと
見栄えが良くならないので注意。
あまりに広いところは、歩いても遠いし風景も単調になりがちです。
周囲に細かい建物があって割と狭いところの方が歩いている気分になれるようです。
GoogleEarth のカメラを直接操作したあと、その場から歩き出すには
メニューの「Earth」→「開始位置設定」
が必要です。
参考ページ
・Google Earth
・Google Earth COM API を C++ で使う
関連エントリ
・地球上の座標
ダウンロード及び詳細はこちら
・WbalanceGE v1.00

3D 視点のリアルスケールで、リアルな時間で実際に足を動かして移動します。
○特徴
・体重の表示は無く、純粋に歩き(走り)に特化しています。
・コントローラは不要で、バランスボードだけで歩きます。
・歩行と区別できる 走り検出 を行ってみました。
・ログファイル保存記録機能あり
正月に、箱根を一緒に走れるかもしれません!
自分視点なので GoogleEarth で「建物の 3D 表示」を ON にしないと
見栄えが良くならないので注意。
あまりに広いところは、歩いても遠いし風景も単調になりがちです。
周囲に細かい建物があって割と狭いところの方が歩いている気分になれるようです。
GoogleEarth のカメラを直接操作したあと、その場から歩き出すには
メニューの「Earth」→「開始位置設定」
が必要です。
参考ページ
・Google Earth
・Google Earth COM API を C++ で使う
関連エントリ
・地球上の座標
2007/12/25
バランスWiiボード をPCで使う wiibalancepc v0.08
バランスWiiボード とのペアリングが前より簡単になりました。
ダウンロード
・wiibalancepc v0.08 バランスWiiボードを使った PC体重計
Wiiリモコン にオキシライド電池を入れたら、wiibalancepc での
バッテリー残量表示が 113% に! (たぶん電圧の差)
関連エントリ
・Windows Bluetooth API (2)
・Windows Bluetooth API
・バランスWiiボード をPCで使う wiibalancepc v0.07
ダウンロード
・wiibalancepc v0.08 バランスWiiボードを使った PC体重計
Wiiリモコン にオキシライド電池を入れたら、wiibalancepc での
バッテリー残量表示が 113% に! (たぶん電圧の差)
関連エントリ
・Windows Bluetooth API (2)
・Windows Bluetooth API
・バランスWiiボード をPCで使う wiibalancepc v0.07
2007/12/21
バランスWiiボード をPCで使う wiibalancepc v0.07
100m (100歩) スプリントモードを追加しました。
100m (100歩) の時間を競います。[Enter] キーでスタート
バランスボードを複数台接続すれば、同時に対戦可能です。
ダウンロード
・wiibalancepc v0.07 バランスWiiボードを使った PC版体重計
Bluetooth の限界まで接続できますが、画面表示の都合で
取りあえず最大 4台までとなっています。
また複数台接続した場合でも、歩数や速度などを独立して
保持できるようにしました。
小さい字ですがそれぞれ個別に表示されています。
動作テストやデバッグで、かなり走った(あしぶみした)気がします。
同時につけていた万歩計は今日 2万歩。
100m (100歩) の時間を競います。[Enter] キーでスタート
バランスボードを複数台接続すれば、同時に対戦可能です。
ダウンロード
・wiibalancepc v0.07 バランスWiiボードを使った PC版体重計
Bluetooth の限界まで接続できますが、画面表示の都合で
取りあえず最大 4台までとなっています。
また複数台接続した場合でも、歩数や速度などを独立して
保持できるようにしました。
小さい字ですがそれぞれ個別に表示されています。
動作テストやデバッグで、かなり走った(あしぶみした)気がします。
同時につけていた万歩計は今日 2万歩。
2007/12/20
バランスWiiボード をPCで使う wiibalance v0.06
ルームランナー機能を追加してみました。
WiiFit のバランスボード上で足踏みすると歩数をカウントします。

カーソルキー左右で歩幅を設定しておけば
○歩数
○速度 (km/h)
○ペース (time/km)
○距離
の表示が可能です。
BMI 表示にも対応しました。あらかじめ身長の設定が必要です。
身長の設定はカーソルキー上下で行います。
ダウンロード
・wiibalance v0.06 バランスWiiボードを使った PC版体重計
あくまで足踏みなので バランスWiiボード の制限とか注意事項を
良く読んで、安全に使ってください。
※キャプチャ画像の身長体重は架空のものです
追記 (2020/09/30): GitHub: WBHealthMeter
関連エントリ
・PCでバランスWiiボードの体重計
参考ページ
・Wikipedia BMI
WiiFit のバランスボード上で足踏みすると歩数をカウントします。

カーソルキー左右で歩幅を設定しておけば
○歩数
○速度 (km/h)
○ペース (time/km)
○距離
の表示が可能です。
BMI 表示にも対応しました。あらかじめ身長の設定が必要です。
身長の設定はカーソルキー上下で行います。
ダウンロード
・wiibalance v0.06 バランスWiiボードを使った PC版体重計
あくまで足踏みなので バランスWiiボード の制限とか注意事項を
良く読んで、安全に使ってください。
※キャプチャ画像の身長体重は架空のものです
追記 (2020/09/30): GitHub: WBHealthMeter
関連エントリ
・PCでバランスWiiボードの体重計
参考ページ
・Wikipedia BMI
2007/12/18
バランスWiiボードの解析メモ 5
センサーの順番を間違えていました。
左上, 右上, 左下, 右下
と書いていましたが、正しくは
左上, 左下, 右上, 右下
の順番でした。訂正します。記事も修正しました。
体重計ソフトの表示を安定させて数値を読みやすくしてみました。
・wiibalance v0.05 バランスWiiボードを使った PC版体重計
○その他の変更点
・前後左右のバランス表示の追加
・体重計によるマウス機能の挙動を改良、加速つき。
Wiiリモコン を併用してマウスクリックもできます。
・体重表示の数値だけ消せるようにしました。[H]キー。
人前でマウス操作だけ試したい場合などにも使えます。
左上, 右上, 左下, 右下
と書いていましたが、正しくは
左上, 左下, 右上, 右下
の順番でした。訂正します。記事も修正しました。
体重計ソフトの表示を安定させて数値を読みやすくしてみました。
・wiibalance v0.05 バランスWiiボードを使った PC版体重計
○その他の変更点
・前後左右のバランス表示の追加
・体重計によるマウス機能の挙動を改良、加速つき。
Wiiリモコン を併用してマウスクリックもできます。
・体重表示の数値だけ消せるようにしました。[H]キー。
人前でマウス操作だけ試したい場合などにも使えます。
2007/12/17
PC でバランスWiiボードの体重計
解析結果を元に、体重計ソフトを作ってみました。
取りあえず表示するだけ。
・wiibalance v0.03
PC 上で Wii Fit のバランスボードを使って体重測定できます。
Bluetooth が必要。
ついでに「体重マウス」機能を追加してみました。
[SPACE] または [M] キーで On になります。
体重マウスが On の場合、重心の移動でマウスカーソルが動きます。

バランスWiiボードは体重計以外にもいろいろ応用できます。
例えば PC の前にいるかどうか判定するセンサーとして、
椅子とか座布団代わりに使うとかどうでしょう。
本当に離籍したときだけ短い時間でスクリーンロックすれば
セキュリティ対策に。
関連エントリ
・バランスWiiボードの解析メモ 3
・バランスWiiボードの解析メモ 2
・バランスWiiボードのメモ
取りあえず表示するだけ。
・wiibalance v0.03
PC 上で Wii Fit のバランスボードを使って体重測定できます。
Bluetooth が必要。
ついでに「体重マウス」機能を追加してみました。
[SPACE] または [M] キーで On になります。
体重マウスが On の場合、重心の移動でマウスカーソルが動きます。

バランスWiiボードは体重計以外にもいろいろ応用できます。
例えば PC の前にいるかどうか判定するセンサーとして、
椅子とか座布団代わりに使うとかどうでしょう。
本当に離籍したときだけ短い時間でスクリーンロックすれば
セキュリティ対策に。
関連エントリ
・バランスWiiボードの解析メモ 3
・バランスWiiボードの解析メモ 2
・バランスWiiボードのメモ
2007/12/16
バランスWiiボードの解析メモ 4
取りあえず体重らしき値が取れました。
「バランスWiiボードの解析メモ 3」のキャリブレーションパラメータを使用。
あらかじめレジスタから A0-A2 ~ D0-D2 を読み出しておきます。
WiiFit の バランスWiiボード は max 136kg なので、単純に
A1/B1/C1/D1 を中点 (68kg) とみなして補間してみます。
右上のセンサー(A) でサンプリングした値を P0a とすると
補間値 P1a は
・P0a < 68 A1
P1a = 68 * (P0a - A0) / (A1 - A0)
・P0a >= 68 A1
P1a = 68 * (P0a - A1) / (A2 - A1) + 68
これを A,B,C,D の 4センサー分求めて平均をとると、これだけで
自分の体重に一致しました。
まだ試したサンプル数が少ないのでもっと検証が必要でしょう。
これで PC 上でも Bluetooth による履歴付き体重計が作れそうです。
追記(2020/09/30): GitHub: Measurements of the four weight sensors on the Nintendo Balance board are exactly 4 times too big
参考ページ
・Wikipedia バランスWiiボード
関連エントリ
・バランスWiiボードの解析メモ 3
・バランスWiiボードの解析メモ 2
・バランスWiiボードのメモ
「バランスWiiボードの解析メモ 3」のキャリブレーションパラメータを使用。
あらかじめレジスタから A0-A2 ~ D0-D2 を読み出しておきます。
WiiFit の バランスWiiボード は max 136kg なので、単純に
A1/B1/C1/D1 を中点 (68kg) とみなして補間してみます。
右上のセンサー(A) でサンプリングした値を P0a とすると
補間値 P1a は
・P0a <
P1a = 68 * (P0a - A0) / (A1 - A0)
・P0a >=
P1a = 68 * (P0a - A1) / (A2 - A1) + 68
これを A,B,C,D の 4センサー分求めて平均をとると、これだけで
自分の体重に一致しました。
まだ試したサンプル数が少ないのでもっと検証が必要でしょう。
これで PC 上でも Bluetooth による履歴付き体重計が作れそうです。
追記(2020/09/30): GitHub: Measurements of the four weight sensors on the Nintendo Balance board are exactly 4 times too big
参考ページ
・Wikipedia バランスWiiボード
関連エントリ
・バランスWiiボードの解析メモ 3
・バランスWiiボードの解析メモ 2
・バランスWiiボードのメモ
2007/12/16
バランスWiiボードの解析メモ 3
もう一台 WiiFit 買いました。
2台目は最初のバランスボードとはかなり異なる数値が出ています。
「バランスWiiボードの解析メモ 2」ではセンサーが2種類あると
書きましたが単なる個体差だったようです。
HID のレポートは 0x34 より 0x32 の方が多少効率的です。
加速センサーも IR センサーも無いのと、圧力値のサンプリング
だけなら 8個で十分なため。
キャリブレーション用の値が 0x04a40020 以降に格納されているようです。
A = センサー右上
B =センサー左上 右下
C =センサー右下 左上
D = センサー左下
おそらく A0 - A1 - A2 この 3点が右上センサーの圧力に対応する
カーブをあらわしているのではないかと思われます(憶測)。
B~D も同様。


足の部分だけ分解してみると機械的な可動部分は特に無く
金属の棒の中央からコードが出ています。
サスペンションのような構造で浮いていて、棒の片端が本体側、
反対側に浮かせた足が接地していました。
●拡張機器用レジスタのダンプ
参考ページ
・WiiBrewWiki Wiimote
・WiiLi.org Wiimote
関連エントリ
・バランスWiiボードの解析メモ 2
・バランスWiiボードのメモ
2台目は最初のバランスボードとはかなり異なる数値が出ています。
「バランスWiiボードの解析メモ 2」ではセンサーが2種類あると
書きましたが単なる個体差だったようです。
HID のレポートは 0x34 より 0x32 の方が多少効率的です。
加速センサーも IR センサーも無いのと、圧力値のサンプリング
だけなら 8個で十分なため。
キャリブレーション用の値が 0x04a40020 以降に格納されているようです。
A = センサー右上
B =
C =
D = センサー左下
04a40024 - 25 : A0 04a40026 - 27 : B0 04a40028 - 29 : C0 04a4002a - 2b : D0 04a4002c - 2d : A1 04a4002e - 2f : B1 04a40030 - 31 : C1 04a40032 - 33 : D1 04a40034 - 35 : A2 04a40036 - 37 : B2 04a40038 - 39 : C2 04a4003a - 3b : D2 * 2byte 単位 BigEndian
おそらく A0 - A1 - A2 この 3点が右上センサーの圧力に対応する
カーブをあらわしているのではないかと思われます(憶測)。
B~D も同様。


足の部分だけ分解してみると機械的な可動部分は特に無く
金属の棒の中央からコードが出ています。
サスペンションのような構造で浮いていて、棒の片端が本体側、
反対側に浮かせた足が接地していました。
●拡張機器用レジスタのダンプ
バランスWiiボード 1台目 04a40000 : 49 2b 0c 24 0a 84 4a 89 1d 00 99 00 00 00 00 00 04a40010 : 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff 04a40020 : 41 69 00 00 49 69 0c 67 0a a4 4a b6 50 7c 13 3d 04a40030 : 11 6d 51 a6 57 87 1a 17 18 3f 58 9e d8 94 ce 81 04a40040 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 04a40050 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04a40060 : 1b 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04a40070 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 04a40080 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 04a40090 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 04a400a0 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 04a400b0 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 04a400c0 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 04a400d0 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 04a400e0 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 04a400f0 : ff ff 00 00 ff ff 00 00 00 00 00 00 a4 20 04 02
バランスWiiボード 2台目 04a40000 : 13 b2 13 ed 0b f5 48 47 0f 00 96 00 00 00 00 00 04a40010 : 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff 04a40020 : 01 69 00 00 13 66 13 f2 0b f6 48 91 1a 5f 1a a3 04a40030 : 12 dd 4f 48 21 5a 21 62 19 ce 56 0f b9 34 f5 28 04a40040 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 04a40050 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04a40060 : 11 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04a40070 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 04a40080 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 04a40090 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 04a400a0 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 04a400b0 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 04a400c0 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 04a400d0 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 04a400e0 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 04a400f0 : ff ff 00 00 ff ff 00 00 00 00 00 00 a4 20 04 02
参考ページ
・WiiBrewWiki Wiimote
・WiiLi.org Wiimote
関連エントリ
・バランスWiiボードの解析メモ 2
・バランスWiiボードのメモ
2007/12/14
バランスWiiボードの解析メモ 2
やはり拡張ポート経由扱いで接続されていました。
アクセス方法は Nunchuk や Classic Controller と同じです。
他の拡張ポート経由のデバイス同様、16 でレジスタに書き込んで初期化を
行えば拡張デバイスの更新情報を取得できます。
例えばレポート番号 0x34 を使った場合下記の形式でデータが取れます。
(AA AA~は BigEndian)
EE にも何らかの値が入っているように見えますが用途は不明です。
センサーは4つ。
バランスボード本体の4本の足の位置に入っているようです。
裏返して足部分だけ押してみると、上の AA~DD の値が個別に
反応する様子がわかります。
センサーの種類は、値の範囲から見て2種類。
(L) が 18000~ 程度
(S) が 2700~ あたり
この2つはそれぞれ精度の担当範囲が異なっているのかもしれません。
対角に配置して精度を補いつつ、向きもわかる構造になっていると
考えられます。
2007/12/17追記: 単なるセンサーのばらつきでした
またこの値は Nunchuk/Classic のような 0x17 デコードが不要です。
実際に 0x04a40000 ~ 0x04a400ff をダンプしてみても、そのまま
素の値が取れているように見えます。
例えば 0x04a400fc は最初から 0xa4 です。
識別に使うと思われる 0x04a400f0~ のライン
その他わかったこと
・電源ボタンは Wii Remote の (A) ボタン相当
・電源ランプは LED1
・Nintendo RVL-WBC-01
●バランスWiiボード の判別アルゴリズム
(1) 0x20 レポートを読み出し、拡張ポートが使われているかチェック
(2) 拡張ポートが使われていなければ Wii コントローラのみ
(3) 拡張ポートへ接続があれば 0x04a400fc を読み出し 0xa4 かチェック
(4) 0xa4 なら 0x17 デコードをしない。0xa4 でなければ 0x17 変換を行う
(5) 0x04a400fe~ff を読み出し判別する。
0x00 0x00 Wiimote+ヌンチャク
0x01 0x01 Wiimote+クラシックコントローラ
0x04 0x02 バランスWiiボード
キャリブレーション等その他の情報は不明。
追記: 解析済みです。解析メモ 3以降を参照してください。
これは blog の1エントリに過ぎないので、他の後日のエントリも参照してください。
参考ページ
・WiiLi.org Wiimote
・WiiLi.org Wiimote/Extension Nunchuk
・WiiLi.org Wiimote/Extension Classic Controller
・WiiBrewWiki Wiimote
リンク
・WiiFit 、バランスWiiボード
関連ページ
・バランスWiiボードの解析メモ 3 / 4
・バランスWiiボードの解析メモ 5
・wiibalancepc PC版体重計 Download
アクセス方法は Nunchuk や Classic Controller と同じです。
他の拡張ポート経由のデバイス同様、16 でレジスタに書き込んで初期化を
行えば拡張デバイスの更新情報を取得できます。
例えばレポート番号 0x34 を使った場合下記の形式でデータが取れます。
34 00 00 AA AA BB BB CC CC DD DD ?? ?? EE .. AA AA 右上 (L) BB BB左上右下 (S) CC CC右下左上 (S) DD DD 左下 (L)
(AA AA~は BigEndian)
EE にも何らかの値が入っているように見えますが用途は不明です。
センサーは4つ。
バランスボード本体の4本の足の位置に入っているようです。
+----------------+ | BB(S) AA(L) | | DD(L) CC(S) | | Power | +----------------+
裏返して足部分だけ押してみると、上の AA~DD の値が個別に
反応する様子がわかります。
(L) が 18000~ 程度
(S) が 2700~ あたり
この2つはそれぞれ精度の担当範囲が異なっているのかもしれません。
対角に配置して精度を補いつつ、向きもわかる構造になっていると
考えられます。
2007/12/17追記: 単なるセンサーのばらつきでした
またこの値は Nunchuk/Classic のような 0x17 デコードが不要です。
実際に 0x04a40000 ~ 0x04a400ff をダンプしてみても、そのまま
素の値が取れているように見えます。
例えば 0x04a400fc は最初から 0xa4 です。
識別に使うと思われる 0x04a400f0~ のライン
04a400f0 : ff ff 00 00 ff ff 00 00 00 00 00 00 a4 20 04 02
その他わかったこと
・電源ボタンは Wii Remote の (A) ボタン相当
・電源ランプは LED1
・Nintendo RVL-WBC-01
●バランスWiiボード の判別アルゴリズム
(1) 0x20 レポートを読み出し、拡張ポートが使われているかチェック
(2) 拡張ポートが使われていなければ Wii コントローラのみ
(3) 拡張ポートへ接続があれば 0x04a400fc を読み出し 0xa4 かチェック
(4) 0xa4 なら 0x17 デコードをしない。0xa4 でなければ 0x17 変換を行う
(5) 0x04a400fe~ff を読み出し判別する。
0x00 0x00 Wiimote+ヌンチャク
0x01 0x01 Wiimote+クラシックコントローラ
0x04 0x02 バランスWiiボード
追記: 解析済みです。解析メモ 3以降を参照してください。
これは blog の1エントリに過ぎないので、他の後日のエントリも参照してください。
参考ページ
・WiiLi.org Wiimote
・WiiLi.org Wiimote/Extension Nunchuk
・WiiLi.org Wiimote/Extension Classic Controller
・WiiBrewWiki Wiimote
リンク
・WiiFit 、バランスWiiボード
関連ページ
・バランスWiiボードの解析メモ 3 / 4
・バランスWiiボードの解析メモ 5
・wiibalancepc PC版体重計 Download
2007/12/13
バランスWiiボードのメモ
WiiFit の体重計 バランスWiiボード
コントローラと同じように Bluetooth で認識可能。
Bluetooth での機器名
・Nintendo RVL-CNT-01 (Wiiリモコン)
・Nintendo RVL-WBC-01 (バランスWiiボード)
Vista x64 でもペアリング OK。
ただしそのままではコントローラとして使えません。
Bluetooth での名称は異なるものの、HID でアクセスすると
プロダクトID も名称も Wiiリモコン と全く同じ。特に区別なし。
Wiiリモコンの LED コントロールを使うと、LED1 がバランスWiiボード
の電源ランプに相当。0x11 0x10 等。
0x20 の Status を見ると、Nunchuk, Classic Controller と同じように
拡張ポート扱いで接続されているように見えます。
バッテリー容量はそのまま取れそうです。
参考
・WiiLi.org Wiimote
・MSDN Human Input Devices
HID へのアクセス方法は WindowsDriverKit (WDK) の
\WinDDK\6000\src\hid\hclient あたりが参考になります。
コントローラと同じように Bluetooth で認識可能。
Bluetooth での機器名
・Nintendo RVL-CNT-01 (Wiiリモコン)
・Nintendo RVL-WBC-01 (バランスWiiボード)
Vista x64 でもペアリング OK。
ただしそのままではコントローラとして使えません。
Bluetooth での名称は異なるものの、HID でアクセスすると
プロダクトID も名称も Wiiリモコン と全く同じ。特に区別なし。
Wiiリモコンの LED コントロールを使うと、LED1 がバランスWiiボード
の電源ランプに相当。0x11 0x10 等。
0x20 の Status を見ると、Nunchuk, Classic Controller と同じように
拡張ポート扱いで接続されているように見えます。
バッテリー容量はそのまま取れそうです。
参考
・WiiLi.org Wiimote
・MSDN Human Input Devices
HID へのアクセス方法は WindowsDriverKit (WDK) の
\WinDDK\6000\src\hid\hclient あたりが参考になります。