Camera Module
Camera Module is a FIFO camera Module available from different Manufacturers with different pin Configurations. TheOV7670 provides full frame, windowed 8-bit images in a wide range of formats. The image array is capable of operating at up to 30 frames per second (fps) in VGA. The OV7670 includes
- Image Sensor Array(of about 656 x 488 pixels)
- Timing Generator
- Analog Signal Processor
- A/D Converters
- Test Pattern Generator
- Digital Signal Processor(DSP)
- Image Scalar
- Digital Video Port
- LED and Strobe Flash Control Output
The OV7670 image sensor is controlled using Serial Camera Control Bus (SCCB) which is an I2C interface (SIOC, SIOD) with a maximum clock frequency of 400 KHz.

The Camera comes with handshaking signals such as:
- VSYNC:Vertical Sync Output – Low during frame
- HREF:Horizontal Reference – High during active pixels of row
- PCLK:Pixel Clock Output – Free running clock. Data is valid on rising edge
In addition to this, it has several more signals such as
- D0-D7:8-bit YUV/RGB Video Component Digital Output
- PWDN:Power Down Mode Selection – Normal Mode and Power Down Mode
- XCLK:System Clock Input
- Reset:Reset Signal
The OV7670 is clocked from a 24MHz oscillator. This gives a Pixel Clock (PCLK) output of 24MHz. The FIFO provides 3Mbps of video frame buffer memory. The test pattern generator features 8-bar color bar pattern, fade-to-gray color bar patter. Now let’s start programming the Arduino UNO for testing Camera OV7670 and grabbing frames using serial port reader
Specification:
- VGA resolution (640 x 480)
- QVGA (320 x 240)
- CIF (352 x 240)
- QCIF (176 × 144);
- Transmission speed up to 30 fps,
- several ways to encode the image RAW RGB, RGB 565/555, YUV / YCbCr 4: 2: 2
Arduino Interfacing

Code :
#include <stdint.h>
#include <avr/io.h>
#include <util/twi.h>
#include <util/delay.h>
#include <avr/pgmspace.h>
#define F_CPU 16000000UL
#define vga 0
#define qvga 1
#define qqvga 2
#define yuv422 0
#define rgb565 1
#define bayerRGB 2
#define camAddr_WR 0x42
#define camAddr_RD 0x43
void arduinoUnoInut(void) {
cli();//disable interrupts
/* Setup the 8mhz PWM clock
* This will be on pin 11*/
DDRB |= (1 << 3);//pin 11
ASSR &= ~(_BV(EXCLK) | _BV(AS2));
TCCR2A = (1 << COM2A0) | (1 << WGM21) | (1 << WGM20);
TCCR2B = (1 << WGM22) | (1 << CS20);
OCR2A = 0;//(F_CPU)/(2*(X+1))
DDRC &= ~15;//low d0-d3 camera
DDRD &= ~252;//d7-d4 and interrupt pins
_delay_ms(3000);
//set up twi for 100khz
TWSR &= ~3;//disable prescaler for TWI
TWBR = 72;//set to 100khz
//enable serial
UBRR0H = 0;
UBRR0L = 1;//0 = 2M baud rate. 1 = 1M baud. 3 = 0.5M. 7 = 250k 207 is 9600 baud rate.
UCSR0A |= 2;//double speed aysnc
UCSR0B = (1 << RXEN0) | (1 << TXEN0);//Enable receiver and transmitter
UCSR0C = 6;//async 1 stop bit 8bit char no parity bits
}
void StringPgm(const char * str){
do{
while (!(UCSR0A & (1 << UDRE0)));//wait for byte to transmit
UDR0 = pgm_read_byte_near(str);
while (!(UCSR0A & (1 << UDRE0)));//wait for byte to transmit
} while (pgm_read_byte_near(++str));
}
static void captureImg(uint16_t wg, uint16_t hg){
uint16_t y, x;
StringPgm(PSTR(“*RDY*”));
while (!(PIND & 8));//wait for high
while ((PIND & 8));//wait for low
y = hg;
while (y–){
x = wg;
//while (!(PIND & 256));//wait for high
while (x–){
while ((PIND & 4));//wait for low
UDR0 = (PINC & 15) | (PIND & 240);
while (!(UCSR0A & (1 << UDRE0)));//wait for byte to transmit
while (!(PIND & 4));//wait for high
while ((PIND & 4));//wait for low
while (!(PIND & 4));//wait for high
}
// while ((PIND & 256));//wait for low
}
_delay_ms(100);
}
void setup(){
arduinoUnoInut();
camInit();
setResolution();
setColor();
writeReg(0x11, 10); //Earlier it had the value:writeReg(0x11, 12); New version works better for me 🙂 !!!!
}
void loop(){
captureImg(320, 240);
}
Reference:
https://www.hackster.io/techmirtz/visual-capturing-with-ov7670-on-arduino-069ebb
https://maker.pro/arduino/tutorial/how-to-interface-the-ov7670-camera-module-with-arduino
https://www.electronics-lab.com/using-ov7670-camera-sensor-arduino/
https://circuitdigest.com/microcontroller-projects/how-to-use-ov7670-camera-module-with-arduino