シリアルJPEGカメラをテストする
花岡ちゃんのウィークエンド:
この週末は、シリアル接続のJPEGカメラをテストします。
CMOSカメラモジュールにJPEG圧縮機能を持たせたもので、シリアルポートで画像を取得できるのが最大の特徴です。
画像の転送には数秒から数十秒かかるので動画は無理ですが、ワンチップマイコンに写真撮影能力を持たせるにはもってこいのデバイスです。
今回はこのカメラを使いました。国内ではスイッチサイエンス以外にストロベリーリナックスでも入手できます。本当は4D Systemsのこのカメラがいいなと思ったのですが、いつものここで通販すると、送料込みで10K円くらいになってしまうので今回はパスです。
4D systemsのカメラはJPEGの他にRGBのデータも読め、また80X60という超低解像度モードもあるので、色判別や明るさ検出などのちょっとした画像認識にも、ワンチップマイコンで挑戦できるのです。
まあ、またの機会にということにしておきます。
閑話休題。購入したカメラのマニュアルは、大変あっさりしたものです。確かにカンタンですが、使い方にはちょっとコツが必要でした。この辺をまとめてみたいと思います。
写真のようにレベルコンバータを接続し、パソコンに接続してテストします。自作のコンバータは単三電池を内蔵し、5V、3.3V、それぞれのロジックレベルに切り替えて使えるようになっています。外部への電源供給機能もあるので、このようなシリアル接続のモジュールのテストには便利です。
画像を確認するだけなら専用ソフトでカンタンですが、コマンドの流れやタイミングがわからないので、テスト用のソフトをC#で作って確認しました。こんな感じのソフトです。
(参考用にVC#のプロジェクトを公開します)
「JPEGcamTest.zip」をダウンロード
カメラの画像は白っぽい感じです。レンズがやや広角のせいか、画面外周部にややゆがみがあります。ドアカメラほどではないですが、視野は広いようです。
さて、マニュアルには画像のダウンロードが、あっさりしたフローチャートで説明してありますが、ちょっとわかり難いですね。試作ソフトで確認した結果が下記の詳細フローです。(クリックで拡大)
写真撮影のコマンドを送ると、カメラ内部のメモリにJPEG変換されたイメージが展開されます。
ダウンロードコマンドでは、このメモリのどこからどこまでをダウンロードするかを、先頭アドレスとチャンクサイズで指示します。試作ソフトではチャンクサイズを1Kバイトにしています。つまり、12Kバイトほどの画像ファイル(320X240)を、1Kバイトずつに分けて何回もダウンロードしているわけです。
JPEGファイルのおしまいを示すデリミタ、0xFF 0xD9が連続して読み込まれたなら、それを最終チャンクとしてダウンロードを終了します。
ここで重要なのが、スタートアドレス、チャンクサイズ、それぞれが8の倍数でなければならないと言うことです。
パソコンのようにメモリがたっぷりあるホストなら、画像のファイルサイズはわかっているので、先頭アドレスを0にしてファイルサイズ分一気にダウンロードしたくなりますが、ファイルサイズが8の倍数とは限らないので、1回はうまく行きますが、2回目以降が具合悪いです。
ファイルサイズを8の倍数に丸めてやれば、一気にダウンロードもうまく行くのかも知れませんね。
もっとも、普通はメモリの少ないワンチップマイコンに接続して、SDカードに画像を記録したり、ネットに送信したりするわけですから、時間がかかってもちょっとずつダウンロードするのが主流になるのでしょう。
それから、コマンドとコマンドの間にはフローにあるくらいの時間間隔を置くほうが安全なようです。カメラの問題か試作ソフトの問題かはハッキリわかりませんが、これがないと調子が悪いですね。
また、終了コマンドを送らずに、再度撮影コマンドを送ると、撮影されず、前の画像のままになります。これも要注意です。
このカメラと前回試したXbeeを使うと、ロボタみたいなものがカンタンに作れそうですね。
« 秋月のXBeeを使ってみる | トップページ | アクエストークモジュールを作る(その1) »
「花岡ちゃんのウィークエンド」カテゴリの記事
- レーザー距離センサVL53L0Xを複数使うには(2022.05.01)
- 【訂正!】PIC24Fでレーザー距離センサVL53L0Xを使う(2022.04.13)
- PIC24Fでレーザー距離センサVL53L0Xを使う(おしまい)(2022.04.14)
- PIC24Fでレーザー距離センサVL53L0Xを使う(その3)(2022.04.13)
- PIC24Fでレーザー距離センサVL53L0Xを使う(その2)(2022.04.12)
コメント