『昼夜逆転』工作室
[トップページへ戻る]

カメラモジュールOV7670使用 マイクロスコープ

タイトル画像

2024年6月

カメラモジュール(OV7670)とESP32-WROOMを使ってマイクロスコープ(顕微鏡)を作成しました。 やろうとしていた機能(ソフトウェア)は実装できましたが、構造(ハードウェア)的なイメージが固まらないので、現状で一旦完成としました。
ここでは機能と製作の様子を紹介します。(製作期間:2024年3月から6月)

機能紹介

ボタンスイッチとロータリーエンコーダーで操作します。 ボタンを押しながらロータリーエンコーダーでメニューを選択:撮影画面→ズーム→明るさ→コントラスト。 選択した各画面ではロータリーエンコーダーで値を設定。
撮影画面ではボタン長押しで撮影。SDカードにBMP形式で保存されます。画像の解像度は撮影時のカメラの解像度です(QQVGA,QVGA,VGA)。 LCDを240*320のものにしてQVGA,VGAのみ対応でもよかったと思います。
開発中にあった調光機能は廃止しました。照明用LEDが必要ならスイッチかボリュームを通して電源に接続すればよいです。

機能紹介。照明用LEDの調節、撮影+保存(緑LED点灯)、ズーム、明るさ、コントラスト。ピントは手動だが(カメラ装着のレンズをくるくる回す)、観察しながら頻繁にズーム切替えすることもないのでヨシ。画像は実際に撮影したもの。ズームや画質調整したものが保存される。 pic.twitter.com/2pRfIqKJIa

— 『昼夜逆転』工作室 (@jsdiy) April 29, 2024

製作の様子

製作の様子はTwitter(現X)に投稿していました。「返信」が分岐している箇所もあるので、起点となる投稿を紹介します。

ギャラリー

製作過程で撮影した数々の写真。
作品の様子 作品の様子 作品の様子 作品の様子 作品の様子 作品の様子 作品の様子 作品の様子 作品の様子 作品の様子 作品の様子 作品の様子 作品の様子 作品の様子 作品の様子 作品の様子 作品の様子 作品の様子 作品の様子 作品の様子 作品の様子 作品の様子 作品の様子 作品の様子

配線図とプログラム

配線が多く、開発当初はブレッドボードとジャンプワイヤーの接触不良に悩まされました。 ユニバーサル基板に載せ替える際はハンダ付けに思いのほか手こずりました。 ケーブルも邪魔だし、カメラ動作テスト用のPCBを起こせばよかったです。

配線図

マイコン部分は「ESP32-WROOM-32Eマイコンボード」を使用しています(後述の部品一覧を参照)。 開発ボードESP32-DevKitCと同型のMCUで、ピンの並びも同じです(5Vピンだけ異なる)。 実際に作成した基板では3V3ピンにパスコン(0.1uF)、ENピンにRC遅延回路(1uF,10kR)を実装しています。

配線図 配線図

ピンアサイン

カメラのRESETピンは、LCDと同様、ENピンに接続した方がより良いと思います。
「LED点滅」ピンにはLEDを接続します。撮影時に画像保存中であることを通知するインジケータです。 ピンを節約するなら、LEDを電源ピンと「SD-Card/CS」ピンの間で負論理制御すればよいです。開発中はそのようにしていました。
GPIO-0,12,15はブートストラップ関係のピンなので何も接続しない方が無難です。 ノーマリー・オープンのスイッチであれば取り付けても問題ありません。

ピンアサイン

プログラム

Espressif社製「ESP32 Camera Driver」 がESP32-DevKitCに対応していなかったのが運の尽き。解析するのは置いといて他のドライバをあたりました。 その結果、「OV7670 (non FIFO) Library for ESP32 Arduino」 が開発環境(PSRAM非搭載のESP32、ArduinoFramework、FIFOなしOV7670)で動いたので、こちらを利用しています。
ソフトウェアでチャタリング対応したプッシュスイッチ、ロータリーエンコーダーの自作ライブラリは上手く動作しています。

ダウンロード
Microscope.zip(プロジェクト一式)
開発環境
Windows10, VisualStudioCode, PlatformIO

部品について

マイクロスコープ暫定版 主要部品一覧
部品名部品番号値/型番個数参考価格/備考
マイコンボード -- ESP32-WROOM-32Eマイコンボード 1 800円(秋月
グラフィックLCDモジュール -- ST7735 128*160 1 --
CMOSカメラモジュール -- OV7670 FIFOなし 1 --
SDカードモジュール -- MicroSD 1 --
ロータリーエンコーダー -- -- 1 インクリメンタル型
プッシュスイッチ -- -- 1 タクトスイッチ等

◆ ◆ ◆

FIFOなしのOV7670をPSRAMなしのESP32で動かしました。中心技術となるカメラドライバは既存のものを使用しました。 製作にあたってはカメラの動かし方を習得したい気持ちもあったので、その点は消化不良です。 ESP32でカメラドライバを作成するにはI2S,DMAの使い方を理解する必要がありそうです。 Espressif社製のドライバをベースに、時間を掛けてやっていこうと思います。