USBitをWebブラウザから遠隔操作する
       
 

●USBitは、PCからリモコンのミニカーを制御できるcanopus社のおもちゃです。
PCからはVisual Basicなどで作ったプログラムを使って、さまざまな命令を送ることができます。
今回、USBitをインターネットを経由してユーザーのWebブラウザから操作し、その様子をブラウザのビデオ画面で確認できるシステムを作成しました。以下はその顛末です。

なお、同様の実験を植木友浩さんが先駆者としてやっておられます。http://playon.jp/mm/remote/
今回のこのプロジェクトは、植木さんのサイトに触発され、また植木さんから助言などいただきながら作成しました。

●現在停止中●

   
       

1)USBitの購入

canopus社のサイトからUSBitを通販で購入。数日後に到着。http://www.canopus.co.jp/catalog/usbit/usbit_index.htm

 

 

 

2)USBitの組み立て USBitはミニカー、リモコン、PCに接続するUSBコネクタを持った基板、CD-ROMで構成されています。
ミニカー、リモコンはそのまま使えますが、基板は自分で組み立てる必要があります。
組み立てには、はんだごてが必要になります。抵抗、コイル、トランジスタ、コンデンサといった電子部品を基板にはんだづけしていきます。
その際、初めに部品を全部種類分けして、整理しておくと、はんだづけするとき間違えなくてすみます。
 
3)USBitドライバーのインストール 説明書にしたがい、CD-ROMからドライバをインストールします。これはWindows版のみです。    
4)基板をPCに接続し、動作のテスト PCのUSBコネクタに基板のUSBコネクタを接続します。
CD-ROMにミニカーをリモートで制御できるサンプルのアプリケーションがあるので、それをPCにコピーして動作するかテストします。基板が正しく作られていると動作します。
 
5)システムを考える

今回は、ユーザーのWebブラウザ上で、方向のボタンをクリックすると、リモートのミニカーが動き、その様子をブラウザの画面にビデオ画像として表示させます。

システムとしては、
a)ユーザーインターフェイスとしてのFlashファイル(SWF)
b)ミニカーに命令を送るVisual Basic(VB)アプリケーション
c)a)からの命令をVBに伝える、仲介役のSWF
d)ビデオ画像を読み取る専門のSWF が要ります。
さらに、
e)WindowsのWebサーバー
f)Flash Communication Server が要ります。
e)は、VBアプリケーションをサーバー内で起動、動作させますので、いわゆるレンタルサーバーでなく、自前で立ち上げます。f)は、a)、b)、c)、d)の仲介役を果たすほか、ビデオ画像の配信、チャット掲示板の管理を行います。


   
 

   
6)VBプログラムをいじる

付属のCD-ROMについているサンプルプログラムのVisual Basic 6版のソースファイルをVisual Vasic.NETで開き、中身を解読します。VB上でボタンのクリックで出される命令を、Flash側から出して、それをVBに伝えるようにします。
VBはSWFをActive Xというコンポーネントで読み込めるので、受信用のSWFを作成し、こいつにfscommand()でVBに命令を送るようにします。
<VBにSWFを読み込む>
Call ShockwaveFlash1.LoadMovie(0, "D:\Inetpub\wwwroot\flashcom\applications\usbit\rF.swf")
<SWFからのfscommandを実行するVBの関数>
Private Sub ShockwaveFlash1_FSCommand(ByVal sender As System.Object, ByVal e As AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEvent) Handles ShockwaveFlash1.FSCommand
' MessageBox.Show(e.args)
'MessageBox.Show(e.command)
Select Case e.command
Case "goForward"
obj.Forward(Param:=BOOST)
CMD = 11
Case "goRight"
obj.Right(Param:=BOOST)
CMD = 14
以下略...

 

 
7)SWFの作成

.SWFは、VBに読み込むSWF、ユーザーインターフェイスのSWF、カメラで画像を取りパブリッシュするSWFの3つを作成します。
インターフェイスSWFで出された命令(例えばgoForward)は、FCSを介して、VBに読み込んだSWFに伝えられ、そのSWFはfscommand()でVBに命令を送ります。

//VBに読み込まれるSWF
vb_nc = new NetConnection();
vb_nc.onStatus = function(info) {
if (info.code == "NetConnection.Connect.Success") {
textArea.text = "接続成功";
} else {
textArea.text = "接続失敗";
}
};
vb_nc.connect("rtmp:/usbit", "vb");
//sendSWFから送られてくるcommandとargsをVBに送る
//車が動きっぱなしになるので、0.3秒後に止める
vb_nc.goDir = function(dir) {
fscommand(dir, "");
stopTimerID = setInterval(doStop, 300);
textArea.text = dir;
};
インターフェイスSWFでは、

this.stop();
//receiveSWFへ命令を送るボタン
if (nc.isConnected) {
forward_btn.onPress = function() {
textArea.text = "go forward ! ";
nc.call("goDir", null, "goForward");
denpa_mc.play();
};
のようにして、FCSへ"goDir"関数をパラメータ"goForward"で実行するように送信しています。

 

 
8)FCSの設定

今回のポイントの1つである、FCSではサーバーサイド・スクリプトが活躍しています。
アクセスしてきたユーザーの接続許可や、チャット掲示板機能などの管理のほか、SWF同士の通信の仲介を行っています。
<VB内に読み込んだSWFに命令を伝えるサーバーサイド・スクリプト>
Client.prototype.goDir=function(dir){
VBclient.call("goDir",null,dir)
};

 

   
9)サーバーの設定

8)までで開発段階は終了します。ここからは、インターネット上に公開するWebサーバーとFCSを設定していきます。
WindowsサーバーにはWindows2000Serverを使用し、FCSはパーソナル版を使用しています。
また、ダイナミックDNSを利用するために、ddo.jpに申し込みをします。
ルーターも、ポートフォワーディングが実行できるように設定します。

 

   
10)ミニカーの有線化 USBit付属のミニカーは、バッテリーに充電するようになっています。付属のコントローラで動かすにはその方が便利なのですが、今回は常にシステムを稼動させていたいので、稼働時間を長くするため、電池とミニカーを電線で直結しました。
ミニカーの腹の電極に電線をはんだづけし、コントローラを分解して、電池ボックスを取り出し、長くて軽い電線でミニカーとつなげました。接続部分ははんだづけし、チューブで覆い、さらにテスターで通電テストも行いました。このあたりは植木さんのアドバイスを参考にしています。ミニカーと電池を最終的に接続する際には、プラスとマイナスがあるので、動作する方を接続します。

 

 
11)ほぼ完成 USBitのキットが届いてから約2週間で、ほぼ完成しました。
カメラの性能がよくないので画像が汚く、まだミニカーの動ける範囲も小さいですが、動作します。
また、あまり動作がつづくと、ミニカー自体がへたばってくるようです。
 
       
Thanks to 植木友浩さん(http://playon.jp/mm/remote/    
参考文献 ・Visual Basic.NET実践講座(日経BPソフトプレス)
・続Flash ActionScriptバイブル(オーム社)
・Programming Flash Communication Server(アメリカO'Reilly社)
・安全自宅サーバー活用ガイドブック(翔泳社)