OV7670摄像头模块如何在Arduino上使用
OV7670模块是Arduino中常用的摄像模块,在很多项目中都可能会用到它。 本文将学习如何使用Arduino IDE将OV670摄像机模块采集的实时视频显示到到1.8英寸TFT LCD屏幕上。我们通过使用Arduino IDE中编写的一个连接程序,然后从OV7670模块获取图像,我们将会用到 indrekluuk 库文件。
OV7670摄像模块

OV7670模块允许以VGA(640×480)的格式捕获图像,并执行一些初始化的图像处理,然后通过SCCB接口将图像传输给微控制器,如Arduino、树莓派等。当然你也可以以其他格式(如CIF (352×240))获取图像,手动调整到40×30也是可以的。模块的最大图像传输速率(VGA)可达到每秒30帧。模块也支持如曝光控制、放大、白平衡等基础操作。 支持各种图像编码选项(YUV,各种类型的RGB),数据传输使用SCCB协议进行。 具体特性如下:
OV7670摄像模块的特性
- VGA resolution (640 x 480)
- QVGA (320 x 240)
- CIF (352 x 240)
- QCIF (176 × 144);
- VGA传输速率 30 fps;
- 图像编码: RAW RGB, RGB 565/555, YUV / YCbCr 4: 2: 2 。
OV7670摄像模块引脚定义

与Arduino的连接

电路原理图如下:

OV7670 与 Arduino Nano 的连接
OV7670 | Arduino Nano |
---|---|
VSYNC | PIN2 |
XCLCK | PIN3(需进行 5V => 3.3V的电平转换) |
PCLCK | PIN12 |
SIOD | A4 (I2C data) |
SIOC | A5 (I2C clock) |
DO D3 | A0.. A3 (pixel data bits 0..3) |
D4 D7 | PIN4..PIN7 (pixel data bits 4..7) |
3.3V | 3.3V |
RESET | 3.3V |
GND | GND |
PWDN | GND |
TFT 显示屏与 Arduino Nano的连接
TFT-1.8 LCD | Arduino Nano |
---|---|
DC | PIN 8 (5V => 3.3V) |
CS | PIN 9 (5V => 3.3V) |
RESET | PIN 10 (5V => 3.3V) |
SPI data | PIN 11 (5V => 3.3V) |
SPI clock | PIN 13 (5V => 3.3V) |
VCC | 5V/3.3V ( 取决于在TFT板 ) |
BL | 3.3V |
GND | GND |
代码编译
到Github下载本项目涉及的文件包,地址:下载 。然后按下列提示操作:
- 下载软件包后,解压打开”LiveOV7670-master\src\lib”文件夹。
- 复制 “src/lib/LiveOV7670Library” 和 “src/lib/Adafruit_GFX_Library” 到 Arduino “libraries” 文件夹 (如果你已经存在 “Adafruit_GFX_Library” 那就可以忽略.)
- 在 Arduino IDE 中打开 “src/LiveOV7670/LiveOV7670.ino”
- 选择 Tools->Board->Arduino Uno/Nano.
打开Arduino IDE 打开 LiveOV7670.ino,连接Arduino nano 后上传代码,LCD上就可以显示摄像头采集到的图像了。

*根据项目需要如何修改代码*
打开 “LiveOV7670-master\src\LiveOV7670″文件夹,编译修改 setup.h 文件。
/* * EXAMPLE = 1 * Use LiveOV7670Library class that reads line into buffer and * sends data to TFT over SPI during blank lines. * * EXAMPLE = 2 * Use LiveOV7670Library class that processes data pixel by pixel * sends data to TFT during each pixel reading loop. * VGA can not be used with line buffer since there is no * time (no blank lines) to do something useful with a buffered line * * EXAMPLE = 3 * Reads data from LiveOV7670Library and send it over UART to computer * Java application for receiving picture from UART * https://github.com/indrekluuk/ArduinoImageCapture * * EXAMPLE = 4 * Gray scale image @20Hz. Interlaced image. * */ #define EXAMPLE 1
本例中使用的是,“EXAMPLE = 1”。通过SPI接口向TFT发送数据。