PHS経由でネットに接続できるEthernetアダプタのファームウェアをハック・後編 ―― 画像付きメールを利用した遠隔監視システムの製作事例
また,一部のカメラ・モジュールの中には,「ディジタル出力」と銘打っているものもあります.しかし,実際には27MHzクロックに同期してYUVデータが洪水のようにどんどん送られてくるので,かなり高い性能を持ったシステムで真剣に画像を受け取らなければ処理しきれません.高速なCPUを使ってもソフトウェアだけで処理するのはかなり難しく,いったん画像データをメモリに格納するハードウェアと組み合わせる必要があります.
組み込み機器で普通に利用されている安価なマイコンを単体で使用し,カメラ画像を扱うのは容易ではありません.扱う画像データの容量と転送速度を下げることにより,この問題を解決することにします.
● JPEGカメラは組み込み機器にうってつけ
今回使用するCOMedia社のカメラ・モジュール「C328-7640」は,OmniVision Technologies社の画像処理専用LSI「OV528」を利用した,カメラ画像を扱えるモジュールです(写真2).
(a)の表側に,30万画素のイメージ・センサが実装されている.リングを調節すると,∞~5cmの範囲でピントが合う.大きさは横20mm,縦28mm.(b)に示す裏側には,OmniVision Technologies社製の画像処理専用LSI「OV528」が実装されている.接続コネクタの信号は,左からVcc(3.3V),Tx,Rx,GND.
モジュールの内部構造は次の通りです.画像メモリとJPEG圧縮プロセッサを内蔵したOV528チップに30万画素の出力センサが直結されており,カメラ・センサから出力されたデータをいったんOV528内の画像メモリに格納します.格納したデータはそのままシリアル・ポート経由で取り出すこともできますが,VGAサイズ(640ピクセル×480ピクセル)の画像だと16ビット・カラーでもデータ・サイズが600Kバイト以上になってしまいます.
生データのままではまだ大きすぎるので,内蔵のJPEG圧縮プロセッサを利用して30Kバイト程度にデータを圧縮します.この程度のサイズになれば,メールに添付したりネットワーク経由で送ったりすることが容易になります.
接続コネクタも極めてシンプルで,3.3V電源とシリアル入出力の4本だけです〔写真2(b)〕.カメラを制御するためにはシリアルでコマンドを送出します.表1に示すコマンドを用いて,以下のように対話的にカメラを制御します.
- SYNCコマンドでカメラを起動してボーレートを確定させる
- Initialコマンドで画面の解像度や色数を設定する
- Snapshotコマンドで写真を撮る
- Get Pictureコマンドで圧縮されたJPEG画像データの送信開始を指示する
- Dataコマンドでカメラから得られる画像データのサイズを把握する
- 設定したサイズ(デフォルトは512バイト)のパケットが送られてくるので,受け取ったらACKコマンドを返す
コマンド | 説 明 |
Initial | カメラの解像度や色数などを設定する |
Get Picture | 画像の転送を開始する |
Snapshot | 現在の画像をバッファに保存する |
Set Packet Size | カメラから転送される画像データのパケット・サイズを指定する |
Set Baudrate | シリアルのボーレートを設定する |
Reset | C328をリセットしてステートをアイドルにする |
Power Off | C328をスリープ・モードにする. SYNCコマンドで復帰する |
Data | カメラから送られる画像データの種類とサイズを取得する |
SYNC | ボーレートを自動検出して設定する. スリープから復帰させる |
ACK | 肯定的なレスポンス.データ転送時の同期に用いる |
NAK | エラー・レスポンス. 各種のエラー・コードが返される |
Light Frequency | 照明の周波数を設定する (50Hzまたは60Hz,フリッカ防止用) |