Award最優秀賞受賞エンカフェというエンジニアのためのSNSを中心に開催されたエンジニアのアワードに参加しました。8/2に入賞者の発表と授賞式があったわけですが、無事ハード部門の最優秀賞を受賞することが出来ました。久々の表彰状もらっちゃいました。トロフィーってのは人生初ですね。カップはありましたけどね。それは、昔懐かしい予備校時代に模試で全国3位になってもらいました。どっかに取ってあるんじゃないかなぁ。戸棚に入ってました〜。古いものだけになんか重厚感が違いますねぇ。参加者も多いんだしこっちの方が栄冠だったのかなぁ〜。(^^;ま、それはさておき、残念ながらトロフィーはもらっちゃえるわけではなくて、次回までのお預かりらしいです。Award最優秀賞としか書いてないです。それにしても、賞金なんてもらったのは初めてかな。ビンゴ大会でなんかあたったって程度かもしれませんわ。言うことで、何を作ったの?って疑問に思われることでしょうが、けっこう説明はややこしくなっちゃうんですよねぇ。なんとか頑張って説明するので、少々お付き合いください。エンジニアアワードの参加部門の説明から始めないといけません。今回は、大きく分けてソフト部門とハード部門がありました。ソフト部門の課題はOpenPNEというオープンソースSNSシステムで動くアドオンが課題です。OpenPNEはアワードの主催でもあるencafeでも使われているオープンソースのSNSシステムです。SNSの画面で他のサービスを覗けるというイメージからか、アドオンには小窓という呼び名がついています。ハード部門は、トランジスタ技術がスポンサーについているので、それの付録基板を使った制作という条件がついていました。こちらは何を作るのかは自由でした。OpenDMPPというオープンハードウェアを使った部門というのもありました。こちらはMIPSコア400MHzでLinuxが走るボードです。2のデコードを数本同時にやったり、エンコードも出来たりと、その辺のHDDレコーダくらいは出来てしまう実力のあるボードです。DMPP向けのハード/ソフトを組むとなるとちょっと時間がかかりそうなので、締め切りまでの時間を考えると無理そうです。半年くらいあれば考えたんですがねぇ。いうことで、せっかくなんでソフト部門とハード部門の両方に参加することにしました。それぞれの作品が連携したら面白いだろうということで、そういうものを考えました。これなら両者の枠の中で出来るものからは逸脱するようなものが出来そうで、受賞機会もあがりそうです。ソフト/ハードの連携ということで、OpenPNEというモニタの中の仮想コミュニケーション空間と、ハードウェアが存在する実世界とをつなぐコミュニケーションをテーマにしました。ハードの方ではそれほど凝ったことも出来ませんから、比較的単純なメッセージを伝えるようなものにします。ここで文字を出しても同じく液晶画面の中の世界という感じになってしまうので、文字によるコミュニケーションではなくて、光と動き、単純な音などでの伝達ということにします。いうことで、まさにそれはアンビエントデバイスと言えるようなものになります。アンビエントデバイスは以前から一つ作ろうと思っていたネタなので、材料はいくつか買ってありまして、こんなランプシェードも100円ショップで見つけた時に買ってあったのでした。右の写真が光った状態です。うまく写真撮るの難しくて、ちょっと手ぶれってますが、縮小したので少しはごまかせてますかね。暗いともっとキレイに光るんですが下半分には陰が出来ちゃうのは玉に傷ですね。上に反射鏡でも置いた方が良いかもしれません。システムの全体像を知るためにはまずはソフト部門の作品について説明しないといけません。ソフト部門はOpenPNEの小窓ということですから、小窓の製作をしました。scriptのファイルで作ります。これをOpenPNEの特定のフォルダに入れるとシステムに認識されて、OpenPNEのあちこちから使えるようになります。小窓には2種類あって、通常形式とURL2CMD小窓があります。sctiptファイル名">という形式で書き込んでおくと、この部分が小窓と入れ替わって表示されます。URL2CMD形式にしておくと、通常のurlが自動的に小窓に変換されて表示されます。tubeのURLが自動的にエンベッドされるのを見たことがあるんじゃないですかね。あれがURL2CMDですね。今回はあまり勝手に変換されない方がいいかなぁと思いまして、通常形式を選択しました。appletで作られているUI部分が出ています。この部分が小窓と言うことになります。ここのボタンを押すと、すぐ下のグラフに反映され、提灯が接続されていた場合にはそれが光ると言うことになります。この小窓と提灯を結んでいるのが中間サーバーと言われるもので、rubyを使って書きました。アプレットからのコマンドを受け付けて、提灯側に中継します。グラフのデータを管理する機能も持っています。1.8にはgserverというクラスが標準で備わっているので、非常に簡単に作ることが出来ました。提灯の内部はこんな風になっています。トラ技付録基板を使う規程だったので、2007年8月号の付録のdsPIC基板をメインに使ってあります。dsPICにはMicrochipのTCP/IPプロトコルスタックがあるので、これを使いたいところだったんですが、Flashが全然足りなさそうなので、仕方ないのでXPortをつかってTCPをしゃべらせています。オーナーが提灯のそばに居て点滅が目に入るかどうかを表示してあげるために、マイクロ波を使った動体検知センサを使っています。真ん中の基板がセンサ基板で、右の写真がアンテナ部分です。(発振器なんかも中に入ってるハズですが)ブロックダイアグラムは以下の通りです。XPortだけが3.3V電源でその他が5Vなので、レベル変換のために74HC14を入れてあります。tolerantなので、5V出力のI/Oはそのまま入れても大丈夫です。マイコンからXPortを制御しているのは、サーバーへのTCPコネクションの接続/切断のみです。XPortの設定でI/OピンでTCPコネクションをコントロールできるようにしてあります。ある程度の時間動体が検知ができない場合にはオーナー不在と言うことで、TCPの接続を切断します。Appletの左下のアイコンで表示されます。これが緑のチェックマークなら繋がっている状態、赤い進入禁止標識みたいなアイコンなら切れていることを示します。ちなみに、動体センサ基板からの線もHC14を通っているのは、検知モニタ用のLEDのドライブ回路から引っ張ってきているのでレベルが中途半端になってしまうからです。中間サーバーからの指令をXPortがシリアルに変換してdsPICに伝え、それを解釈してLEDを光らせます。LED基板部分はこの通り。光を拡散させるためのカバーを外すと、いつもの通り切削で作った基板にLEDが乗っています。アンビエントデバイスらしくボワ〜〜ッと点滅させるために、LEDはPWM制御で点灯させるわけですが、そんなにPWM速度も速い必要はないので今回はハードウェアカウンターは使わずにソフトウェアループで生成しています。I/Oピンからの出力でLEDを点灯させるために、LED基板にはデジタルトランジスタを乗せてあります。言うわけで、先日からStickcamで作品の公開を始めてみました〜。Stickcamの使い方も分かってきたので、こちらにも貼り付けてみます。Communcationを図るものですが、別にblogでも使えるように設置は出来るので、試しやすいようにこちらにも貼り付けておきます。公開専用に1台マシンを用意すればいいんでしょうが、なかなかそうもいかないのでメインのマシンがお休みやお出かけ等諸事情がある際にはライブは中断していると思います。ま、中継されている時には適当に遊んでみてください。