Arduino UNO-Based Smart Surveillance System with ArduCam Mega, OV7670, and Wi-Fi Connectivity
View and Edit Project In Cirkit Designer
Circuit Documentation
Summary
This document provides a detailed overview of a circuit that integrates various components including an ArduCam Mega, OV7670 camera module, Arduino UNO, Wifi module ESP8266-01, and an HC-SR04 Ultrasonic Sensor. The circuit is designed to capture images, measure distances, and transmit data over WiFi.
Component List
ArduCam Mega
- Description: A camera module used for capturing high-resolution images.
- Pins: GND, D18/SCK, D19/MISO, D23/MOSI, VCC/3.3V, TX2/CS
OV7670
- Description: A camera module used for capturing images.
- Pins: RET, PWDN, D1, D0, D3, D2, D4, D5, D6, PLK, XLK, D7, VS, HS, SCL, SDA, 3.3V, DGND
Arduino UNO
- Description: A microcontroller board used for interfacing with various sensors and modules.
- Pins: UNUSED, IOREF, Reset, 3.3V, 5V, GND, Vin, A0, A1, A2, A3, A4, A5, SCL, SDA, AREF, D13, D12, D11, D10, D9, D8, D7, D6, D5, D4, D3, D2, D1, D0
Wifi module ESP8266-01
- Description: A WiFi module used for wireless communication.
- Pins: RX, GPIO0, GPIO2, GND, +3V3, Reset, CH-PD Chip power down, TX
HC-SR04 Ultrasonic Sensor
- Description: A sensor used for measuring distances.
- Pins: VCC, TRIG, ECHO, GND
Wiring Details
ArduCam Mega
- GND connected to Arduino UNO GND
- D18/SCK connected to Arduino UNO D13
- D19/MISO connected to Arduino UNO D12
- D23/MOSI connected to Arduino UNO D11
- VCC/3.3V connected to Arduino UNO 3.3V
- TX2/CS connected to Arduino UNO D10
OV7670
- 3.3V connected to Arduino UNO 3.3V
- SCL connected to Arduino UNO A5
- SDA connected to Arduino UNO A4
- DGND connected to Arduino UNO GND
Arduino UNO
- GND connected to ArduCam Mega GND, OV7670 DGND, Wifi module ESP8266-01 GND, HC-SR04 Ultrasonic Sensor GND
- D13 connected to ArduCam Mega D18/SCK
- D12 connected to ArduCam Mega D19/MISO
- D11 connected to ArduCam Mega D23/MOSI
- 3.3V connected to OV7670 3.3V, Wifi module ESP8266-01 +3V3, ArduCam Mega VCC/3.3V
- D10 connected to ArduCam Mega TX2/CS
- A5 connected to OV7670 SCL
- A4 connected to OV7670 SDA
- 5V connected to HC-SR04 Ultrasonic Sensor VCC
- D9 connected to HC-SR04 Ultrasonic Sensor TRIG
- D8 connected to HC-SR04 Ultrasonic Sensor ECHO
- D3 connected to Wifi module ESP8266-01 RX
- D2 connected to Wifi module ESP8266-01 TX
Wifi module ESP8266-01
- GND connected to Arduino UNO GND
- +3V3 connected to Arduino UNO 3.3V
- CH-PD Chip power down connected to Arduino UNO GND
- RX connected to Arduino UNO D3
- TX connected to Arduino UNO D2
HC-SR04 Ultrasonic Sensor
- VCC connected to Arduino UNO 5V
- TRIG connected to Arduino UNO D9
- ECHO connected to Arduino UNO D8
- GND connected to Arduino UNO GND
Documented Code
ArduCam Mega Code
/*
* This Arduino Sketch initializes and configures an ArduCam Mega camera.
* It captures images and processes the image data.
*/
#include <ArduCAM.h>
#include <SPI.h>
#include <Wire.h>
// Define the camera model and chip select pin
#define CAMERA_MODEL OV5642
#define CS_PIN 10
// Create ArduCAM object
ArduCAM myCAM(CAMERA_MODEL, CS_PIN);
void setup() {
// Initialize serial communication
Serial.begin(115200);
// Initialize SPI
SPI.begin();
// Initialize the camera
myCAM.begin();
// Set the camera resolution
myCAM.setResolution(ARDUCAM_5MP);
// Additional configuration as needed
}
void loop() {
// Capture an image
myCAM.takePicture();
// Read the image data
uint8_t *imageData = myCAM.readPicture();
// Process the image data as needed
// ...
}
OV7670 Code
/*
* OV7670 basic initialization and image capture example for Arduino UNO
* This code initializes the OV7670 camera module, captures image data, and
* processes it. The captured data is then sent over the serial interface.
*/
#include <Wire.h>
// OV7670 I2C address (might vary)
#define OV7670_I2C_ADDRESS 0x21
// Function to write a value to a register
void writeRegister(uint8_t reg, uint8_t value) {
Wire.beginTransmission(OV7670_I2C_ADDRESS);
Wire.write(reg);
Wire.write(value);
Wire.endTransmission();
}
void setup() {
// Initialize serial communication
Serial.begin(115200);
// Initialize I2C
Wire.begin();
// Configure OV7670 registers
// (Refer to the OV7670 datasheet for detailed register information)
writeRegister(0x12, 0x80); // Reset register
delay(100);
// Additional register configurations
// ...
}
void loop() {
// Capture image data
// ...
// Process and send image data
// ...
// Delay between captures
delay(1000);
}
Arduino UNO Code
/*
* This Arduino Sketch interfaces with an HC-SR04 ultrasonic sensor, an OV7670
* camera module, an ArduCam Mega, and a Wifi module ESP8266-01. The system
* records data from the sensor and camera, and sends the data to a connected
* device via WiFi.
*/
#include <Wire.h>
#include <SPI.h>
#include <ArduCAM.h>
#include <ESP8266WiFi.h>
// Pin definitions
const int trigPin = 9;
const int echoPin = 8;
const int csPin = 10;
// WiFi credentials
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
// ArduCam object
ArduCAM myCAM(OV7670, csPin);
void setup() {
// Initialize serial communication
Serial.begin(115200);
// Initialize WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// Initialize ArduCAM
pinMode(csPin, OUTPUT);
digitalWrite(csPin, HIGH);
SPI.begin();
myCAM.InitCAM();
// Initialize ultrasonic sensor pins
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
// Measure distance using HC-SR04
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration / 2) / 29.1;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Capture image with ArduCAM
myCAM.flush_fifo();
myCAM.clear_fifo_flag();
myCAM.start_capture();
while (!myCAM.get_bit(ARDUCHIP_TRIG, CAP_DONE_MASK));
Serial.println("Capture Done.");
// Send data to connected device
if (WiFi.status() == WL_CONNECTED) {
WiFiClient client;
if (client.connect("your_server_ip", your_server_port)) {
client.print("Distance: ");