ヨーキョクデイ

100% pure impurities, which may imply some value. (j は虚数単位)

mbed で Eject-io っぽいのを実装して、mbed な踏切を動かす

www.adventar.org

Eject Advent Calendar 2015 の 14 日目。

Eject-io とは 2 年前に登場した次世代 I/O I/F であるらしい。

この Eject-io を模したシステムを mbed LPC1768(青 mbed)で作ったわけだ。eject コマンドのようなものを自力で再実装していたら、eject 対象のデバイスも自作したいよねということになったのがきっかけ。

本家のように、USB マスストレージクラス、特に USB 接続の CD-ROM ドライブとしてふるまい、パソコンなんかに接続して eject したりできるものだ。これの実装は既存プログラムの改変だ。

この USB MSC の実装をベースに CD-ROM ドライブとしてふるまうように最低限のコマンドを実装したりいらないものを削ったりしている。ソースは見せられないよ!

このために USB の B コネクタ(メス)が必要になったので買った。

www.switch-science.com

で、この Eject-io っぽいのは 1 ビットの状態を持っていて、それは論理トレイの論理開閉状態であって、論理オープン状態であれば出力ピン(ディジタル出力)が Hi に、論理クローズ状態であれば Low となる仕様である。

eject コマンドの先には物理トレイによる運動エネルギを与えるブラックボックス(物理ドライブ)が直結するわけではなく、電気的な装置があってもいいのだ。さらにその先に今までのように任意の装置を接続すればよいというのが Eject-io の根本的なアイディアだと思う。

これが最小構成の画像。
f:id:electrolysis:20151214171235j:plain

Windows 10 が認識するとこうなる。
f:id:electrolysis:20151214180636p:plain

eject コマンドで遊ぶのは手段であって目的ではないので、これを間違えると eject おじさんが憤慨するらしい。いわゆる Before Eject まででは満足しない。

ところで、以前 mbed で作った踏切のプロトタイプがある。踏切好きが高じた結果だ。そもそもこのために mbed を買った気がする。

これは踏切警報器(警報灯と警報音発生器のセット)のような何かと遮断機ような何かからなる。警報灯は LED(ディジタル出力)、警報音はライン出力あるいはアンプ経由でスピーカ(富豪的にリアルタイムで波形を作ってアナログ出力)、遮断機は RC サーボという具合だ。これをタクトスイッチ経由でオンオフさせる仕組みだ。こだわりがいろいろとあるが、詳しく書くと長くなるのでやめる。

でだ。ここからが After Eject の話である。

このスイッチを撤去し、Eject-io っぽいのの出力によってスイッチングできれば最高ではないかと思うわけである。物理スイッチを手で押す代わりに、パソコンからコマンド一発で制御できるのだ。

この Eject-io っぽいのの出力ピンを mbed 踏切のピン変化割り込みな入力ピンに繋いで、Low -> Hi、すなわち論理トレイの論理オープンで踏切が閉まり、その逆で踏切が開くというシステムを作ってみたのがこの動画だ。