たぎる血を抑えて、まずはHMDを改造!
まずはHMDの調達だ。
実は「Oculus Rift」を持っているのだが、パージして落っことして壊れたらイヤだな……と思って、めちゃくちゃ安いのを買って試した。諸君らは、ぜひ高額なHMDで試していただきたい(自己責任でお願いします!)。
スマホを中に入れて使うタイプで、ちなみにお値段は……
「Oculus Rift」1台の値段で、これが30台は買えるくらい。
どのHMDも、たいていはマジックテープを使って頭に固定する。この部分を改造することにしよう。
HMDが外れる仕組みには、サーボモーターを使った。
サーボモーターは、一定の角度で固定できるモーターだ。マジックテープを外し、代わりに針金でサーボモーターを固定。
ワイルドだろ?
両サイドに付けるとさらにワイルドな見た目になったが、気にしてはいけない。強制パージシステムのためだ。
この先端にフックを引っかけ、「ゴムひも」で頭と固定できるようにするのだ。
モーターが回ると……
ゴムに引っ張られて、このように外れる! という寸法だ。
ほとばしるパトスを抑えて、基板にプログラムを記述!
外れる仕組みはできた。次は、これをどうやって動かすか。
あとで書くが、ドアには開閉を検知するセンサーを付ける。
今はもう21世紀なので、ドアとHMDの間は自由にしておくのは当然。ドアとHMDがヒモで繋がっているとかナンセンスだ。というわけで、ドアが開いたことが無線でHMDに伝わるようにしたい。
そこで、こんなものを使うことにした。
「ESP-WROOM-02」という基板だ。
最近、電子工作をする人がよく使うArduino【※】に準拠したもので、さらにWi-Fiが搭載されている優れモノだ。しかも、秋月電子から650円で売られているのだ。激安である。
これを使えば、無線通信が手軽にできるのだ。
※Arduino
いわゆるむき出しの基板に電子部品と最低限の入出力装置を付けただけの、簡素なマイクロコンピューターのこと。
……まぁ、実を言うと、この「ESP-WROOM-02」は、スイッチサイエンスが出しているバージョンの方が簡単に使えたり、さらに後継機の「ESP32」には、Wi-FiだけでなくBluetoothも載っていて人気だったりするのだが、これらは1500〜2000円くらいする。
HMDと同様、やはり安い方が壊れたときの懐のダメージが少ないので、こちらにした次第だ。安い分、面倒な点があって、プログラムを書き込むためにいくつか準備が必要になる。
不安な人は、上に挙げた「ESP-WROOM-02」か「ESP32」を選ぶと良いだろう。
ちなみに、書き込むための手順をまとめていたが、あまりに真面目な内容になってしまったので、「あれ? コレ読んでくれる人いる?」と不安になってしまった。なもので、最後におまけとして載せることにした。興味がある人はあとで見てほしい。
脈打つ鼓動を抑えて、仕組みを解説!
で、だ。この基板にはWi-Fiが載っているので、こういうことができる。
「モーターを○度回転させる」というURLを決めておいて、ブラウザでアクセスすると、それだけでモーターの制御ができるのだ。
離れているモノを操作できる。これはかなり面白い。モーターを回すだけではなくて、もちろん“LEDを光らせる”なんてことだってできる。
これを行うプログラムはこちら。けっこう長いのだが、快適な環境を手に入れたいなら、ブラウザバックはせずに下までスクロールしてもらいたい。
実際に手を入れたトコロは少ないのでご安心を。
はい、ここまでスクロールしてくださり、ありがとうございます。
このコード自体は「mDNS_Web_Server」というサンプルコードを少し改造したものだ。
Arduino IDEのスケッチ例から、「ESP8266mDNS」→「mDNS_Web_Server」と選択すると表示される。
デフォルトであれば、「ESP-WROOM-02」を起動するとIPアドレスが振られるので、「http://192.168.xxx.xxx/」のようなURLにアクセスすれば良いのだが、わかりづらいのでmDNSという機能【※】を使っている。
※mDNS
ローカルネットワーク内の機器を自動的に発見するための仕組み。
これを使うと、「http://esp8266.local/」というURLでアクセスできるようになるのだ。IPアドレスが変わっても、このURLは変わらず有効になるので便利なのである。
ちなみに「esp8266」の部分は、上のコードの43行目で設定している。
ここから、コードを修正したところを中心に、軽く説明しておこう。
まず、家のWi-Fiなど、接続したいネットワークのSSIDとパスワードを6行目と7行目に設定しておこう。
サーボモーターは2つあるので、17、18行目で「IO12ピン」と「IO14ピン」に接続したことを設定している(回路図は最後のおまけの部分で書いているので、そちらを参照のこと)。
イチバン大事なのは、102〜109行目のところだ。むしろ、ここだけのコードで“URLにアクセスしたらモーターの動作を決める”ことができている。
【今回書いたコード】
・「http://esp8266.local/rotate」にアクセスすると、1番目のサーボモーターを60度に、2つ目を100度に回転(102〜105行目)
・「http://esp8266.local/reverse」にアクセスすると、1番目のサーボモーターを100度に、2つ目を60度に回転(106〜109行目)
この書き方を真似すれば、LEDを点けたりミニ四駆を走らせたりもできるのである。そう思うと、けっこう簡単にできる気がしてこないだろうか。
高ぶる感情を抑えて、ドア感知システムを構築!
HMD側の準備はできた。楽園の完成まであと少し。次はドア側に工作をする。ドアの開閉の検知には「リードスイッチ」を使うのが定番だ。
リードスイッチは、磁石が近づくとONに、離れるとOFFになるスイッチだ。
磁力で制御できるので、モノが近づいたり離れたり、の検知に向いている。
今回は、このスイッチの値を前回でも使った「Raspberry Pi」で読み取り、ドアが開いたら「ESP-WROOM-02」のモーターを回転させるURLにアクセスするようにしてみた。
Raspberry Piとリードスイッチはこんな感じで接続する。片方は5V、もう片方はスイッチの値を読み取るピンに接続した。
そして、Raspberry Piのコードはこちらである。もう少しで完成なので、ぜひスクロールしてほしい!
これも前回同様、Python【※】というプログラミング言語で書いている。
リードスイッチの状態を保持しておいて、前回と今回の値で差があったときにドアが開いたか閉じたかを判定するようにしている(19、23行目)。
そのときに、ESP〜のURLにアクセスしているのだ。Pythonを使うと、URLへのアクセスが簡単に書けるのでオススメだ。
ここまでできると、ドアの開閉に合わせてモーターを回すことができるようになっている。
よし、いい感じ!
もうすぐでできる!!
※Python
1990年代初頭に登場したプログラミング言語。アプリケーションの開発によく用いられ、DropboxやEvernoteにもPythonが使われたとされている。