- 必要なコンポーネント
- カメラモジュールOV7670について覚えておくべきこと
- 回路図
- ArduinoUNOのプログラミング
- 画像を読み取るためにシリアルポートリーダーを使用する方法
- 以下はOV7670から取得したサンプル画像です
- OV7670使用時の注意事項
カメラは、訪問者監視システム、監視システム、出席システムなどの多くのアプリケーションを備えているため、常にエレクトロニクス業界を支配してきました。現在使用しているカメラはスマートで、以前のカメラにはなかった多くの機能を備えています。今日のデジタルカメラは、画像をキャプチャするだけでなく、シーンの高レベルの説明をキャプチャし、それらが見ているものを分析します。ロボット工学、人工知能、機械学習などで広く使用されています。キャプチャされたフレームは、人工知能と機械学習を使用して処理され、ナンバープレート検出、オブジェクト検出、動き検出、顔認識などの多くのアプリケーションで使用されます。
このチュートリアルでは、最も広く使用されているカメラモジュールOV7670をArduinoUNOとインターフェースします。カメラモジュールOV7670はとインターフェースすることができるArduinoのメガ同じピン構成、コードおよびステップと。カメラモジュールは、実行するピンが多数あり、配線が乱雑であるため、インターフェイスが困難です。また、カメラモジュールを使用する場合、ワイヤーの選択とワイヤーの長さが画質に大きな影響を与え、ノイズをもたらす可能性があるため、ワイヤーは非常に重要になります。
私たちはすでに、次のようなさまざまな種類のマイクロコントローラーとIoTデバイスを備えたカメラで十分なプロジェクトを行っています。
- RaspberryPiとPiカメラを備えた訪問者監視システム
- 電子メールアラートを備えたIOTベースのRaspberryPiホームセキュリティシステム
- モーションキャプチャ付きラズベリーパイ監視カメラ
カメラOV7670は、それが彼らの出力GPIOピンで5V出力を与えるArduinoのを回避することが非常に重要になってくるので、3.3Vで動作します。OV7670はFIFOカメラです。ただし、このチュートリアルでは、FIFOなしで画像またはフレームを取得します。このチュートリアルでは、OV7670をArduinoUNOとインターフェースするための簡単な手順と簡単なプログラミングについて説明します。
必要なコンポーネント
- Arduino UNO
- OV7670カメラモジュール
- 抵抗器(10k、4.7k)
- ジャンパー
必要なソフトウェア:
- Arduino IDE
- シリアルポートリーダー(出力画像を分析するため)
カメラモジュールOV7670について覚えておくべきこと
OV7670カメラモジュールは、さまざまなメーカーからさまざまなピン構成で入手できるFIFOカメラモジュールです。TheOV7670は、フルフレームのウィンドウ付き8ビット画像をさまざまな形式で提供します。イメージアレイは、VGAで最大30フレーム/秒(fps)で動作できます。OV7670には以下が含まれます
- イメージセンサーアレイ(約656 x 488ピクセル)
- タイミングジェネレータ
- アナログ信号プロセッサ
- A / Dコンバーター
- テストパターンジェネレーター
- デジタルシグナルプロセッサ(DSP)
- イメージスケーラー
- デジタルビデオポート
- LEDとストロボフラッシュ制御出力
OV7670イメージセンサーは、最大クロック周波数400KHzのI2Cインターフェース(SIOC、SIOD)であるシリアルカメラ制御バス(SCCB)を使用して制御されます。
カメラには、次のようなハンドシェイク信号が付属しています。
- VSYNC:垂直同期出力–フレーム中はロー
- HREF: 水平参照–行のアクティブピクセル中に高
- PCLK:ピクセルクロック出力–フリーランニングクロック。データは立ち上がりエッジで有効です
これに加えて、次のようないくつかの信号があります
- D0-D7: 8ビットYUV / RGBビデオコンポーネントデジタル出力
- PWDN:パワーダウンモードの選択–通常モードとパワーダウンモード
- XCLK:システムクロック入力
- リセット:リセット信号
OV7670は24MHz発振器からクロックされます。これにより、24MHzのピクセルクロック(PCLK)出力が得られます。FIFOは、3Mbpsのビデオフレームバッファメモリを提供します。テストパターンジェネレーターは、8バーのカラーバーパターン、フェードからグレーのカラーバーパターンを備えています。それでは、カメラOV7670をテストし、シリアルポートリーダーを使用してフレームを取得するためのArduinoUNOのプログラミングを始めましょう。
回路図
ArduinoUNOのプログラミング
プログラミングは、OV7670に必要なライブラリを含めることから始まり ます。OV7670はI2Cインターフェースで実行されるため、この後、OV7670用にレジスタを変更する必要があります。プログラムは、理解を深めるために小さな関数に分割されています。
セットアップは、() のみ撮影のために必要なすべての初期セットアップを備えています。最初の関数は、arduino unoを初期化するために使用されるarduinoUnoInut()です。最初に、すべてのグローバル割り込みを無効にし、PWMクロック、割り込みピンの選択、プレスクラーの選択、パリティとストップビットの追加などの通信インターフェイス構成を設定します。
arduinoUnoInut();
Arduinoを構成した後、カメラを構成する必要があります。カメラを初期化するために、レジスタ値を変更するオプションしかありません。レジスタ値をデフォルトからカスタムに変更する必要があります。また、使用しているマイクロコントローラーの周波数に応じて、必要な遅延を追加します。として、遅いマイクロコントローラは処理時間が短く、フレームのキャプチャ間の遅延が大きくなります。
void camInit(void){ writeReg(0x12、0x80); _delay_ms(100); wrSensorRegs8_8(ov7670_default_regs); writeReg(REG_COM10、32); // PCLKはHBLANKをオンに切り替えません。 }
カメラはQVGA画像を撮影するように設定されているため、解像度を選択する必要があります。この関数は、QVGAイメージを取得するようにレジスタを構成します。
setResolution();
このチュートリアルでは、画像はモノクロで撮影されているため、レジスタ値はモノクロ画像を出力するように設定されています。この関数は、プログラムで事前定義されているレジスタリストからレジスタ値を設定します。
setColor();
以下の関数は、16進値をレジスタに書き込むレジスタへの書き込み関数です。スクランブルされた画像を取得した場合は、第2項、つまり10を9/11/12に変更してみてください。ただし、ほとんどの場合、この値は正常に機能するため、変更する必要はありません。
writeReg(0x11、10);
この関数は、画像の解像度サイズを取得するために使用されます。このプロジェクトでは、320 x240ピクセルのサイズで写真を撮ります。
CaptureImg(320、240);
これ以外に、コードにはI2C構成がいくつかの部分に分割されています。カメラからデータを取得するためだけに、I2C構成には、I2Cプロトコルを使用するときに重要な開始、読み取り、書き込み、アドレス設定機能があります。
このチュートリアルの最後にあるデモビデオで完全なコードを見つけることができます。コードをアップロードしてシリアルポートリーダーを開き、フレームを取得するだけです。
画像を読み取るためにシリアルポートリーダーを使用する方法
シリアルポートリーダーはシンプルなGUIです。ここからダウンロードしてください。これにより、base64エンコードがキャプチャされ、デコードされて画像が形成されます。シリアルポートリーダーを使用するには、次の簡単な手順に従ってくださいステップ1: ArduinoをPCの任意のUSBポートに接続します
ステップ2:「チェック」をクリックしてArduinoCOMポートを見つけます
ステップ3:最後に「開始」ボタンをクリックして、連続して読み始めます。
ステップ4:「画像を保存」をクリックするだけでこの画像を保存することもできます。
以下はOV7670から取得したサンプル画像です
OV7670使用時の注意事項
- できるだけ短いワイヤーまたはジャンパーを使用するようにしてください
- ArduinoまたはOV7670のピンへの緩い接触を避けてください
- 配線数が多いとショートする恐れがありますのでご注意ください。
- UNOがGPIOに5V出力を与える場合は、レベルシフターを使用します。
- OV7670モジュールに損傷を与える可能性がある電圧を超えると、OV7670に3.3V入力を使用します。
このプロジェクトは、Arduinoでのカメラモジュールの使用の概要を説明するために作成されています。Arduinoのメモリが少ないため、処理が期待どおりにならない場合があります。処理用のメモリが多いさまざまなコントローラを使用できます。