One of the most exciting projects with an Arduino is giving the project its own eyes, so to speak. Adding a camera to an Arduino project opens up a broad list of applications, such as monitoring and surveillance systems. In this Learn article, we will be introducing the OV7670 VGA camera, showing how to interface the module with an Arduino Uno, and demonstrating how to open the captured image.
OV7670 Camera
The OV7670 Camera is a VGA camera with an optical lens size of 1/6 inch. The module can be powered with a +3.3V power supply. It can output an image with a resolution of 640×480 and a video rate of 30 fps VGA. For more details on the module, visit Twins Chip’s product page, found here.
Materials Needed
- OV7670 Camera Module
- Arduino Uno
- Set of Jumper Wires
- USB Type B for Arduino Uno
- 2 x 10k Ohms Resistor
- 2 x 4.7k Ohms Resistor
- 1 x Breadboard
Pin Configuration
First, we should look at the pin configuration of the OV7670 Camera to better understand how to interface it with the Arduino Uno. Below is the table of pins and their functions.
Pin Name | Pin Type | Description |
VDD | Supply | Power Supply |
GND | Supply | Ground Level |
SDIOC | Input | SCCB Clock |
SDIOD | Input/Output | SCCB Data |
VSYNC | Output | Vertical Synchronization |
HREF | Output | Horizontal Synchronization |
PCLK | Output | Pixel Clock |
XCLK | Input | System Clock |
D0-D7 | Output | Video Parallel Output |
RESET | Input | Reset (Active Low) |
PWDN | Input | Power Down (Active High) |
Wiring Diagram
Our next step would be to connect the OV7670 Camera module to the Arduino Uno. With the use of the breadboard, wire the two components with the needed resistors as shown.
And with that, we are ready to test out the camera.
Programming Arduino Uno
When programming the Arduino Uno to interface with the OV7670 Camera, we first have to include a couple of libraries. The OV7670 Camera utilizes an I2C interface, which means the library is needed. Here is the list of libraries required:
- <stdint.h>
- <avr/io.h>
- <util/twi.h>
- <util/delay.h>
- <avr/pgmspace.h>
Some of the important functions in the code are:
- arduinoUnoInut(); // Placed in Setup(), this function initializes the Arduino Uno
- setResolution(); // Selects the resolution for the QVGA image that will be taken
- setColor(); // sets the register values that would be used to define the color mode.
- writeReg(0x11, 10); // the write-to-register function, which is in hex values.
- captureImg(320, 240); // Function to get the image resolution size.
To download the sample code, click here.
Compile and upload the code to the Arduino Uno.
Serial Port Reader
Lastly, we need to be able to fetch the data and display it. We need to use a simple GUI called Serial Port Reader to do this. You can download the file here. Run the file and follow the steps below.