クワマイでもできる

クワマイでもわかる

VRChatからリアル扇風機を動かす

f:id:kuwamai:20181023195819j:plain VRChatからリアル側にアクションを起こせたら面白そう。今回は縁があってタナベさん、いくこさんとVRChat上のボタンからリアルの扇風機を動かすことができた。っていう思い出記事を2018年9月10日に書いたのに下書きのまま放置してたので供養します。

できたもの

きっかけ

VRChatからラジコンを操作する

以前オフ会の余興としてパノラマカメラでリアル会場の様子をVRChatから見つつラジコンを操作する取り組みがあった。この時点ですでにカオス。

ラジコンと大きいバッテリーと回路が揃うと気分はテロリストだった。

この時はまだWebpanelがあったので、いくこさんが用意してくださったサーバを経由してVRChatからラジコンを操作することができた。ちなみに僕はサーバから受け取った信号を元にラジコンを制御するコードと回路を教えていただきながら作ってた。ラジコンの制御回路については、趣味でラジコンやってるれいちゃんさんに教えてもらいながらできた。

しかしWebpanelは死んだ。他の方法が必要になった。

制作の記録

全体の構成

f:id:kuwamai:20191216015740j:plain

センサを用いてVRChatの画面の明るさを取得し、明るさに応じてアクションを起こす仕組み。例えばスイッチを押すと白→黒に変化するオブジェクトがあれば、センサの値が変化するので、VRChat上のスイッチ入力がリアルで検知できる。

ちなみに元ネタはこちら。

回路図

f:id:kuwamai:20191216022234p:plain

Arduino UNOにセンサのCdSセルと、動かす対象のサーボモータを接続した。お蕎麦屋さんにモータドライバがなかったため、冒頭の動画はサーボでスイッチを押す方式にしている。逆に他の電子部品がお蕎麦屋さんに揃っていることが驚きである。

プログラム

こんなプログラムを書いた。myservo.write()が書かれている部分にそれぞれ明るくなったときと暗くなったときに実行したい処理を書く。

#include <Servo.h>

Servo myservo;
int cds_pin = 0;
int servo_pin = 3;
int val = 0;

void setup() {
  myservo.attach(servo_pin);
  Serial.begin(9600);
}

void loop() {
  val = analogRead(cds_pin);
  Serial.println(val);

  if(val >= 350){
    //明るくなったときの処理
    myservo.write(90);
  }else{
    //暗くなったときの処理
    myservo.write(0);
  }

  delay(100);
}

あまりオススメはしない

f:id:kuwamai:20191216023436j:plain

ディスプレイにセンサを貼り付ける時点で相当不格好だし、ディスプレイの輝度設定や周囲の明るさの影響を受けやすい。大人しく画面の色を取得するなんらかのプログラムを使うことをオススメします。

VR蕎麦屋アドベントカレンダー

本記事はVR蕎麦屋アドベントカレンダーに登録されています。長らく下書きだった記事を書き上げるきっかけをくださりありがとうございます。