You are on page 1of 3

#include <SoftwareSerial.

h>
#include <TinyGPS++.h>

// Pin definitions
#define MOTION_SENSOR_PIN 2
#define BUZZER_PIN 3
#define DOOR_SWITCH_PIN 4
#define RED_LED_PIN 5
#define BLUE_LED_PIN 6
#define CAMERA_TRIGGER_PIN 7 // Pin to trigger image capture

// GSM module settings


#define GSM_RX_PIN 8
#define GSM_TX_PIN 9
#define GSM_RESET_PIN 10
#define GSM_BAUD_RATE 9600
#define RECIPIENT_NUMBER "+1234567890" // Replace with your recipient number

// GPS module settings


#define GPS_RX_PIN 11
#define GPS_TX_PIN 12
#define GPS_BAUD_RATE 9600

// Time thresholds
#define MOTION_TIMEOUT_MS 5000 // 5 seconds
#define DOOR_TIMEOUT_MS 5000 // 5 seconds

// Initialize objects
SoftwareSerial gsmSerial(GSM_RX_PIN, GSM_TX_PIN);
TinyGPSPlus gps;

// Function prototypes
void sendSMS(String message);
void activateAlarm();
void deactivateAlarm();
void captureImage();

// Variables to track sensor states


bool motionDetected = false;
bool doorOpened = false;

// Timestamps for sensor triggers


unsigned long motionTriggerTime = 0;
unsigned long doorTriggerTime = 0;
void setup() {
pinMode(MOTION_SENSOR_PIN, INPUT);
pinMode(DOOR_SWITCH_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(RED_LED_PIN, OUTPUT);
pinMode(BLUE_LED_PIN, OUTPUT);
pinMode(CAMERA_TRIGGER_PIN, OUTPUT);

// Initialize GSM module


gsmSerial.begin(GSM_BAUD_RATE);
gsmSerial.println("AT+CMGF=1"); // Set SMS mode to text
delay(1000);

// Initialize GPS module


Serial.begin(GPS_BAUD_RATE);
}

void loop() {
// Check motion sensor
if (digitalRead(MOTION_SENSOR_PIN) == HIGH) {
motionDetected = true;
motionTriggerTime = millis();
} else if (millis() - motionTriggerTime > MOTION_TIMEOUT_MS) {
motionDetected = false;
}

// Check door switch


if (digitalRead(DOOR_SWITCH_PIN) == HIGH) {
doorOpened = true;
doorTriggerTime = millis();
} else if (millis() - doorTriggerTime > DOOR_TIMEOUT_MS) {
doorOpened = false;
}

// Intrusion detection
if (motionDetected && doorOpened) {
activateAlarm();
String message = "Intruder detected at your property!";
sendSMS(message);
captureImage();
delay(5000);
}

// Check GPS data


while (gps.available() > 0) {
if (gps.location.isValid()) {
String message = "Your property is located at: " +
String(gps.location.lat(), 6) + ", " +
String(gps.location.lng(), 6 + "," + String(gps.date.month()) + "/" +
String(gps.date.day()) + "/" +
String(gps.date.year() + "," + String(gps.time.hour()) + ":" +
String(gps.time.minute()) + ":" + String(gps.time.second());
sendSMS(message);
}
}
}

void sendSMS(String message) {


gsmSerial.print("AT+CMGS=\"");
gsmSerial.print(RECIPIENT_NUMBER);
gsmSerial.println("\"");
delay(1000);
gsmSerial.println(message);
gsmSerial.println((char)26);
delay(1000);
}

void activateAlarm() {
digitalWrite(BUZZER_PIN, HIGH);
digitalWrite(RED_LED_PIN, HIGH);
digitalWrite(BLUE_LED_PIN, HIGH);
delay(1000);
}

void deactivateAlarm() {
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(BLUE_LED_PIN, LOW);
}

void captureImage() {
digitalWrite(CAMERA_TRIGGER_PIN, HIGH);
delay(100);
digitalWrite(CAMERA_TRIGGER_PIN, LOW);
}

You might also like