安い防犯カメラは買えるが、その映像がどこへ行くかは買った側にはわからない。「ローカルで完結する」とうたう製品でも、確かめる手段がない。Clem Mayer氏は、それなら自分で作るしかないと考え、映像が外に出ない防犯カメラを一から組み上げた。Element14 Presentsで制作の過程を公開し、基板データとコードも無料で配布している。
土台に選んだのはRaspberry Piではなく、BeagleBoardの「PocketBeagle 2」だ。同氏は、ラズパイほど扱いやすくはないが、その代わりに融通が利くと説明する。決め手は3つある。電源まわりの管理を内蔵しており、電源を切り替えても動き続けること。GPIOのピンにUSBが出ていること。そして起動が数秒で終わることだ。
ただしPocketBeagle 2はネットワークを内蔵せず、USBの口も限られる。カメラとストレージ、通信をまとめてつなぐには足りない。そこで同氏は、MicrochipのUSB2514を載せた4ポートのUSBハブを、カスタム基板に組み込んだ。基板には電源の分配とバッテリーのバックアップ、拡張用の端子も載せた。
このハブで苦労した。以前に同じ設計で失敗しており、原因は水晶とその負荷容量にあった。今回は既製の発振器で逃げるつもりが、注文したのは5V品だった。試すと3.3Vでも24MHzの波形は出たものの、データシートを読むとUSB2514が求める入力の電圧はもっと低い。そのまま挿せばチップを焼くところだった。土壇場で従来どおりの水晶とコンデンサーの構成に戻したが、計算上必要な12pFの手持ちがなく、10pFで配線側の浮遊容量に賭けて動かした。
筐体は防水のHammond製アルミケースを使い、前面ガラスと首振りのアームはダミーの防犯カメラから外して流用した。カメラを固定するブラケットは3Dプリンターで作る。試作はPETGで確かめ、本番は黒のASAにした。密閉した中に計算機が入るため内部は熱くなるが、ASAなら垂れない。ヒートシンクは熱伝導グリスでアルミ筐体につなぎ、ケース全体を放熱板として使う。冬はその熱が前面ガラスの霜を防ぐ。
つまずきは電源だった。ネットワークが不定期に切れる症状が長く取れず、通信の設定を疑い続けたが、原因は電圧の降下にあった。高負荷時に0.1Vだけ落ち、PocketBeagle 2が止まる4.8Vをわずかに下回っていた。出力を細かく調整できる電源だったため、最低で4.99V、待機時に5.04Vへ合わせ込むと症状は消えた。電源は壁の向こうの自作の箱に置き、その中にUSBの口を足して通信機器を挿す。カメラ本体に手が届いても、ネットワークには触れない。
ソフトはPythonで書いたWebサーバーで、OpenCVと軽量なニューラルネットワークを本体上で動かす。人が写ったら録画を始め、いなくなって数秒たてば止める。映像は本体に残り、72時間で自動的に消える。足りなければ内側のUSBにメモリーを挿して延ばせる。検知の精度を優先し、フレームレートは落として解像度を上げた。誰が写っているかが分かることが重要だからだ。