注意)
・本ページの情報は2008年9月現在のものです。
・製作についての個別のご質問には回答できません。本ページに使用上で必要なことが書いてありますのでご購入前に意図に沿った製品かどうかをよくご検討下さい。
<価格>
型名:S−EYE 25,200円(本体価格24,000円)
<概要>
■携帯電話用超小型CMOSイメージセンサの画像をシリアル通信で取り出すことができるモジュール。CMOS-EYEのシリアル部を強化して欲しいという要望が多かったので製作しました。
■30fps(一秒間に30回撮影)で高速にアップデートされる画像を任意のタイミングで任意のサイズで取り出すことが可能。
■画面サイズは160x120、80x60、40x30、20x15から選択。
■全ての撮影命令、画像受信、各種設定は非同期シリアル通信(UART)だけで行われますので特殊な知識は不要です。又、接続端子数も最低3つで済みます。
■通信速度は最大460Kbps。(9600、38400、115200、460800bpsからDIPスイッチにて選択。)
■任意の大きさの画面を切り取って取得することができるので、従来製品CMOS-EYEでは苦手だった小規模マイコンとの接続も可能になりました。RAMが少ないマイコンボードでもそれなりの画素に減らして取得することにより画像センサーとしての機能を付加することができます。
■浅草ギ研製のデータ通信用Bluetooth無線機AG-BT20Eとの接続も考慮された内容になっており、PCと無線で接続することもできます。リモートブレイン型ロボットなどの製作に最適。
■電源搭載でバッテリ駆動可能。
■グレースケール、YUV422カラー、RGB565カラーの画像フォーマットを選択可能。カラーは1ピクセルを2バイトで表します。(フォーマットについてはこのページ下で詳しく説明)
■ゲイン調整、自動露出、オートホワイトバランスなどのカメラ設定をこまかく調整することも可能。
■IOは3.3Vですが、モジュールへの入力端子は5Vトレラントとなっているので5V系マイコンとも直結可能。
■30x42mmの超小型設計で搭載場所を選びません。
<製品の趣旨と注意事項>
本製品は”センサー”として使われることを想定しています。カメラやビデオカメラではありませんのでご注意下さい。画像の表示はシステムによって表示速度が大きくかわります。この製品は基本的にはセンサーデータを「表示」するのではなく、データを「演算」する目的を想定しています。
本製品は画像を非圧縮で送っています。圧縮画像(JPEGやMPEGなど)は転送速度は速いのですが、受側でデータを解凍(デコード)する必要があり、ホビープログラミングではかなり難しい処理(フーリエ変換や行列演算)となります。非圧縮であれば解凍
する必要が無いため画像処理プログラムに注力することができますし、総合的な画像処理速度も速くなります。
非圧縮−>画像処理目的、転送速度より後段での処理のしやすさを重視
圧縮 −>表示目的、速い動作が必要
という考えから非圧縮画像を転送するようにしています。本製品はあくまでもセンサーとしての用途を想定しています。
※但し、今後の要望によっては圧縮画像をとりあつかうモジュールを製造する可能性はあります。
本製品はロボットなどの可動系システムに搭載されることを想定しています。
本製品はBluetooth無線機との接続も考慮されています。Bluetoothなので無線LANよりも消費電力を低くおさえることができます。また、インターフェイスは一般的なシリアル通信(Bluetoothの仮想COM)なので無線LAN特有の面倒な手続きやプログラムをすることなく画像データが取り扱えます。Bluetoothは機種によって動作がさまざまですので、このページ下の方にS-EYEとの相性を実験した結果を載せています。
※今後、Bluetoothが速くなるという動きもあり、無線LANが省電力になるという動きもあります。よって、将来的には他の無線機との接続を考慮する可能性はあります。
<電気仕様>
電源電圧
|
+4.5〜10V (*1) |
I/F電圧
|
LVTTLレベル(0V/+3.3V)
但し、入力は5Vトレラント (*2) |
動作クロック
|
27MHz (内部108MHz動作) |
動作温度
|
0度〜65度 |
保存温度
|
-30度〜85度 |
外形寸法
|
30x42mm |
重量
|
7g |
消費電流
|
mA |
(*1)できるだけ6V以下で使用してください。6V以上の場合は基板上の素子が熱くなります。6V以上の場合は前段にレギュレータを入れて6V以下(かつ出力が800mA以上)にすることをお勧めします。10V以上の場合、長時間の使用で熱暴走することがあります。この場合は放熱FANを取り付けるなどの熱対策により改善することはできます。最大定格は14Vです。
(*2)ほとんどの5V系マイコンに直結できます。
<画像仕様>
画素数
|
160x120/80x60/40x30/20x15 (設定により選択) |
出力フォーマット
|
YUV422 又は RGB565 (8bitパラレルデータ。1ピクセル辺り2バイト。詳しくは下にて) |
フレーム周期
|
最大30fpsで元画像をアップデート(*3) |
通信方式
|
非同期シリアル通信 (一般的なUARTと同じ) |
通信速度
|
9600/38400/115200/460800bps (Dipスイッチで設定) |
通信設定
|
8ビット、ノンパリティ、ストップビット1、フロー制御なし(*4) |
自動機能
|
自動露出(AE) オートホワイトバランス(AWB) 蛍光灯フリッカ補正 (設定により可能) |
反転機能
|
上下、左右、上下左右に反転可能 (設定により可能) |
(*3)画像を取得する速度は通信速度や接続先の動作速度に大きく依存します。
(*4)UARTを直結する時などの設定です。間にUSBアダプタやBluetooth無線機を入れる場合には適切な設定をしてください。
<光学仕様>
レンズ構造
|
2群2枚 |
F値
|
F2.8 |
水平画角
|
52度 |
撮影距離
|
20cm〜∞ |
OLPF
|
なし |
IRCF
|
あり |
TV歪曲
|
1%以下 |
<ピン配列>
<端子の説明>
端子 |
方向 |
説明 |
VCC |
− |
電源+。バッテリや電源の+を接続します。+4.5〜14V(6V以下推奨) |
GND |
− |
電源グランド。バッテリの−や電源のGNDを接続します。
|
G |
− |
信号グランド。通信する相手の回路のGNDに接続します。
|
TX |
出力 |
シリアル通信の送信端子。接続先のRX(RXD)につなぎます。 |
RX |
入力 |
シリアル通信の受信端子。接続先のTX(TXD)につなぎます。
|
3.3V |
出力 |
3.3V電源を出力します。Bluetooth無線機などに電源を供給するときに使います。 |
BSY |
出力 |
ビジー端子。S-EYEが動作中にHIGHになります。命令待ちの時にLOWになります。
|
LED |
− |
ビジー信号に連動しています。起動後にLEDが点灯します。S-EYEが動作中に消灯します。この間、命令を送っても無視されます。
|
<接続例>
<Bluetooth無線経由でPCと接続する場合>
ピンヘッダ(L字)を使って接続した様子
<マイコンと接続する場合>
※TXをRXへ、RXをTXへつなぎます。
<PCと有線で接続する場合(参考)>
PCのシリアルポートの電圧とS−EYEのシリアルポートの電圧は規格が違いますので電圧変換回路が必要になります。電圧変換回路は電子部品店などで専用ICが売られていますので「RS232CとLVTTL(3.3V)を変換するIC」を購入してください(詳しくはそのICの説明書を読んでください。)。
<動作説明>
<ブロック図>
※イメージセンサはAG-CAM08と同じものを使用しています。
<動作説明>
VCCとGNDに電源をつなぐと、モジュール内部の電圧レギュレータに供給され、モジュール各部に必要な電源が供給されます。このモジュールはIOは3.3Vになっています。内部はそれ以外の複数の電圧電源で動いていますがユーザー側では特に意識する必要はありません。
VCCに供給する電源は4.5V以上、800mA以上の電源を供給してください。ニッカドバッテリ、ニッケル水素、LiPoなどのバッテリ駆動(大きな電流が取り出せる)を想定しています。ACアダプタを使用する場合は供給電流に注意してください。一般的なACアダプタは800mA以下のものが多いです。
電源投入後は、モジュール上で各種初期化作業が行われます。この初期化作業は約1秒かかりますので、電源投入後は1秒以上待ってから使うようにしてください。
イメージセンサは、電源立ち上げ後に画像データを30fpsの周期で出力しつづけます。イメージセンサへはI2Cを経由して各種設定を行い、指示語に300〜800mS後にその設定が反映されます。このモジュールではI2Cで設定するデータもUART経由で行えますので接続側でI2Cを用意する必要はありません。尚、イメージセンサはAG−CAM08と同じものを使用していますので、設定の詳細についてはAG−CAM08のページを参照願います。
イメージセンサから出力されつづける画像データは、取り込み回路を経由して、デュアルポートRAM(読み出し用バスが2系統ある)に格納されます。RAMの領域は160x120画素に固定されています。本製品は1画素を2バイトで表す(下で詳しく説明します)のでRAMの容量は160x120x2=38,400バイトになっています。
160x120画素の画像データは30fpsの周期で上書きされつづけます。
画像を読み取るには、UARTに対して画像読み取り命令を送信すると、その後、設定レジスタに設定されたフォーマットで画像データが出力されます。出力フォーマットは下で詳しく説明します。あるフォーマット(たとえば白黒画像、など)を指定した中のある指定した四角の中(これをWindowと言う)のデータだけを送らせることも可能です。
RAMのデータは160x120ですが、設定によりこの画像を間引いて出力することもできます。これにより80x60、40x30、20x15画素の画像で送らせることも可能です。
イメージセンサに対して細かい設定を行うことも可能です。たとえばAWB(オートホワイトバランス)をON/OFFしたり、ある色のゲインを上げたり、画像出力順を上下左右反転(つまりカメラをさかさまに接地できる)させる設定もできます。イメージセンサの設定内容に関してはAG−CAM08のページを参照願います。この場合もUARTに対して設定命令を送れば、モジュール内のI2Cを使って設定されます。
S−EYEが命令を受信して、
1)画像データを送信しているとき
2)イメージセンサに対して設定を行っているとき
は、ビジー状態となり命令を受け付けません。このとき、BSYからHIGHが出力され、LEDが消灯します。それ以外の時(待機状態)はBSYはLOW(LEDは点灯)になります。
本製品は外部に対して3.3Vの電源を供給することもできます。これにより、浅草ギ研製Bluetoothモジュールなどに電源を供給することができます。尚、モジュールのレギュレータは800mA出力ですが、モジュール自体も電流を消費しますので外部へ対しては約300mAが供給限界となりますので、ご注意下さい。
<設定レジスタ>
画像を取得する場合に、あらかじめ設定レジスタに設定された動作モードでデータを出力します。設定レジスタは次の通り5つのパラメータがあります。
レジスタ名 |
機能 |
説明 |
X |
Windowの開始位置X |
動作モードが12、もしくはシリアル命令9の時のWindowの位置を指定します。 |
Y |
Windowの開始位置Y |
W |
Windowの幅 |
H |
Windowの高さ |
M |
動作モード |
出力画像フォーマット及びサイズを指定します。 |
<動作モード>
設定レジスタのMに下記の値を書き込むことにより出力フォーマット及びサイズを指定できます。また、動作モード12は特別なモードになっており、指定したWindowを読み取るモードになります。動作モード12については次で説明します。
起動時の動作モードは4に設定されています。動作モードは保存されませんので電源を切った後、再度電源を入れると動作モード4で起動します。
M値 |
画像フォーマット |
画像サイズ |
0 |
グレースケール
(白黒画像) |
160x120 |
1 |
80x60 |
2 |
40x30 |
3 |
20x15 |
4 |
YUV422 |
160x120(起動時) |
5 |
80x60 |
6 |
40x30 |
7 |
20x15 |
8 |
RGB565 |
160x120 |
9 |
80x60 |
10 |
40x30 |
11 |
20x15 |
12 |
直前と同じ |
設定による |
各画像フォーマット(YUV422,RGB565)については下で説明します。
シリアル命令(次で説明)で画像読み取り命令を実行すると、画像データは画面左上から順番に出力されます。
グレースケールの場合、1画素に対して1バイトのデータとなります。たとえば動作モード0の設定の場合、160x120=19200バイトのデータ列が出力されます。
YUV422とRGB565の場合、1画素に対して2バイトのデータとなります。たとえば動作モード4(起動時設定)の場合、160x120x2=38400バイトのデータ列が出力されます。
<動作モード12/命令9(Window読み取り)>
動作モードを12に設定した後に読み出し命令を実行した場合及び、命令9を実行した場合は、設定レジスタのXYWHで設定したWindowの部分だけのデータが返されます。このとき、画像フォーマット(グレー、YUV422、RGB565)は直前に設定した動作モードのフォーマットになります。
<シリアル命令>
シリアル通信経由で命令を送ることにより、画像読み出しや各種設定を行うことができます。
−データ形式−
シリアル命令はTX,RXを使って非同期シリアル通信で行われます。設定は「8ビット、ノンパリティ、ストップビット1、フロー制御なし」になります。非同期シリアルは一般的なマイコンのUARTと同じです。3.3V動作なので3.3V=HIGH、0V=LOWとなります。待機時はHIGHが継続します。非同期シリアル通信については浅草ギ研のサンプルプログラムのページに多数解説がありますのでそちら、もしくは書籍、インターネット情報などを参照に、十分理解しておいてください。
命令は3〜8バイトの数値データ(バイナリデータ)で送ります。バイトサイズ(8ビット)なので、表される数値は0〜255の256種類になります。
S−EYEはIO電圧が3.3Vですが、入力端子(RXしかない)が5Vトレラント(5Vを入力しても壊れない)になっていますので5V系のマイコンなどとも接続することができます。
尚、以下特に指定が無い場合は10進数で表しています。
−基本形−
データの基本形は次の通りになります。[ ]内は1バイトを表します。()内は送りえる数値の範囲を表します。
[シンクロバイト(170)] [送信バイト長(1-6)] [命令(1-11)] [値1] [値2] ...
※シンクロバイトとして命令の先頭には必ず値170を送ります。値170は16進数でAAh、2進数で10101010になります。
※送信バイト長はその後に送る命令及び値が何バイトあるかを示します。
注意)バイナリデータをテキストデータを混同される方が多いので注意してください。たとえば、シンクロバイトである170(10進数)を1バイト送ろうとした場合、たとえばC言語で
printf("170");
としてしまう方がよくいます。これは1と7と0の3文字(3バイト)を送ってしまい、数値の170は送っていないことになります。詳しくはお使いのシステムのシリアル通信及びASCIIコードについて調べてください。
|
−命令一覧−
番号 |
名称 |
方向 |
フォーマット |
2 |
モード確認 |
送信 |
[(170)] [長(1)] [命(2)] |
受信 |
[(170)] [長(6)] [命(2)] [X] [Y] [W] [H] [M] |
3 |
モード設定 |
送信 |
[(170)] [長(6)] [命(3)] [X] [Y] [W] [H] [M] |
受信 |
なし |
4 |
センサ設定書込み |
送信 |
[(170)] [長(3)] [命(4)] [No] [値] |
受信 |
なし |
5 |
センサ設定読み出し |
送信 |
[(170)] [長(2)] [命(5)] [No] |
受信 |
[(170)] [長(2)] [命(5)] [No] [値] |
8 |
画像読み出し(有線) |
送信 |
[(170)] [長(1)] [命(8)] |
受信 |
画像データ... |
9 |
画像読み出し(Window) |
送信 |
[(170)] [長(5)] [命(9)] [X] [Y] [W] [H] |
受信 |
画像データ... |
10 |
画像読み出し(無線/高速) |
送信 |
[(170)] [長(1)] [命(10)] |
受信 |
画像データ... |
11 |
画像読み出し(無線/低速) |
送信 |
[(170)] [長(1)] [命(11)] |
受信 |
画像データ... |
■命令2:モード確認
1)送信フォーマット (接続先−>S−EYE)
[(170)] [長(1)] [命(2)]
2)受信フォーマット (S−EYE−>接続先)
[(170)] [長(6)] [命(2)] [X] [Y] [W] [H] [M]
3)説明
送信フォーマットを送ると、S−EYEから設定レジスタの内容が返されます。
■命令3:モード設定
1)送信フォーマット (接続先−>S−EYE)
[(170)] [長(6)] [命(3)] [X] [Y] [W] [H] [M]
2)受信フォーマット (S−EYE−>接続先)
なし
3)説明
送信フォーマットを送ると、S−EYEの設定レジスタに値が設定されます。XYWHM各パラメータの意味は上で説明した通りです。この命令後、設定が終了するまで最大800mS掛かりますので、その間は他の命令を送らないで下さい。
■命令4:センサ設定書込み
1)送信フォーマット (接続先−>S−EYE)
[(170)] [長(3)] [命(4)] [No] [値]
2)受信フォーマット (S−EYE−>接続先)
なし
3)説明
S−EYEのイメージセンサはそれ自体の内部にも設定レジスタを持っており、撮影に関する細かい設定が可能です。センサ内の設定レジスタは8ビット長になっており、アドレスを指定して値を読み書きします。イメージセンサ部の設定に関しては次の<イメージセンサ設定一覧>を参照願います。
送信フォーマットの [No] はイメージセンサ内設定レジスタのアドレス番号を示します。[値]はそのレジスタに書き込む値を示します。
送信フォーマットを送ると、イメージセンサ内の設定レジスタに値が設定されます。
この命令後、設定が終了するまで最大800mS掛かりますので、その間は他の命令を送らないで下さい。
■命令5:センサ設定書込み
1)送信フォーマット (接続先−>S−EYE)
[(170)] [長(2)] [命(5)] [No]
2)受信フォーマット (S−EYE−>接続先)
[(170)] [長(2)] [命(5)] [No] [値]
3)説明
送信フォーマットを送ると、イメージセンサ内の設定レジスタの値が返されます。その他は命令4の説明を参照願います。
■命令8:画像読み出し(有線)
1)送信フォーマット (接続先−>S−EYE)
[(170)] [長(1)] [命(8)]
2)受信フォーマット (S−EYE−>接続先)
画像データ
3)説明
送信フォーマットを送ると、設定レジスタで設定したモードで画像データを返します。画像データはヘッダなどなしに、純粋な非圧縮の画像データが送られます。
画像読み出しにはいくつかの命令がありますが、この命令8はデータのバイト間のマージンがまったくない状態、つまりデータを最短時間で転送するものです。これは通信経路が確実な場合を想定している送り方で、有線接続での転送を想定しています。転送されるデータ詳細については上記<動作説明>と、下記<画像フォーマットについて>を参照してください。
■命令9:画像読み出し(Window)
1)送信フォーマット (接続先−>S−EYE)
[(170)] [長(5)] [命(9)] [X] [Y] [W] [H]
2)受信フォーマット (S−EYE−>接続先)
画像データ
3)説明
送信フォーマットを送ると、設定レジスタで設定したモードで画像データを返します。画像データはヘッダなどなしに、純粋な非圧縮の画像データが送られます。
この命令は、画面を分割してスキャンする場合を想定しています。命令8とは違い、直前に命令3によるWindow設定を必要としないので設定待ち(命令3は最大800mSかかる)をする必要がありません。
この命令は命令8のようにデータのバイト間のマージンがまったくない状態、つまりデータを最短時間で転送します。無線などを使っている場合は無線のフロー制御などが発生しない少ないバイト数になるようにWindowを設定してください。
この命令後は設定レジスタの値が書き換わりますので注意してください。この命令後、他の画像読み出しをする場合は必ず命令3で設定レジスタを設定しなおしてください。
■命令10:画像読み出し(無線/高速)
1)送信フォーマット (接続先−>S−EYE)
[(170)] [長(1)] [命(10)]
2)受信フォーマット (S−EYE−>接続先)
画像データ
3)説明
送信フォーマットを送ると、設定レジスタで設定したモードで画像データを返します。画像データはヘッダなどなしに、純粋な非圧縮の画像データが送られます。
画像読み出しにはいくつかの命令がありますが、この命令10は浅草ギ研製Bluetooth無線機AG-BT20Eを経由する場合を想定して送信タイミングを調整しています。
AG-BT20Eは市販のUSBタイプのBluetoothを経由してPCと通信するものですが、現在販売されているUSBタイプのBluetooth無線機はデータの保証をしないものがほとんどです。この命令10は一般的な無線機と通信ができるように送信タイミングを調整していますので命令8よりも転送時間がかかります(約1.5倍〜2倍)。
具体的には送信バイト数により、数百バイト単位である一定の時間のインターバル(非同期シリアルの”マーク”の状態)を入れています。
この命令では実測の結果、データ抜けがほとんど起きないぎりぎりの状態を作っていますので、環境(特にPC側の動作状態に影響される)などによってデータ抜けが多発する場合は次の命令11を使用してください。
※USBタイプのBluetooth無線のほとんどは、Bluetoothの問題ではなく、USBのモード(特にファームウェアの作り方の問題)の問題とWindowsとの兼ね合いで大量のデータを(SPPで)送るとほとんど間違いなくデータ抜けしてしまいます。
この命令は開発時の実験からタイミングを調整していますので無線での動作を保証するものではありません。
■命令11:画像読み出し(無線/低速)
1)送信フォーマット (接続先−>S−EYE)
[(170)] [長(1)] [命(11)]
2)受信フォーマット (S−EYE−>接続先)
画像データ
3)説明
送信フォーマットを送ると、設定レジスタで設定したモードで画像データを返します。画像データはヘッダなどなしに、純粋な非圧縮の画像データが送られます。
画像読み出しにはいくつかの命令がありますが、この命令11は転送時間を命令10よりもさらに遅くしたもので、無線接続を想定しています。無線に関しては命令10を参照願います。
<データ転送時間(参考値)>
以下に460800bps時の各命令の転送時間を示します。これは参考値であり時間を保証するものではありません。S-EYEが画像データを送信開始してから送信終了までの時間です。
460800bps以外の場合は単純に速度の倍数となります。たとえば115200bpsの場合は単純に4倍の時間がかかります。
(単位mS)
M値 |
画像フォーマット |
画像サイズ |
命令8 |
命令10 |
命令11 |
0 |
グレースケール
(白黒画像) |
160x120 |
420 |
760 |
1120 |
1 |
80x60 |
100 |
112 |
120 |
2 |
40x30 |
26 |
28 |
30 |
3 |
20x15 |
6.6 |
7 |
7 |
4 |
YUV422 |
160x120(起動時) |
830 |
1680 |
2560 |
5 |
80x60 |
200 |
280 |
340 |
6 |
40x30 |
52 |
56 |
60 |
7 |
20x15 |
12 |
14 |
14 |
8 |
RGB565 |
160x120 |
830 |
1680 |
2560 |
9 |
80x60 |
200 |
280 |
340 |
10 |
40x30 |
52 |
56 |
60 |
11 |
20x15 |
12 |
14 |
14 |
※M値=12(Windowモード)の場合はそのWindowのサイズによります。
<イメージセンサ設定一覧>
以下に設定用レジスタの一覧を示します。各レジスタの意味についてはこちらのページに詳しく書いてあります。
<設定レジスタの詳細説明のページへ(AG−CAM08のページ)>
※数値の後ろにdがついているものは10進数表記、hがついているものは16進標記になっています。尚、初期値の項目は2進数表記になっています。
※この表はAG-CAM08のものを使っていますが、S-EYEの場合は青部分を変えると動作しなくなりますので注意してください。誤って書き換えたとしても電源を切れば元に戻ります。
アドレス |
(16進) |
名称 |
初期値 |
(16進) |
説明 |
21d |
15h |
Global Gain |
00000000 |
00h |
総合増幅率。1〜32倍に設定可能。 |
22d |
16h |
Red Gain |
01000000 |
40h |
赤増幅率。1〜4倍に設定可能。 |
23d |
17h |
Green Gain1 |
01000000 |
40h |
緑1増幅率。1〜4倍に設定可能。 |
24d |
18h |
Blue Gain |
01000000 |
40h |
青増幅率。1〜4倍に設定可能。 |
25d |
19h |
Green Gain2 |
01000000 |
40h |
緑2増幅率。1〜4倍に設定可能。 |
29d |
1Dh |
Timming Control 1 |
00000000 |
00h |
内部クロック設定 |
30d |
1Eh |
Timming Control 2 |
00001010 |
0Ah |
画面反転設定 |
32d |
20h |
Timming Control 4 |
01000100 |
44h |
画素数設定(VGA/QVGA/QQVGA) |
70d |
46h |
Fliker Control |
00000000 |
00h |
蛍光灯フリッカコントロール |
78d |
4Eh |
Image Control 2 |
00010000 |
10h |
出力フォーマット選択、同期信号設定 |
79d |
4Fh |
Image Control 3 |
00001010 |
0Ah |
同期信号設定その2 |
80d |
50h |
Image Control 4 |
01110000 |
70h |
端子設定、カラー設定 |
151d |
97h |
Cb Color Gain |
00100101 |
25h |
Cb増幅率 |
152d |
98h |
Cr Color Gain |
00100101 |
25h |
Cr増幅率 |
155d |
9Bh |
Bright |
00000000 |
00h |
輝度調整 |
156d |
9Ch |
Contrast |
10010110 |
96h |
コントラスト調整 |
176d |
B0h |
Exposure_H |
00000000 |
00h |
AE機能がOFFの時、露出時間を設定します。初期値32768d。数値を大きくすると露出時間が長くなります。 |
177d |
B1h |
Exposure_M |
10000000 |
80h |
178d |
B2h |
Exposure_L |
00000000 |
00h |
179d |
B3h |
TargetExp |
01110000 |
70h |
AE機能がONの時、基準となる輝度の設定をします。 |
212d |
D4h |
Auto Congtrol |
00111100 |
3Ch |
AE又はAWB機能のON/OFFを行います。 |
※上記以外のレジスタの値は書き換えないで下さい。電源切り入りすることで上記初期値にもどります。
<画像フォーマットについて>
本製品の画像フォーマットは YUV422 もしくは RGB565 となります。起動直後にはYUV422に設定されます。動作モードで白黒(グレースケール)を選択した場合はYUV422モードのY(輝度)データだけが送られます。RGB565にする場合は上記のシリアル命令で設定を変更します。変更終了までには数百mS時間がかかりますので設定系の命令を送った後は1秒以上待ってから次の処理を行ってください。YUVとRGBの説明の前にコンピュータの一般的な画像表現について説明します。
<白黒画像の表現>
コンピュータで白黒を表現する場合は、値が低いと暗く、値が高いと明るくなります。8bitで白黒の濃淡を表した場合は0〜255の256段階で表すことができます。
たとえば、次のような画像があったとします。
画像の左上を拡大したところですが、各ピクセルの値は次のようになっています。
<カラー画像の表現>
カラー画像を現す場合はいろいろな表現方法がありますが、パソコンのモニタなどで出力するには一般的には”光の三原色”、赤(Red)、緑(Green)、青(Blue)で表します。この3色の濃淡を変えることでほぼ全ての色が表現できます。
下はRとGとBそれぞれを8bitで表したデータを合成してカラー画像にした例です。このフォーマットをRGB888(もしくは単にRGB、又は24ビットカラー)といいます。
この他に、パソコンでは主に”色の三原色”で表すCMY(シアン、マゼンダ、イエロー)でカラーを表す場合と、黒(K)を加えたCMYKで表す場合があります。CMYは紙への印刷などの時に誤差が出にくい表現です。CMY系はこのセンサーでは使いません。
<RGB565>
まず、RGB565から説明します。RGB888は8ビットx3=24ビットで1ピクセルを表します。人間の目は光の変化には敏感ですが、色の変化にはさほど敏感ではありませんので、各色8ビットの値が1つ変わった程度では違いがつきにくいのです(一般的な人間の場合)。RGB565はデータ量を2/3にして、Rが5ビット、Gが6ビット、Bが5ビットの合計16ビットで表したものです。RGBの中で、人間の目はG(緑)に対しての変化が一番敏感なのでGが1ビット多くなっています。RGB888とRGB565の画像をパソコンのモニタで見ると大抵の人は違いがわかりません。
<YUV422>
YUVは輝度情報と色情報を分けた表し方です。JPEG画像などの圧縮画像の場合、輝度データと色データをRGBから分解してから処理しますので、デジタルカメラなどではもともと輝度と色が分かれているYUV系の表現を使う場合が多いですし、色系の画像処理も計算がしやすくなります。YUVのYは輝度、Uは青色差、Vは赤色差のデータです。UはCb、VはCrとも表します。YもCrもCbも各8ビットで表します。
Yデータだけを扱うと白黒画像になります。
RGB565のようにYUV”422”も色データ量を減らして16ビットで1ピクセルを表す方法です。”422”の意味ですが、これは8バイトのうち、4バイトをY、2バイトをCb、2バイトをCrに割り当てて4ピクセルを表します。こうすることで輝度Yは劣化がなくなります。各ピクセルと出力の関係は次のようになります。(4バイトで2ピクセルではなく、8(4+2+2)バイトで4ピクセルなので422)
四角はそれぞれ1画素に相当します。
各データの横の番号はたとえばY0の場合は輝度0ピクセル目、Y1は1ピクセル目...という意味です。4ピクセルをCb0,Y0,Cr0,Y1,Cb2,Y2,Cr2,Y3の順番にの8バイトで出力しますので1ピクセル辺り2バイト換算のデータ量になります。但し、上の図のようにカラー情報は2ピクセルごとに省略されています。
上の図ではY1とY3のカラー情報がありませんが、計算時や画像表示時にはとなりのピクセルの色情報で計算します。
一見、RGB565と比べて色情報の劣化が激しいように見えますが実際の画像はRGB565でもYUV422でもさほど変わりません。
RGB565からYUV422を計算することができます。計算にはITUで決められている公式などがありますが、このセンサーの場合はハードウェア構造の修正値を含めて次の式になります。
Y=0.299R+0.587G+0.114B
Cb(U)=0.564BY+128
Cr(V)=0.713RY+128
下は実際にYUV422モード160x120で撮影した画像です。Yデータは劣化していない輝度データです。CrとCbは横方向に1/2に劣化していますがあまり気になりません。Crを見ると赤レンジャーの部分の数値(濃淡)が高いことがわかります。Cbを見ると青レンジャー部分が高く、黄レンジャー部分が低いです。黄色は青のほぼ逆相の色になります。これだけでカラー画像を再生することができます。
※PC上ではRGBで表示します。ここではITU-RBT601方式で変換しています。式は
R=1.164x(Y-16)+1.569x(Cr-128)
G=1.164x(Y-16)-00.391x(Cb-128)-0.813x(Cr-128)
B=1.164x(Y-16)+2.018x(Cb-128)
となりますが、計算中に整数にまるめられ値がオーバーフロー(8bit値より繰り上がる)やアンダーフロー(0より下回る)になる可能性がありますので、PC上では倍精度符号付変数(WindowsXPの場合double)で計算し、255以上の場合は255、0以下の場合は0に修正しています。
<輝度と色相>
当製品はセンサーなので、カメラ撮影ではなく、取得した画像を処理して使うことを想定しています。カメラ撮影の場合はRGBかCMY色体系にして画面に表示するなり印刷するなりすればよいのですが、画像認識ではRGBやCMY以外の色体系で計算する方が効率や精度が良いことが多くあります。ここでは知っておいた方が良いこととして輝度と色相について解説します。尚、本格的な画像処理や色体系については画像処理や美術の本を参照してください。(この他にもいろいろな考え方があります)
ロボットコンテストなどではよくカラーボールを使った画像認識などがあります。RGB色体系を使うと、色が薄い又は真っ黒又は真っ白の場合は値が微妙で計算しづらい場合があります。たとえば、赤いボールを認識する場合、真っ暗な中に赤いボールだけにスポットライトが当たっていれば簡単に認識できますが、実際の環境は一見赤には見えない色にも赤成分が多く含まれていることがあります。たとえば、上のYUVの画像で赤レンジャーがいない場合は黄レンジャー部分がR成分が高いので黄色が赤と判定されてしまうかもしれません。また、真っ白の場合はRGB全ての値が最高になりますので白も赤と判断されるかもしれません。真っ黒の場合も同様で、RGB全部が低い値になるので何色かの判断がつきません。
このように特定の色を判定する場合は「色相」が都合が良いです。下はCMOS−EYEの色相の図です。
色相はRGBやYUVから計算できます。RGBの色データは3個、YUVは2個になりますが、色相は色を角度で表すので1つのデータで色を表すことができます。つまり、輝度(明るさ)に影響されず、近い色の影響も受けずに色を判断することができます。RGBから色相への変換は専門書を参照願います。Webで検索する場合は「Hue」「HSB」「色相」「RGB」「変換」のキーワードで探すとよいでしょう。色相の英語はHueです。
<Viewerソフト>
S-EYEの画像を確認できるPCアプリを作りましたので公開します。これはあくまでもサンプルプログラムであり、PCの環境により動作しない可能性があるので、動作しない場合はソースを参考に新規に構築してみてください。
動作を保証するものではありませんのでご了承下さい。
S−EYEは画像データを表示する主旨の製品ではありませんが、動作チェックまたはどうしても現画像を表示したいという要望があると思い作成したものです。S−EYEは基本的には画像データを表示しないで演算(認識など)することを想定しています。
このプログラムはVS2005スタンダードで作成しました。VS2005は少々古いのでVS2008(もしくはxx2008ExpressEdition)を使っている方も多いと思いますがその場合は変換が必要になります。ここでは変換については解説できません。また変換による動作保証もできません。
このプログラムを動かすにはマイクロソフトの開発環境(無償で入手できます)又は.NET FreamWorksのVer2.0以上のインストール(最近のXPもしくはVistaなら標準でインストール済みが多い。マイクロソフトページから無償でインストール可能)が必要です。
Viewerソフト(VS2005のプロジェクトをそのまま圧縮したもの。C#ソース付き)
Viewerソフト(exeだけ。とりあえず動かしたい人向け)
サンプル&簡易確認用なのでエラー処理などまったく入れてません。プロジェクトを解凍した場合はCtrl+F5(デバックなし)で起動して下さい。exeだけの場合はエラーが出るとフリーズする可能性があります。
画面表示部のプログラムは正常に画像を受信した時にだけ画面が表示されます。エラー処理を入れていないので、通信時にデータ落ちなどが発生した場合はフリーズします。(エラー処理などを適当に追加してください。)
名前がCMOS-EYE2 Viewerですが気にしないで下さい。CMOS-EYE2はS-EYEの開発時名称です。
起動すると次の画面になります。これは無線経由でYUV422で画像を取得したところです。撮影した距離が20cm以内なので少々ピンボケぎみ。(旧ザクのヒジの部分までで3cmの距離)
使い方はボタンを見れば大体わかると思いますが、各ボタンが各シリアル命令に対応しています。このソフトでは、S-EYEの動作モードと、設定Writeボタン右のコンボボックスの設定が合っている必要があります(コンボボックスを参照して表示する方法を決定しているので)。各画像読み取りボタンを押す前に、「設定read」ボタンを押してS−EYEの設定と合っているか必ず確認してください。
画像読み取りボタンを押して全ての画像が正常に受信されると画像が表示されます。またこのとき、受信バッファの容量がポップアップで表示されます。正常な場合はバッファ=0と表示されます。操作が間違っていたり、想定よりも多くのデータが送られた場合は余分なデータがバッファに入るので「バッファ=0」になりません。逆にデータが少ないと、1画面分受信するまでずっと待ちます(SerialPortのタイムアウトを切っている)。
「動画テスト」ボタンは、できるだけ早く画像を連続して取得する、というテストを行ったときに作ったもので、アンマネージで画像を表示しています。テストの結果、40x30程度でしたら動画っぽく見えました。念のため再度申しますがこのボードはセンサーであり、ビデオカメラ用途ではありませんので本来は表示テストはあまり意味がありません。が、面白いと思って作ってみました。横の「10回連続表示」の値を変えると連続撮影する回数が変えられます。
「レジスタread」ボタンを押した場合は結果が右のテキストボックス(灰色)に表示されますが、これは返送されたデータすべてを10進表示で表示しますので、最後の2バイトだけ見てください。
「命令9」ボタンは画面を160バイトづつ分割して受信する(W=160、H=1でXYを変える)もので、一見非常に遅く読み取るように見えます(カラー160x120で10秒ぐらいかかる)が、実際には画面をちょっとづつ取得して、最後に一括で表示しています。本来のスキャン動作ではないのであまり意味のないプログラムです。
<PC側Bluetoothの相性>
S-EYEは浅草ギ研製Bluetooth無線(AG-BT20E)との接続を考慮されていますが、接続先であるPC側のUSBタイプのBluetooth無線によっては動作上の制約があるものがあります。以下に各通信速度でテストした結果を示します。○が正常に通信できたものです。
<条件>
WindowsXP上でViewerで確認。S-EYEへは命令10を使用。
メーカー |
系列 |
型式 |
460k |
115k |
9600 |
シグマ |
Bloadcom |
SBTD01 |
○ |
○ |
×(*3) |
IOデータ |
Bloadcom |
USB-BT12 |
○ |
○ |
×(*3) |
プリンストン |
TOSHIBA(*1) |
PTM-UBT3S |
○ |
○ |
×(*3) |
プラネックス |
TOSHIBA(*1) |
BT-Mini2EDRW |
○ |
○ |
×(*3) |
サンワ |
TOSHIBA(*1) |
MM-BTUD5 |
× |
× |
× |
ロジテック |
Bluesoleil |
LBT-UA300C1 |
×(*2) |
○ |
×(*3) |
エレコム |
Bluesoleil |
BT-UD1 |
×(*2) |
○ |
×(*3) |
(*1)TOSHIBA系はインストール後にTosOBEX.exeが動きっぱなしになってしまうので、ファイル名をリネームして動作しないようにした上で測定しています。OBEXが動きっぱなしの状態では正常に通信できません。
(*2)Bluesoleil系は通信速度の最大が115200に設定されているようです。
(*3)USB無線の場合、9600bpsだとほとんどの機種がデータ抜けが生じました。いくつかの機種では命令11を使用した場合に80x60又は160x120の場合はデータ抜けが少ないことがありました。30x40以下では通信できたものはありませんでした。
サンワについてはどのように調整しても初めの1画面しか通信できませんでした。
尚、これらの結果はあくまでも参考値です。PCの動作状態などによって結果が影響されることもあります。
<参考書籍>
画像を取得できるようになったら画像処理について勉強することと思います。ビギナー向けでは酒井幸市氏の画像処理関連の書籍が参考になりますので是非入手されることをお勧めします。アマゾンなどで検索してみてください。
「ディジタル画像処理の基礎と応用」酒井幸市著:ISBN4-7898-3707
(もっと新しいのが出ている様子)
画像処理の理論を勉強したいのではなく、とりあえず一般的な処理を使えればよいという場合は「OpenCV」が良いと思います。OpenCVはフリーの画像処理ライブラリです。これも書籍が出ていますのでアマゾンなどで検索してみてください。
「OpenCVプログラミング」:ISBN978-4-8399-2354-9
画像処理は数学の知識が必要になります。数学から遠ざかっている方は数学(特に代数幾何、行列、三角関数)についてもう一度勉強する必要があります。高校レベルの数学なら長岡亮介氏の「本質の研究数学xx」シリーズが良いと思います。
<ドキュメント>
このページが仕様書兼マニュアルとなっています。
<使い方とサンプルプログラム>
■PCで画像を高速に取得する方法
■PCで動体検知
■PCで人検知(色相判定、ニ値化、膨張、境界追跡、ラベリングなど)
<注意事項>
・このボードは電子機器です。取扱い、輸送時には静電気対策を行ってください。ICの足や、各ピンを直接手で触ったりすると静電破壊される場合があります。
・バッテリ使用時には電源ラインをショートさせると、バッテリが破裂・発火する可能性があります。作業中にはショートさせないよう十分注意して下さい。また、取り付け後も、あいている電源ラインに導電物質が触らないように注意して下さい。
<Q&A>
Q:説明通りにやっているが上手く動かない。故障だと思うのだが。
A:故障と思われるケースでも、多くはなんらかの設定ミス及び環境である場合が非常に多いです。故障かどうかはViewerソフトで判断できますので必ずそれでテストをするようにしてください。Viewerでの確認には時間がかかると思われますが、故障かどうかの確認はそれ以上の時間がかかる場合が多く、故障でない場合はさらに費用も掛かります。
旧製品(CMOS−EYE)での経験から、一次問い合わせで故障では?といった場合のほとんどは故障ではなかった実績があります。
故障の場合は新品交換となりますのでメールにてお問い合わせ下さい。
Q:起動時にLEDが点滅しない。
A:浅草ギ研製品の多くは起動時にLEDが点滅しますが、この製品は点滅しません。常に点灯し、データ受信時だけ消灯します。
Q:画面が真っ黒もしくは真っ白もしくは均一のグレーしか出ない。
A:センサー部がコネクタにきちんとささっていない可能性があります。
A:真っ黒の場合、電源が入っていない可能性もあります。
Q:動いている画像がボケてしまう。又は画面の下の方と上の方がズレる。
A:CMOSイメージセンサーは画素を順番に処理しますので動いている画像の撮影は不得意で、このようになります。画像を高速に撮影できるものにCCDカメラがありますが浅草ギ研では現在取り扱っていません。
Q:画面が下に行くにつれてだんだんズレる。
A:受け側のUART(もしくはPCのシリアル機能)が、設定した通信速度には対応できない可能性があります。これによりデータ抜けが発生しています。たとえば、無線経由でPCに転送している場合、OSがLinuxだと115200より低い速度でしjか通信できない、ということがあります。逆に、PCのCOMポートは115200bpsまでだが、USBシリアルアダプタを使うことにより460800bpsで通信ができた、という場合もあります。
A:受け側のシリアル機能の問題でなければ、通信経路にノイズなどが入ってデータ抜けがおきている可能性があります。
Q:画像がモザイク模様になる。
A:RGBで撮影した画像をYUVで見ている、もしくはその逆の可能性が高い。
Q:小さい画面が沢山出る。
A:画素数設定(160x120など)が間違っています。小さい画素で撮影したものを大きい画素で処理しようとしています。
Q:数行ごとに間引いたような画像になる。
A:画素数設定(160x120など)が間違っています。大きい画素で撮影したものを小さい画素で処理しようとしています。
Q:異常に明るすぎて写ってしまう。もしくは異常に暗すぎて写ってしまう。
A:S−EYEのセンサはダイナミックレンジを確保するために、電源起動時に周囲の明るさを測定し、露出の基準値を調整します。よって、電源ON時よりもかなり明るい又は暗い場所に移動もしくは環境がかわると、明るすぎたり暗すぎたりすることがあります。これはAE機能とは関連しない基準の露出になるので、電源ON後の変更はできません。
<故障/不具合と思ったら?>
故障のお問い合わせの中で、配線ミスや設定ミスなどが多くあります。故障と思う前にもう一度、配線、電源、設定などを十分確認することをお勧めします。また、使い方もいろいろあり、この説明ページも長いですので、見落としていることがないか、再度、十分にこのページを見直してください。
万が一、初期不良の場合は新品交換とさせていただきます。
故障かどうかの確認を、浅草ギ研で行うことも可能です。こちらで確認できるのは、S−EYE本体だけです。十分にご確認頂いた上でも故障や不具合と思った場合は、まずは浅草ギ研にメールでお問い合わせ下さい。その後は、まずは着払いでお送り頂き、初期不良であった場合は新品をお送り致します。もし、確認の上、不具合が発見できずに正常動作が確認された場合は確認手数料(2000円前後)と送料を申し受ける場合があります。
有限会社 浅草ギ研
お問い合わせ係り
<ご質問について>
ご質問については、このページを良くお読みになった上で、メールにてお問い合わせ下さい。お電話でのお問い合わせは受け付けておりません。回答には3日〜一週間程の時間を要する場合がありますのであらかじめご了承下さい。
個別のプログラミングや電子回路についてはお答えできません。
|