0
votes

I was creating a PIR Motion sensor and GSM Module SMS 800A based Security System with Arduino UNO

But I am facing a problem from 2 to 3 days that whenever I send a SMS from my phone to my GSM module then the Motion sensor automatically detects a motion and makes the system active.

Please tell me why is this happening?

This is my code :->

#include <SoftwareSerial.h>
#include <Sim800L.h>
#include <MemoryFree.h>

Sim800L GSM(10, 11);
SoftwareSerial sim800(10, 11); //2 is TX and 3 is RX

int day, month, year, minute, second, hour;
int onDay, onMonth, onYear, onMinute, onSecond, onHour;
int offDay, offMonth, offYear, offMinute, offSecond, offHour;

unsigned long prevMillis;
unsigned long currentMillis;
const long interval = 30000;
boolean timeStatus = false;
int RTCPerm;
int led = 13;
int pin = 5;
int x = 1;
int m = 0;
char y;
char t;
int value = 0;
int pirState = LOW;
char n[3];
int j = 0;
int i = 0;
char data[200] = {};
int condition = 0;
char DTMF[200] = {};
int z;
int delayOnMinute, delayOffMinute, delayOnHour, delayOffHour;
// connections
//
// GSM                          ARDUINO UNO
//
// GND           ----->         GND
// TX            ----->         2
// RX            ----->         3
// Power Supply  ----->         12V 1A or 5V 2A
//
// Motion Sensor                Arduino UNO
//
// VCC           ----->         5V
// GND           ----->         GND
// OUT           ----->         4


void setup() {
  pinMode(led, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(pin, INPUT);
  Serial.begin(9600);
  sim800.begin(9600);
  delay(6000);
  sim800.println(F("AT+CMGF=1"));
  sim800.println(F("AT+CNMI=2, 2, 0, 0, 0"));
  sim800.println(F("AT+DDET=1"));

  GSM.begin(9600);   // for RTC data input
  delay(5000);

  onMinute = 30;
  onHour = 17;

  offMinute = 00;
  offHour = 15;
}

void loop() {
  while (RTCPerm == 0) {
    RTCStatus();
    prevMillis = millis();

    while (currentMillis - prevMillis != interval) {
      // save the last time you blinked the LED
     currentMillis = millis();

      SMSRecieve();
      if (timeStatus == true) {
        value = digitalRead(pin);
        if (value == HIGH) {
          digitalWrite(led, HIGH);
          if (pirState == LOW) {
            goto Motion;
          }
        }
      }
    }
  }
  Serial.println("Hello");

  value = digitalRead(pin);

  if (value == HIGH) {
    digitalWrite(led, HIGH);
    if (pirState == LOW) {
Motion:
      Serial.println(F("Motion Detected!"));
      sim800.begin(9600);

So in the loop function you can see the SMS Receive function that checks whether there is any incoming SMS or not. So whenever I send a SMS to my GSM then my Motion sensor gets active and goes to label Motion which activates other functioning like starting the alarm etc.

This is the code of SMSRecieve() Function :->

void SMSRecieve() {
 
Samarth:
  /* if (condition == 2) {
     memset(data, 0, sizeof(data));
     y = 0;
     condition = 1;
    }*/
  if (sim800.available())
  { // Printing the collected data
    y = sim800.read();
    Serial.write(y);
    if (y == '#') {
      goto skip;
    }
    data[i] = y;
    i++;
skip:
    if (strstr(data, "off") || strstr(data, "OFF") || strstr(data, "Off")) {
    // Do Something 
    } else if (strstr(data, "Lighton") || strstr(data, "lighton") || strstr(data, "LightOn") || strstr(data, "LIGHTON")) {
    // Do Something
    }else if (strstr(data, "Lightoff") || strstr(data, "lightoff") || strstr(data, "LightOff") || strstr(data, "LIGHTOFF")) {
    // Do Something
}
}
}

Please help me where I am doing wrong ?

1

1 Answers

0
votes

After testing the situation again and again I got the solution and the reason why that was happening.

REASON:- PIR Motion Sensors also detect the RF and other unseen frequencies in the air. So whenever I sent a SMS to my GSM, it was detected by my PIR Motion Sensor.

SOLUTION:- The GSM Module should be kept with at least 2 feet of distance from the PIR Motion Sensor