デモ用のVR ready PC仕立てた

概要

今の自宅で使っているメインPCがパーツを継ぎ足しながら4年ほど使っていたので、VR Readyで「ある程度軽量で」「リュックに入り」「そこそこ速い」PCを仕立てました。

5kg程度で11.5リットル の容積に収まるような物が出来ました。
これはGTX980搭載の17インチノートの i71100(と巨大なACアダプタ)と比べて(モニタとかキーボード分だけ重いけど安価なので)トントンかなあと思っています。

(以下パーツリストですが、ツクモとかに足を運んで「重量が軽くて容積取らなくてVR Readyなやつ一式!」と頼んだほうが確実だと思います。あとはG-Tuneさんのリトルギア、よく出来てますアレ)

続きを読む

3000円で作るTwitter連動wifi体重計

概要

ESP8266系のボードと体重計をつなげて、体重計に乗ったら自動的にtwitterに投稿する仕組みを構築しました。

正直なところ、以下の2個の記事をまとめただけです。(先人に感謝) qiita.com

qiita.com

  • ESP8266だと例示の赤外線リモコン受信モジュールPL-IRM0101の 5Vが給電しづらい
  • twitter連携との組み合わせが分からない

みたいな方の一助になれば幸いです。

作った後はUSB-ACアダプタで適当にボードごと放置しておけば良いので、PC接続しなくても良くなり、WithThingsみたいな使用感を得られます♪

用意するもの

体重計(2100円)

上記記事にあるように、赤外線式で表示を飛ばしてくれる物が良いです。僕は同様にHashy SALUTEを買いました。2000円程度です。

ボード(700円)

ESP8266搭載の適当なブレイクアウトボードを購入します。VCCから3.3Vが出ている物が良いです。

僕はnodemcu v1.0互換のLolin v3を使いました。700円程度で買えます(届くまで時間かかるかも)(これはUSBシリアルがCH340になっててドライバのインストールが楽なのが好みです)

www.banggood.com

CH340のドライバはこちらです。   http://www.microcontrols.org/arduino-uno-clone-ch340-ch341-chipset-usb-drivers/

類似のボードだとAmazonでこんな風に売ってます。(動作未検証)

赤外線リモコン受信モジュール(100円)

赤外線リモコン受信モジュール PL-IRM1261-C438 akizukidenshi.com

この赤外線リモコン受信モジュールは5V以外にも、3.3Vでも動くのでおすすめです。

TwitterアカウントやThingSpeakアカウントやwifi

これはお任せします。注意点として、Twitterメインアカウントを連携すると 皆さまに自分の体重を大公開する ことになるので、別アカウントにしておく方が無難です…

こうなりますorz

作成手順

ボードセットアップ

まずはnodemcu v1.0をArduinoで書けるように開発環境をセットアップする必要があります。 Arduino IDE1.6.9をインストールして、ボードマネージャで以下のURLを入れてESP8266系を追加します。

  1. File→環境設定→追加のボードマネージャに入れてください。 http://arduino.esp8266.com/stable/package_esp8266com_index.json

その後Arduino IDEを再起動して、

  1. ツール→ボード→ボードマネージャでespと入れて追加(2.30でいいと思います) f:id:izm_11:20160730191946j:plain

こんな感じでNodeMCU 1.0 ( ESP-12EModule).を選びます。 f:id:izm_11:20160718005240p:plain

動作テストに

int count=0;
void setup()                    
{
  Serial.begin(115200);           
  
  Serial.println("Hello world!");  // prints hello with ending line break 
}

void loop()                       // run over and over again
{
 Serial.println(count);
 count++; 
 delay(1000);                                 
}

みたいなコードを書いて、書き込み(アップロード)してシリアルモニタで開いて文字が表示されるか見てみます。(文字化けするときはボーレートを確認してみてください)

この辺りは以下のサイトが詳しいです。

www.instructables.com

体重計読み取りテスト

NodeMCUのピン配置はこんな感じです。 f:id:izm_11:20160718010022p:plain ブレッドボードにNodeMCUとPL-IRM1261-C438を配置して PL-IRM1261-C438の正面から見て

  • 一番左はVCCなので3Vの印字と合わせて刺す
  • 中央はGNDなのでGまたはGNDの印字と合わせて刺す
  • 一番右は信号なので D2 の印字に刺す

と3本だけ結線します。(こんな感じ)

以下テストプログラムで、これを書き込んだ後にシリアルモニタを開き、体重計の信号が受信できそうな場所に置きます。 実際に体重計に乗って、体重が出力されることを確認します。

#define PIN D2

#define TIMEOUT_US 30000

int read_bits(uint32_t *bh, uint32_t *bl) {
  int count = 0;
  uint64_t ret = 0;

  while (true) {
    unsigned long pulse = pulseIn(PIN, HIGH, TIMEOUT_US);
    if (pulse == 0) break;

    uint32_t bit = pulse < 750 ? 1 : 0;
    if (count < 32) {
      bitWrite(*bh, 31 - count, bit);
    } else if (count < 64) {
      bitWrite(*bl, 63 - count, bit);
    }
    ++count;
  }

  return count;
}

void setup() {
  pinMode(PIN, INPUT);

  Serial.begin(115200);
}

void loop() {
  uint32_t bh = 0;
  uint32_t bl = 0;

  int count = read_bits(&bh, &bl);

  if (count == 39) {
    Serial.println(bh & 0xFFFF);
  }
}

wifi接続、ツイッター投稿

手順としてはこのままです。

ESP-WROOM-02(ESP8266)からTwitter投稿 - Qiita

さっきの体重を測る部分と連携して、体重をツイートするコード例は以下の通りです。 ssidとpasswordとthingtweetAPIKeyは自分の環境に合わせて書き換えてください

#include <ESP8266WiFi.h>


#define PIN D2

const char* ssid = "Your SSID";//書き換えてください
const char* password = "Your password";//書き換えてください

char thingSpeakAddress[] = "api.thingspeak.com";
String thingtweetAPIKey = "ADDJNDKAHDK";//書き換えてください

WiFiClient client;

#define TIMEOUT_US 30000

int read_bits(uint32_t *bh, uint32_t *bl) {
  int count = 0;
  uint64_t ret = 0;

  while (true) {
    unsigned long pulse = pulseIn(PIN, HIGH, TIMEOUT_US);
    if (pulse == 0) break;

    uint32_t bit = pulse < 750 ? 1 : 0;
    if (count < 32) {
      bitWrite(*bh, 31 - count, bit);
    } else if (count < 64) {
      bitWrite(*bl, 63 - count, bit);
    }
    ++count;
  }

  return count;
}

void setup() {
  pinMode(PIN, INPUT);
  pinMode(LED, OUTPUT);

  Serial.begin(115200);
  Serial.println("Booting...");
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while(WiFi.waitForConnectResult() != WL_CONNECTED){
    Serial.println("Connection Failed. Rebooting...");
    delay(5000);
    ESP.restart();  
  }

  Serial.println("Connected to wifi");
}

void updateTwitterStatus(String tsData)
{
  if (client.connect(thingSpeakAddress, 80))
  { 
    Serial.println("Connected to ThingSpeak.");
    Serial.println("Posting: " + tsData);

    // Create HTTP POST Data
    tsData = "api_key="+thingtweetAPIKey+"&status="+tsData;

    client.print("POST /apps/thingtweet/1/statuses/update HTTP/1.1\n");
    client.print("Host: api.thingspeak.com\n");
    client.print("Connection: close\n");
    client.print("Content-Type: application/x-www-form-urlencoded\n");
    client.print("Content-Length: ");
    client.print(tsData.length());
    client.print("\n\n");

    client.print(tsData);
    client.stop();
  }
  else
  {
     Serial.println("Connection failed.");
  }
}


void loop() {
  uint32_t bh = 0;
  uint32_t bl = 0;

  int count = read_bits(&bh, &bl);

  if (count == 39) {
    int num=bh & 0xFFFF;
    float weight= (float)num/10;
    String twStr = "Tweeting from ESP8266. my weight: " + String(weight)+" kg";
    updateTwitterStatus(twStr);
    Serial.println(num);
    delay(30000);
    
  }
}

これを書き込んでしまえば、あとは体重計に乗って15秒くらい経って下りるだけで、勝手に連携したツイッターに体重を書き込んでくれます。 レコーディングダイエットや、twitter apiを使った可視化などにも使えそうですね。

補足

NodeMCU系のボードが手元にあったので試しましたが、技適問題があるのでご利用は自己責任でお願いします。 また、他のESP8266系でも実現できると思うので、是非おためしくださいませ。

VRZONE Project I can行ってきたので感想

汎用的な機構として2軸の電動シリンダーと振動ユニット(BASE Shaker系)を仕込んだ座面というのが

  • RealDrive
  • Train Meister
  • Argyle Shift

という3コンテンツで共通してました。おそらくFLEX-GP系っぽいシリンダーかなあと思います。

また、風の制御はほぼ2値っぽく感じますが、効果的に使われていました。

入り口でしのびやさんのVR体験用アイマスク 衛生布 http://store.shopping.yahoo.co.jp/moguravrstore/eiseinuno-gear-vr.html を配られます。衛生面配慮としては、すごく良いですが、もうちょっとだけ中央の目部分が広く空いていると更に嬉しいですね。
多くのコンテンツで共通でしたが、「ゆるっゆるにしたVIVEを手で支えてもらい、両サイドのベルクロ締め直し」の運用で、ピントの大外れが無いので安心でした。IPD調整は無かったので、大体65mmくらいに合わせてあったのかもしれません。

自キャラをしっかり描画するのではなく、IKを使って両手両足だけを半透明で描画、というのが目立ちました。やはり完全一致させるのつらいですよね。 以下各コンテンツの大雑把な感想です。

アーガイルシフト

UIの視線操作レティクルが、ちょろっとだけ遅れて付いてくるところが可愛かった。よくできています。あとはモニターグラフィクスはプロっぽい感じでとても好きです。

実質的にVRIDEと同じでボタン1個と頭部の視線操作のみでした。やはり初見でロボットもので、というと複雑な操作系は導入し辛そうですね。

高速移動も多かったですが、コクピットに十分な広さがあって、視線を引くUIや女の子が目立つので、意外とVR酔いはしにくそうです。
めっちゃ盛り上がるのですが、大変アツいシーンで「To Be Continuedなので、続きを早く!」という気持ちです。
自キャラの描画は腕と足のみ固定表示ですが、腕がレバー位置に合わせてIKで動くので、意外と体感が一致して楽しいです。
UE4製で、描画品質はかなりカリカリのチューニングが入ってそうです(テクスチャ解像度がキワキワまで落としてる雰囲気です)

Viveのスタンディングモードっぽい。

Ski RODEO

体感筐体がおそらく既成品?こういうのが用意できるのがバンナムさんの強いところですね。
スキー板のエッジ判定がリニアじゃないので、グイっと一定以上曲げないと全く効かないのを理解していないと(スキー経験が浅いと)曲がりにくく感じるかもしれません。

全コンテンツ中一番の自由度があり、一方でルートの目安も無いので若干の投げっぱなし感はありました。
気になる衝突時のVR酔い対策の挙動としては、急激にホワイトアウトして直前地点からのリスタート、という手堅い手段。
でも、酔う人は酔うかもしれませんね。

Viveのスタンディングモードっぽい。しかしセンタリング処理(前を向いて視線方向リセット)が、どうもOpenVRの現在のAPIだと、OculusのものよりもYaw軸がキマりにくい気がします。
スキー板の角度が斜めってしまって、スタート前に何度か処理をやり直してもらいました。

UE4製で、雪原は綺麗に出るので楽しいですね!

高所恐怖SHOW

高所恐怖SHOWで使われていたトラッキングはヘッドトラキングも含めてVicon製で、速い動きには追従しません。技術協力にクレセントさんの名前があるので、その関係でViconが使われているのかもです。
ラッキング外れが結構起きますね…

しかしハードウェアセットアップ含めて、すごく気合が入っていて、とても楽しかったです。
ネタバレになりますが、木の板が若干ガタつくようにしてあること、往路よりも復路の難易度が上がる仕組み、「命綱」として腰につけるものが、HMDのケーブリングも兼ねていることなど、とても考えられています。
エレベーターでの移動など、一連の体験の流れがとてもスムーズで、良いコンテンツです。これは体験しないと損ですね。

脱出病棟Ω

4人までの同時プレイ可能。ボイスチャットが常に入っているので、友達と遊ぶと楽しいです。
操作系は固定された(車)椅子に座って、左手が前進後退レバーで右手が常時給電しているHTC Vive のコントローラを懐中電灯に見立ててプレイ。

このコンテンツは技術的なところよりも、演出がとても良く出来ています。描画品質も一番高かったかもしれません。閉所と暗闇はレンダリングの親友!

Train Meister

単純に出来が良かったのと、僕はあまり鉄道に詳しくないのであまり記憶には残らず…
終了時に講評が出たり、チュートリアルが丁寧だったり、前述の揺れるシートを使っていたりで、良い仕事されているなあ…このまますぐに売れるなあ…という気持ち。

リアルドライブ

このコンテンツはHMDではなく、視野ほぼ180度を覆うプロジェクタとドームスクリーン。いわゆる手堅く動いていました。おそらく近いうちに全国のゲームセンターで稼働するのではないでしょうか。
描画品質的にはAsset Corsaとかを想定していましたが、もう少しトラディショナルな描画でした。おそらくATモードを選んだ方が普通の人は楽しめるのではないでしょうか。 これも良い感じに椅子が動いて楽しいです。

HTC Vive届いた&お出かけセット仕立てた

概要

HTC Vive製品版が無事届きました。

箱は結構大きいので、お外に持ち運べるように機材を追加購入しました。

お出かけセット

こんな感じです。

コンセプトとしては「Viveは手持ちのバッグ、PC類と三脚はバックパックに詰めて運べる」という感じです。
ちゃんとするならペリカンケースさんとかが良いですが、アルミケースに入れておくだけでも多少の雨や衝撃に安心感が違います。

以下の物を揃えても15000円程度で収まります。

SK11 アルミケース これのAT-15S (内寸の高さがちょうどヘッドセット部分とピッタリで、さらに安い) www.amazon.co.jp

中身のウレタン

これのブロックタイプ60mmと30mm。ブロックタイプの物は、自分でチギって好きな形状に出来ます。 (ちょっとフニャフニャなので、気になる方はもっと高くて丈夫なハードウレタン製とかをハンズで探すと良いかも) www.amazon.co.jp

三脚

ETSUMI ライトスタンドM ETM-83763 (このライトスタンドは展開時高さ2mまで上げられて、重さ1kg程度で軽い) www.amazon.co.jp

雲台

HAKUBA 自由雲台 BH-1(軽くても、ベースステーションをガッチリホールドしてくれます) www.amazon.co.jp

あとは、僕の趣味ですがコントローラの充電機が嵩張るので、標準のAC-USBアダプタとケーブルではなく、このセットを使っています。

AC-USBアダプタ

(コンセントの差込口を畳めるので好き) www.amazon.co.jp

安いケーブル

www.amazon.co.jp

コンパクトに収納して持ち運べると、いろんな人に見せられますよね!

他、小ネタ

Steam自動起動が面倒くさい

HTC ViveでSteam立ち上げてVR選んでヒョンヒョンと認識させるのが面倒くさいので
"C:\Program Files (x86)\Steam\steamapps\common\SteamVR\tools\bin\win32\vrmonitor.exe"
をスタートアップに追加。Steamの自動起動を無効化すると、PC立ち上げたらそのままヘッドセットの認識が走ります。

ヘッドセットに追加パーツ付けたい

便利そうな場所にUSB3.0ポートがありました!