マイコン工作実験日記

Microcontroller を用いての工作、実験記録

OV7670を使ったバーコード・リーダー

2011-11-24 12:31:02 | CMOSカメラ
SPI LCDやSAM3Sボードを準備していたのは、新たなCMOSカメラボードを製作をするためです。今回は、入手が容易で製作も簡単にできることを目指したので、ボードはOlimexのヘッダボードSAM3-H256を使うことにしたのです。そして、CMOSカメラも安価なOV7670を使うことにしました。



このカメラは日昇テクノロジーで扱っているもの。aitendoにも良く似た製品があるのですが、両者はピン配置が異なっているという罠が潜んでいます。同じピン数で、同じような色してるんですけどね。

いつものように簡易データシートだけではOmnivisionのカメラの具体的な使い方は、よくわかりません。カメラと一緒に提供されているサンプルコードなんかより、Linuxのドライバの方がコメントが充実しているだけわかり易い印象を受けますが、やはりなんらかのサンプルを参考にしているだけで詳しい意味がわかっているわけではないようで、「魔法の呪文」を示す magicという言葉が散見されます。

カメラの設定さえなんとかなれば、画像の取得はSAM3Sのパラレルキャプチャ機能を使うことで、とっても簡単にできちゃいます。何しろDMAで画像データをメモリ内に取り込んでくれるので、その内容をLCDに転送するだけでも取得画像の確認をすることができます。これまでは、取得した画像をそのままLCDに表示するとか、JPEGに変換してSDカードに保存してみるくらいのことしかやってこなかったのですが、今回は少し画像処理的要素をもつアプリに挑戦してみました。



いまじゃ携帯電話にもフツーに備わっている、CMOSカメラを用いたバーコード読み取りです。何しろRAMが48KBしかないので、2次元バーコードであるQRコードの読み取りは難しそうですが、1次元ならなんとかなるだろうと思いやってみました。バーコードにもいろいろな種類があるようですが、日常生活で一番良く目にするであろう13桁のJANコードだけを対象と想定して、読み取り処理を実装しています。結構、気持ちよく動いてくれます。実用上の一番の問題はカメラのピント合わせではないでしょうか。このCMOSカメラ、レンズ筒があって立派そうに見えますが、実用上は筒を廻してちゃんとピントを合わせないとまっとうな像を結びません。読み取り操作時にはバーコードとの距離を調節するために、だんだんと近づけたり/離したりするのがうまく読み取るためのコツです。バーコードにも何種類かのサイズがあるようですが、大きなものと小さなものではピント合わせをやり直さないといけません。