日本語が、大好きです。(Sorry, Japanese Only.)
          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
<< 2024 November >>

no fun nolife
NEW ENTRIES
RECENT COMMENTS
CATEGORIES
rss
 はてなアンテナに追加
 はてなRSSに登録
 Bloglinesで閲読登録
 Subscribe with livedoor Reader
 Add to Google
 My Yahoo!に追加
LINK
ARCHIVES
music
LOGIN
現在のモード: ゲストモード
USER ID:
PASS:
logout

もうなんか、風邪をひいてしまってズビズバーです。今週末にはbirthday bash!があるからがんばるよ!遊びにおいでよ!(タイムテーブル公開しました)

さてさて。今日は「Arduinoを使ってWiiリモコンでmidi操作を可能にした話」の続き。Bluetoothの受信のあたりを。


■Bluetoothの受信
 「arduinoを使ってWiiリモコンでMIDI操作」と一言ざっくり言っても、その実必要な技術はなんなのか。まあ「arduinoの知識」とか「C言語」とか基礎的な所を除けば「Bluetoothの受信」「MIDIの送信」の2つに絞れます。僕の場合、arduinoでのmidi出力は既に成功しているので、今回クリアしなきゃいけないのは「Bluetoothの受信」って事になる。


 先の「みならい工作」さんを参照すると、このプログラムは「USB Host Shield」と「Bluetooth USBアダプタ」を使う様子。USB Host ShieldはSparkFun社から出ていて、スイッチサイエンスで通販することができます。というか千石でも買える。Bluetooth USBアダプタはあきばおーとかで安いのを買ってくればよろしい。


「USB Host Shield」と「Bluetooth USBアダプタ」


 ソースコードは「みならい工作」さんのpdeを参照に。ソースコードをじーっとみていると、どうやら「wiiremote」っていうグローバル変数を定義・使用してそうさしているっぽい。傾きは「wiiremote.Report.Accel.X」みたいな変数を使っている。そのほかはヘッダとか見ながらちょこちょこいじれば、案外簡単にいろいろ検出できる。突発的に検出値が飛び跳ねる様な事も無いので、いわゆる「何回分かの値で平均値を取る」みたいな事もしなくていいらしい。ハードウェアで実現しているのか、既にドライバで実装されているかは不明。


double x,y,z;

x = (double) wiiremote.Report.Accel.X;
y = (double) wiiremote.Report.Accel.Y;
z = (double) wiiremote.Report.Accel.Z;

// 振り回し検出
mVector.set(x,y,z);

// モード別タスク呼び出し
pmWiiMidi->task();


こんなかんじ。


 ただ、Wiiリモコンに乗っているのは加速度センサであって、傾きセンサでは無い。ゆっくり動かしている間はそんなに気にならないんだけど、素早く動かした際に誤検出が頻発する。いや、正しくは誤検出じゃないんだけどね。簡単に言うと、素早く動かした場合と、急に動きを止めた場合で、加速度的には同じですよね。とかそういう。このへん、僕も感覚では何となく解るけどしっかりと把握している訳では無いので深く突っ込まれるときついです。

 これらを加味して、「可能な限りの振り回し検出」を実装してみた。8月中旬でここまでだったかな。

Recent Entries from Same Category









    
処理時間 0.683312秒