USBセンサを使ってみよう 〜Phidgets活用講座 概要編 (3)〜 |
作成日: 2006/7/6 最終更新日: 2008/10/19 |
概要 | |
このページの内容は,Software Design 2005年12月号 pp.114-121に掲載された, 「USBセンサを使ってみよう Phidgets活用講座(1)」をHTML化したものです.分量が多いため,三つのページに分割してあります. ここでは,PhidgetServerの詳細仕様について紹介し,その応用例として,物理的なつまみを用いてWindows PCの音量調節を行うことができるシステム「PhidgetVolume」について説明します.USBセンサを使ってみよう(PhidgetServer編)も参考にしてください. ※新しいPhidgetデバイスやドライバに対応したPhidgetServer2.0を公開しました.(2008/10/19) |
|
連載目次 |
|
PhidgetServerの詳細と応用 | |
1. 通信仕様 | |
ここでは,PhidgetServerの詳細な通信仕様を説明します.まず,基本仕様は以下のようになります.
|
|
次に,各コマンドの構成は,以下のようになります.
<CommandType>,<PhidgetType>[,<CommandSubType>][,<Port>],<Data>
|
|
PhidgetServer→クライアントへ送信するコマンドは,以下のようになります.
|
|
クライアント→PhidgetServerへ送信するコマンドは,以下のようになります.
|
|
最後に,クライアント→PhidgetServerにコマンドを送信する際の注意事項として,以下のような点が挙げられます.
|
|
2. PhidgetServerの活用例 | ||
ここでは,PhidgetServerの簡単な活用例として,PhidgetVolumeというシステムを製作してみます.PhidgetVolumeは,物理的なつまみを用いて,Windows PCの音量調節を行うことができます(図9). ここでは,PhidgetVolumeのハードウェア/ソフトウェアについて説明します. | ||
|
||
PhidgetVolumeのハードウェア | ||
PhidgetVolumeのハードウェアは,Windows PC,InterfaceKit,可変抵抗(つまみ),及びUSBケーブルの4点から構成されます. つまみはぷらっとホームで販売されているInterfaceKit Packageには標準で含まれており,Phidgetsの公式サイトでも7CDNと安価に購入できます. つまみをInterfaceKitのポート0に接続し,InterfaceKitとPCをUSBケーブルで接続するだけで,ハードウェアの準備は完了です. |
||
PhidgetVolumeのソフトウェア | ||
PhidgetVolumeのソフトウェアは,PhidgetServerに接続するTCPクライアントとして,Rubyを用いて記述しています.ソフトウェアは,こちらからダウンロード可能です.ここでは,ソースコードの主要部分を参照しながら,PhidgetVolumeの処理の流れについて簡単に説明します. | ||
1. PhidgetServerへの接続 | ||
TCPSocketクラスを用いて,PhidgetServerに接続します. require "socket" def main socket = TCPSocket.new("127.0.0.1", 4321) while line = gets parse(line.chomp) end socket.close end |
||
2. 受信したコマンドを解析 | ||
次に,受信したコマンドを解析し,つまみの状態を検出します.
解析対象のコマンドは,
というフォーマットになるため,以下のようなコードで[XXX]に代入される 数値を取得します. def parse(line) args = line.split(",") if args[0] == "In" and args[1] == "InterfaceKit" and args[2] == "Analog" case args[3] when "0" level = args[4].to_i set_volume(level) end end end |
||
3. 音量を変更 | ||
最後に,取得した数値(=つまみの状態)をもとに,PCの音量を変更します. 音量の変更には,"MSWebDVD.MSWebDVD"というCOMオブジェクトを利用しています. require 'win32ole' VOLUME_MIN = -10000 VOLUME_MAX = 0 LEVEL_MAX = 1024 LEVEL_ADJ = 10 @dvd = WIN32OLE.new('MSWebDVD.MSWebDVD.1') def set_volume(level) volume = (level - LEVEL_MAX) * LEVEL_ADJ volume = [VOLUME_MIN, volume].min volume = [VOLUME_MAX, volume].max @dvd.Volume = volume end |
||
コラム2 PowerMateとPhidgetVolume | ||
つまみ型の外部デバイスとしては,Griffin Technology社のPowerMateが有名です. PhidgetVolumeは手作り感あふれる外見で味はありますが,PowerMateのようなクールな質感もやはり捨てがたいものです. そこで,ブロンズ製の高級オーディオつまみ(秋葉原の千石電商にて約1500円で購入)をPhidgetVolumeの可変抵抗に取り付けてみました(図10). こうしたちょっとした工夫をするだけで,PowerMateにも負けない(?)クールなデバイスに見える,かもしれません. |
||
|
||
本稿では,PCから手軽に利用できるUSB接続のセンサー/アクチュエータ群,Phidgetsの概要と,Phidgetsをさまざまな言語から手軽に扱うことができるPhidgetServerというソフトウェアについて紹介しました. さらに,PhidgetServerのシンプルな活用例として,PhidgetsのつまみでPCの音量を制御できる,PhidgetVolumeというアプリケーションを紹介しました. このように,PhidgetServerを利用すれば,RubyやFlashなどのさまざまな言語から容易にPhidgetデバイスを制御することが可能になります. 次回以降は,日曜ユビキタス環境の実現に向けて,PhidgetServerを用いたより実践的なシステムの構築について紹介していく予定です. |
[デバイスぶらり旅]