■食材は日常的に買うわけですが、意外とダブったり、買い忘れがあったりする。ダブりも買い忘れも、無駄な在庫につながるものなので、できれば避けたい。買い物に行くときに、冷蔵庫の中の写真がメールされてくるといいよねえ、という話があって、じゃあ作って見ましょうか、ということになった。
基本的な構成は単純で、Webカムで冷蔵庫の中を撮影し、携帯へメールする。Webカムで定時撮影するアプリはありふれているし、メール送信機能を持つものも珍しくはない。ただ、システムパッケージを作るつもりはなくて、こういう部品を集めて組み上げれば誰でも作れますよ、という実証試験の目的があるので、メール送信くらいはスクリプトで作っておいたほうがいいかもしれない。
ただ、気になっているのは冷蔵庫内に設置したWebカムの画角でカバーできる撮影範囲で、とりあえず画角と最短撮影距離の値を公開しているロジクールから価格とのバランスを見合わせc525を選択。c525は画角60度、最短撮影距離は7センチから。画角が大きいものは他にあり、c920は77度を持っているけど幾分お高い。それに、接写同様の状況では60度も77度もあまり変わらないだろう。とりあえずc525で、ただし、扉を閉めてしまうと内部照明が消えてしまうのでLED電灯を点灯したまま内部に入れて光源としました。

それなりに写っているように見えますが、この時の庫内の実情と比べると、殆ど写し撮られていないことが解ります。
右側のビン類は全く写っていないし、下の段はまったく絵に入っていません。庫内にフィックスしたカメラで全域をカバーするには各段に2つカメラが必要になりそうです。魚眼レンズが使えれば状況は変わりますが、それでも庫内にモノがぎっしり詰め込まれた場合、見通しが全く確保できなくなることは想像がつきます。
もう少し引いた状態で、ちょうど開けた時の扉の位置で撮影できるとカバー範囲の都合が良さそうです。つまり、扉を開いたことをトリガとして撮影すればいい。ただ、そうするとPCだけでは無理なので、外付けのデバイスが必要になります。いわゆるフィジカルコンピューティングの登場です。
トリガには磁気リードスイッチを使い、そのオンオフ状態をAVRで直接検知させます。PCとデバイスはおなじみのFTDIデバイスでUART通信を使います。扉開放から撮影まであまり間がないことが想定されるため、すでにある無線インフラのZBeeネットワークには乗せず、有線とします。
撮影処理そのものも問題で、簡易に作りあげるためコマンドラインで撮影できるツールが必要でした。探したところ、WebcamTimershotというツールがベータ版ながらうってつけ。MicrosftからリリースされたWebcam Timershot PowerToyとは別モノです。
PC側ではアラートを受けてWebcamTimershotを起動するアプリが必要で、これはVBで作成。シリアル通信が必要ですが、複雑な通信は不要で、PC側からセンシング開始のトリガ送信と、デバイスからのアラート文字列受信、コマンド起動のサイクルを繰り返すだけです。
ちょっと面倒だったのはWebcamTimershotの作成ファイルが日時日付ごとにきれいに分類されたフォルダ構成の下に作成されてしまうことで、それをやられるとメール送信でファイルを探すのが面倒なので、撮影のたびに作成されたファイルをムーブするようにしましたが、ムーブせずに蓄積するのもそれはそれでありかもしれません。このあたりの実装は工夫の幅がありそうです。
デバイスはとりあえずブレッドボードで組みました。リードスイッチは庫内に、マグネットを扉に取り付け開閉を感知できるようにし、Webカムは扉の内側に。撮影動作の確認と、写真が庫内状況をフォローできていることも確認できました。ただ、扉は動くものと、常に同じ開放位置にくるわけではないので、撮影タイミングの取り方など、実装面で課題はあります。

写真が天地逆なのは扉の内側に組み付ける都合で、さかさまに設営されたからです。