Leonardoでの新機能である汎用HIDでPS3を操作しようというもの。
使用部品点数を極限まで減らすため、最低ジャンプワイヤー(4束or4本)のみで動きます。おまけでLEDあればピカピカするかもしれない(何
今回の使用パーツは下記の通り。
- プログラミング用の開発環境 with Arduino IDE
- Arduino Leonardo もしくは互換品(今回はFreaduino Leonardo使用)
- オス-オスのジャンプワイヤー 4本(今回は4本束のものを使用)
- 多分あると思うのでLED(無くても動作可能)
以上である。なんという少なさ。どうやって操作するんだという疑問は下記の通り。
操作方法は、『ジャンプワイヤーに触れると動く』、簡単。
ただし、生体電気(静電容量)を扱う為、気温や環境、人によって動作はまちまちになる可能性が高い。必要であれば調整すべし。適当に…。
※ちなみに3.3V駆動で試したため、5Vの場合リファレンスが変わるので弄る必要性高。
配線は、D13ピンと隣のGNDにいつものようにLED。A0からA3までをジャンプワイヤーで繋げ、反対側は未接続にする。ここを人が触れると反応する。A0が上、A1が下、A2が左、A3が右に矢印キーが押される。同時には操作不可。
以下ソースコード。物凄く見づらくて酷いが気にしない。
int e0, e1, e2, e3; unsigned int c0, c1, c2, c3, count; void setup() { // Serial.begin(9600); c0 = c1 = c2 = c3 = 0; count = 8; } void loop() { e0 = analogRead(0); e1 = analogRead(1); e2 = analogRead(2); e3 = analogRead(3); if (e0 == 0x3FF) c0++; else c0 = 0; if (e1 == 0x3FF) c1++; else c1 = 0; if (e2 == 0x3FF) c2++; else c2 = 0; if (e3 == 0x3FF) c3++; else c3 = 0; if (count++ >= 6) { if (c0 % 10 == 9) { // Serial.println("A0 hit! 0"); Keyboard.press(KEY_UP_ARROW); count = 0; } else if (c1 % 10 == 9) { // Serial.println("A1 hit! 1"); Keyboard.press(KEY_DOWN_ARROW); count = 0; } else if (c2 % 10 == 9) { // Serial.println("A2 hit! 2"); Keyboard.press(KEY_LEFT_ARROW); count = 0; } else if (c3 % 10 == 9) { // Serial.println("A3 hit! 3"); Keyboard.press(KEY_RIGHT_ARROW); count = 0; } if (count == 0) digitalWrite(13,HIGH); delay(20); } else if (count == 4) { Keyboard.releaseAll(); digitalWrite(13,LOW); delay(20); } else delay(20); }
コメントアウトされている部分を外すと、触れて反応したときにシリアル通信でデバッグができる。というかデバッグ時の名残。(Leonardo以外でもここは動作可能)
基本的な手法としては、一定以上の電圧が検出され、維持されると「操作した」と認識する。そうすると、Leonardoの新機能であるKeyboardクラスを用いて、USB接続先のホストに矢印キーの操作が渡る。
Keyboardクラスは汎用ヒューマンインタフェースと呼ばれる一般的なキーボードと同じ扱いが可能であるため、PS3やXbox360、その他USBでキーボード接続できる多くの機器で動作可能と思われる。試したのはMacBook AirとPS3のみ。
他の人にも試してもらったが、同じ環境下ではたいてい動く模様。
ちなみにだが、0V(GND)になる伝導体に体が触れていてはいけない。例えばMBAはアルミで覆われているが、GNDになっているため、触れた状態だと操作できない。
またもや画像の少ない…むしろ存在しないという記事で分かりづらい…。
ひとまず以上。多分そこまで興味ある人は少ない…?入手性の問題もあって。
そのうちUnoとかでのHIDのやり方とかも書くかも。(ATtinyとか)
そのうちUnoとかでのHIDのやり方とかも書くかも。(ATtinyとか)
0 件のコメント:
コメントを投稿