OV7670摄像头模块如何在Arduino上使用

  • 内容
  • ....
  • 相关

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

OV7670摄像模块

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摄像模块引脚定义

OV7670针脚定义

与Arduino的连接

OV7670  Arduino Nano TFT1.8寸屏幕连接图

电路原理图如下:

OV7670  Arduino Nano TFT1.8寸屏幕连接图

OV7670 与 Arduino Nano 的连接

OV7670Arduino Nano
VSYNCPIN2
XCLCKPIN3(需进行 5V => 3.3V的电平转换)
PCLCKPIN12
SIODA4 (I2C data)
SIOCA5 (I2C clock)
DO D3A0.. A3 (pixel data bits 0..3)
D4 D7PIN4..PIN7 (pixel data bits 4..7)
3.3V3.3V
RESET3.3V
GNDGND
PWDNGND

TFT 显示屏与 Arduino Nano的连接

TFT-1.8 LCDArduino Nano
DCPIN 8 (5V => 3.3V)
CSPIN 9 (5V => 3.3V)
RESETPIN 10 (5V => 3.3V)
SPI dataPIN 11 (5V => 3.3V)
SPI clockPIN 13 (5V => 3.3V)
VCC5V/3.3V ( 取决于在TFT板 )
BL3.3V
GNDGND

代码编译

到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上就可以显示摄像头采集到的图像了。

TFT 1.8 LCD显示OV7670摄像头采集到的图像

*根据项目需要如何修改代码*

打开 “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发送数据。