Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Troubleshooting
  3. PIR Sensor Gives False High in 55 Minutes (Can't find a way to solve)

PIR Sensor Gives False High in 55 Minutes (Can't find a way to solve)

Scheduled Pinned Locked Moved Troubleshooting
9 Posts 4 Posters 377 Views 4 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • V Offline
    V Offline
    Vinod Amarathunga
    wrote on last edited by
    #1

    Hi,

    I have built a system to identify motions and fire alerts. System can send a SMS in case if it's identify such alerts.

    System consist of two parts,

    Part 1: Armed and Disarmed using a PIN (Using Arduino Uno)

    This Module Consists with 4*4 PIN PAD, I2C Module, 2 LEDs and Arduino UNO This part works fine

    Part 2: Sensor Systems and SMS System

    This module consists of Arduino NANO, MQ135 Gas Sensor, PIR Sensor, SIM 800L Module, Tamper Switches This part also works, but in every 55 minutes it generates a false motion alert and I could not troubleshoot the issue.
    Schematics is attachedalt text

    Codes as Below,
    Part 1: Test6-LCD_Intigrated_Working_Temper.ino

    #include <Keypad.h>
    #include<EEPROM.h>
    #include <Wire.h> // Library for I2C communication
    #include <LiquidCrystal_I2C.h> // Library for LCD
    char password[4];
    char pass[4],pass1[4];
    int i=0;
    int k=0;
    char customKey=0;
    byte col = 0;
    const byte ROWS = 4; //four rows
    const byte COLS = 4; //four columns
    char keys[ROWS][COLS] = {
    
    {'1','2','3','A'},
    
    {'4','5','6','B'},
    
    {'7','8','9','C'},
    
    {'*','0','#','D'}
    
    };
    
    
    byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
    
    byte colPins[COLS] = {13, 12, 11, 10}; //connect to the column pinouts of the keypad
    
    //initialize an instance of class NewKeypad
    
    Keypad customKeypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
    LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 2);
    void setup()
    {
      lcd.begin();
    
      Serial.begin(9600);
      pinMode(4, INPUT);      // Tamper Signal
      pinMode(3, OUTPUT); //Armed 
      pinMode(2, OUTPUT); //Disarmed
    
      lcd.setCursor(0, 0);
      lcd.print ("--SECURE ROOM!--");
      Serial.print("Server Room");
      lcd.setCursor(0, 1);
      lcd.print ("PLEASE ENTER PIN");
      Serial.print("\n*********Keypad Lock********* ");
      delay(2000);
      Serial.println("\n*********Enter Ur Passkey:*********");
    
      for(int j=0;j<4;j++)
        EEPROM.write(j, j+49);
      for(int j=0;j<4;j++)
        pass[j]=EEPROM.read(j);
    }
    
    void Armed(){
    
      digitalWrite(3, HIGH);
      digitalWrite(2, LOW);
      Serial.println("\n***System is Armed***");
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("--SYSTEM ARMED--");
      lcd.setCursor(0, 1);
      lcd.print("-SENSORS ACTIVE-");
      delay (2000);
      lcd.noBacklight();
      i=0;
      customKey=0;
    
      }
    
    void change()
    {
      int j=0;
     lcd.backlight();
      Serial.println("\n*********UR Current Passk*********");
      lcd.clear(); 
          lcd.setCursor(0, 0);
          lcd.print("   CURRENT PIN   ");
    
      while(j<4)
      {
        char key=customKeypad.getKey();
        if(key)
        {
          pass1[j++]=key;
    
          Serial.print(key);
          lcd.setCursor(j+6, 1);
          lcd.print(key);
    
    
        }
        key=0;
      }
      delay(500);
    
      if((strncmp(pass1, pass, 4)))
      {
    
    
        Serial.println("\n*********Wrong Passkey*********");
        lcd.clear(); 
        lcd.setCursor(0, 0);
          lcd.print("  UNAUTHORIZED  ");
    
        Serial.println("\n*********UNAuthorized Access*********");
          lcd.setCursor(0, 1);
          lcd.print(" ACCESS  DENIED ");
        delay(10000);
      }
      else
      {
        j=0;
    
    
        Serial.println("\n*********Enter New Passk: *********");
          lcd.clear(); 
          lcd.setCursor(0, 0);
          lcd.print(" ENTER NEW PIN! ");
    
        while(j<4)
        {
          char key=customKeypad.getKey();
          if(key)
          {
            pass[j]=key;
    
            Serial.print("*");
            EEPROM.write(j,key);
            lcd.setCursor(j+6, 1);
            lcd.print(key);
            j++;
    
          }
        }
    
        Serial.println("*********Done*********");
        lcd.clear(); 
          lcd.setCursor(0, 0);
          lcd.print("----UPDATED!----");
        delay(1000);
      }
    
    
      Serial.println("\n*********Enter Ur Passk: *********");
      lcd.clear(); 
    
          lcd.setCursor(2, 0);
          lcd.print ("SECURE ROOM!");
          lcd.setCursor(0, 1);
          lcd.print ("PLEASE ENTER PIN");
          lcd.noBacklight();
      customKey=0;
    }
    
    
    void tamper(){
      Serial.println("\n***System is Tampered***");
      lcd.clear();
      lcd.setCursor(2, 0);
      lcd.print("--TAMPERED--");
      lcd.setCursor(0, 1);
      lcd.print("WARN COMPROMISED");
      delay (2000);
      lcd.backlight();
      i=0;
      customKey=0;
    
      }
    
    void loop()
    { 
      Serial.println(digitalRead(4));
      customKey = customKeypad.getKey();
      if(customKey=='A')
        Armed();
    
        if(customKey=='C')
        change();
       /* 
        if(digitalRead(4)==LOW)
        tamper();
     */
      if (customKey)
      {
        lcd.backlight();
        password[i++]=customKey;
    
        Serial.print("*");
        lcd.setCursor(0, 0);
        lcd.print("    PIN INPUT    ");
        lcd.setCursor(0,1);
        lcd.print("       ----     ") ;
        lcd.setCursor(i+6, 1);
        lcd.print("*");
    
    
          }
    
    
    
    
      if(i==4)
      {
        delay(200);
        for(int j=0;j<4;j++)
          pass[j]=EEPROM.read(j);
        if(!(strncmp(password, pass,4)))
        {
    
          Serial.println("\n*********Passkey Accepted*********");
        lcd.clear(); 
        lcd.setCursor(0, 0);
        lcd.print("---AUTHORIZED---");
        lcd.setCursor(0, 1);
        lcd.print("SYSTEM  DISARMED");
    
          delay(1000);
          digitalWrite(2, HIGH);
          digitalWrite(3, LOW);
          i=0;
    
        }
        else
        {
    
          Serial.println("\n*********Access Denied*********");
          lcd.clear(); 
          lcd.setCursor(0, 0);
          lcd.print("  UNAUTHORIZED  ");
          lcd.setCursor(0, 1);
          lcd.print(" ACCESS  DENIED ");
    
          delay (5000);
    
          Serial.println("\n*********Enter Passkey: *********");
          lcd.clear(); 
          lcd.setCursor(0, 0);
          lcd.print ("--SECURE ROOM!--");
          lcd.setCursor(0, 1);
          lcd.print ("PLEASE ENTER PIN");
          lcd.noBacklight();
    
          i=0;
    
        }
      }
    }
    

    Part 2: Test7_Tested_Tamper_Smoke_PIR_GSM.ino.ino

    #include <SoftwareSerial.h>
    SoftwareSerial mySerial(6, 5); //SIM800L Rx Tx
    char msg;
    String textMessage;
    
    int smokeA0 = A0;            // MQ135 Analog Input
    int led = 13;                // the pin that the LED is atteched to
    int priState = LOW;             // by default, no motion detected
    int TampSignal = 11;       // Tamper 5V Signal
    int sensorThres = 150; //Smoke Air Quality Threshold
    int pretamper = LOW;
    bool premotion = false;
    bool prefire = false;
    
    void setup() {
      pinMode(led, OUTPUT);      // initalize LED as an output
      pinMode(3, INPUT);    // initialize sensor as an input
      pinMode(TampSignal, OUTPUT); // Tamper Drive Signal as Output
      pinMode(10, INPUT);    // Tamper Alert
      Serial.begin(9600);        // initialize serial
      mySerial.begin(9600);
    }
    
    
    void SmokeSMS()
    {
      Serial.println("Warning!! Secure Room Fire Detected");
      mySerial.println("AT+CMGF=1");    //Sets the GSM Module in Text Mode
      delay(1000);  // Delay of 1000 milli seconds or 1 second
      mySerial.println("AT+CMGS=\"+xx\"\r");
      delay(1000);
      mySerial.println("Warning!! Secure Room Fire Detected");
      mySerial.println((char)26);// ASCII code of CTRL+Z
      delay(1000);
      mySerial.println("AT+CMGD=2");
    
      delay(5000);
    
      Serial.println("Warning!! Secure Room Fire Detected");
      mySerial.println("AT+CMGF=1");    //Sets the GSM Module in Text Mode
      delay(1000);  // Delay of 1000 milli seconds or 1 second
      mySerial.println("AT+CMGS=\"+xx2\"\r");
      delay(1000);
      mySerial.println("Warning!! Secure Room Fire Detected");
      mySerial.println((char)26);// ASCII code of CTRL+Z
      delay(1000);
      mySerial.println("AT+CMGD=2");
    
    }
    
    void MotionSMS()
    {
      Serial.println("Warning!! Secure Room Motion Detected");
      mySerial.println("AT+CMGF=1");    //Sets the GSM Module in Text Mode
      delay(1000);  // Delay of 1000 milli seconds or 1 second
      mySerial.println("AT+CMGS=\"xx\"\r");
      delay(1000);
      mySerial.println("PIN 3 HIGH");
      mySerial.println((char)26);// ASCII code of CTRL+Z
      delay(1000);
      mySerial.println("AT+CMGD=2");
    
      delay(5000);
    /*
      Serial.println("Warning!! Secure Room Motion Detected");
      mySerial.println("AT+CMGF=1");    //Sets the GSM Module in Text Mode
      delay(1000);  // Delay of 1000 milli seconds or 1 second
      mySerial.println("AT+CMGS=\"xx2\"\r");
      delay(1000);
      mySerial.println("Warning!! Secure Room Motion Detected");
      mySerial.println((char)26);// ASCII code of CTRL+Z
      delay(1000);
      mySerial.println("AT+CMGD=2");
    */
    
    }
    
    void TamperSMS()
    {
    
    
      Serial.println("Warning!! System Tamper Detected");
      mySerial.println("AT+CMGF=1");    //Sets the GSM Module in Text Mode
      delay(1000);  // Delay of 1000 milli seconds or 1 second
      mySerial.println("AT+CMGS=\"xx2\"\r");
      delay(1000);
      mySerial.println("Warning!! System Tamper Detected");
      mySerial.println((char)26);// ASCII code of CTRL+Z
      delay(1000);
      mySerial.println("AT+CMGD=2");
    
      delay(5000);
    
      Serial.println("Warning!! System Tamper Detected");
      mySerial.println("AT+CMGF=1");    //Sets the GSM Module in Text Mode
      delay(1000);  // Delay of 1000 milli seconds or 1 second
      mySerial.println("AT+CMGS=\"xx\"\r");
      delay(1000);
      mySerial.println("Warning!! System Tamper Detected");
      mySerial.println((char)26);// ASCII code of CTRL+Z
      delay(1000);
      mySerial.println("AT+CMGD=2");
    
    }
    
    
    void loop() {
      int analogSensor = analogRead(smokeA0);
      digitalWrite(TampSignal, HIGH); // Drive Signal Always High
      //val = digitalRead(3);   // read sensor value
      //  ReceiveMessage(); //System Recive Messages
      //Serial.print("Smoke Level:");
      //Serial.println(analogSensor);
      Serial.println(digitalRead(3));
      if (analogSensor > sensorThres  ) {           // check if the sensor is HIGH and Armed Status
        digitalWrite(led, HIGH);   // turn LED ON
        Serial.print("\nSmoke Alert....!!!");
        SmokeSMS(); // Smoke SMS Alert
        delay(100);                // delay 100 milliseconds
    
      }
    
      else if ( priState == LOW && digitalRead(3) == HIGH && digitalRead(7) == HIGH ) {
    
        digitalWrite(led, HIGH);   // turn LED ON
        Serial.println("Motion detected!");
        MotionSMS(); //Motion SMS
        priState = HIGH; // Previous Motion Status set to High
    
        delay(15000);
    
    
      }
    
    
      else if ( digitalRead(7) == HIGH && digitalRead(10) == LOW )
      {
    
        digitalWrite(led, HIGH);   // turn LED ON and Temper Alarm On
        Serial.println("One of the TIP Switches being Trigered");
        if ( pretamper == LOW ) {
          TamperSMS(); // Tamper SMS
          pretamper  = HIGH;
          delay(15000);
        }
    
      }
    
    
    
      else {
        digitalWrite(led, LOW); // turn LED OFF
        digitalWrite(11, HIGH); // Tamper Signal
        delay(200);             // delay 200 milliseconds
        pretamper = LOW;
        //Serial.print("\n.....Normal.....");
    
        if (priState == HIGH) {
          Serial.println("Motion stopped!");
          priState = LOW;       // update variable state to LOW
    
        }
      }
    
    }
    

    I am loosing my mind because I could not find the problem of getting false alert in every 55 minutes.

    I am very grateful any one can help.

    YveauxY badmannenB 2 Replies Last reply
    0
    • V Vinod Amarathunga

      Hi,

      I have built a system to identify motions and fire alerts. System can send a SMS in case if it's identify such alerts.

      System consist of two parts,

      Part 1: Armed and Disarmed using a PIN (Using Arduino Uno)

      This Module Consists with 4*4 PIN PAD, I2C Module, 2 LEDs and Arduino UNO This part works fine

      Part 2: Sensor Systems and SMS System

      This module consists of Arduino NANO, MQ135 Gas Sensor, PIR Sensor, SIM 800L Module, Tamper Switches This part also works, but in every 55 minutes it generates a false motion alert and I could not troubleshoot the issue.
      Schematics is attachedalt text

      Codes as Below,
      Part 1: Test6-LCD_Intigrated_Working_Temper.ino

      #include <Keypad.h>
      #include<EEPROM.h>
      #include <Wire.h> // Library for I2C communication
      #include <LiquidCrystal_I2C.h> // Library for LCD
      char password[4];
      char pass[4],pass1[4];
      int i=0;
      int k=0;
      char customKey=0;
      byte col = 0;
      const byte ROWS = 4; //four rows
      const byte COLS = 4; //four columns
      char keys[ROWS][COLS] = {
      
      {'1','2','3','A'},
      
      {'4','5','6','B'},
      
      {'7','8','9','C'},
      
      {'*','0','#','D'}
      
      };
      
      
      byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
      
      byte colPins[COLS] = {13, 12, 11, 10}; //connect to the column pinouts of the keypad
      
      //initialize an instance of class NewKeypad
      
      Keypad customKeypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
      LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 2);
      void setup()
      {
        lcd.begin();
      
        Serial.begin(9600);
        pinMode(4, INPUT);      // Tamper Signal
        pinMode(3, OUTPUT); //Armed 
        pinMode(2, OUTPUT); //Disarmed
      
        lcd.setCursor(0, 0);
        lcd.print ("--SECURE ROOM!--");
        Serial.print("Server Room");
        lcd.setCursor(0, 1);
        lcd.print ("PLEASE ENTER PIN");
        Serial.print("\n*********Keypad Lock********* ");
        delay(2000);
        Serial.println("\n*********Enter Ur Passkey:*********");
      
        for(int j=0;j<4;j++)
          EEPROM.write(j, j+49);
        for(int j=0;j<4;j++)
          pass[j]=EEPROM.read(j);
      }
      
      void Armed(){
      
        digitalWrite(3, HIGH);
        digitalWrite(2, LOW);
        Serial.println("\n***System is Armed***");
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("--SYSTEM ARMED--");
        lcd.setCursor(0, 1);
        lcd.print("-SENSORS ACTIVE-");
        delay (2000);
        lcd.noBacklight();
        i=0;
        customKey=0;
      
        }
      
      void change()
      {
        int j=0;
       lcd.backlight();
        Serial.println("\n*********UR Current Passk*********");
        lcd.clear(); 
            lcd.setCursor(0, 0);
            lcd.print("   CURRENT PIN   ");
      
        while(j<4)
        {
          char key=customKeypad.getKey();
          if(key)
          {
            pass1[j++]=key;
      
            Serial.print(key);
            lcd.setCursor(j+6, 1);
            lcd.print(key);
      
      
          }
          key=0;
        }
        delay(500);
      
        if((strncmp(pass1, pass, 4)))
        {
      
      
          Serial.println("\n*********Wrong Passkey*********");
          lcd.clear(); 
          lcd.setCursor(0, 0);
            lcd.print("  UNAUTHORIZED  ");
      
          Serial.println("\n*********UNAuthorized Access*********");
            lcd.setCursor(0, 1);
            lcd.print(" ACCESS  DENIED ");
          delay(10000);
        }
        else
        {
          j=0;
      
      
          Serial.println("\n*********Enter New Passk: *********");
            lcd.clear(); 
            lcd.setCursor(0, 0);
            lcd.print(" ENTER NEW PIN! ");
      
          while(j<4)
          {
            char key=customKeypad.getKey();
            if(key)
            {
              pass[j]=key;
      
              Serial.print("*");
              EEPROM.write(j,key);
              lcd.setCursor(j+6, 1);
              lcd.print(key);
              j++;
      
            }
          }
      
          Serial.println("*********Done*********");
          lcd.clear(); 
            lcd.setCursor(0, 0);
            lcd.print("----UPDATED!----");
          delay(1000);
        }
      
      
        Serial.println("\n*********Enter Ur Passk: *********");
        lcd.clear(); 
      
            lcd.setCursor(2, 0);
            lcd.print ("SECURE ROOM!");
            lcd.setCursor(0, 1);
            lcd.print ("PLEASE ENTER PIN");
            lcd.noBacklight();
        customKey=0;
      }
      
      
      void tamper(){
        Serial.println("\n***System is Tampered***");
        lcd.clear();
        lcd.setCursor(2, 0);
        lcd.print("--TAMPERED--");
        lcd.setCursor(0, 1);
        lcd.print("WARN COMPROMISED");
        delay (2000);
        lcd.backlight();
        i=0;
        customKey=0;
      
        }
      
      void loop()
      { 
        Serial.println(digitalRead(4));
        customKey = customKeypad.getKey();
        if(customKey=='A')
          Armed();
      
          if(customKey=='C')
          change();
         /* 
          if(digitalRead(4)==LOW)
          tamper();
       */
        if (customKey)
        {
          lcd.backlight();
          password[i++]=customKey;
      
          Serial.print("*");
          lcd.setCursor(0, 0);
          lcd.print("    PIN INPUT    ");
          lcd.setCursor(0,1);
          lcd.print("       ----     ") ;
          lcd.setCursor(i+6, 1);
          lcd.print("*");
      
      
            }
      
      
      
      
        if(i==4)
        {
          delay(200);
          for(int j=0;j<4;j++)
            pass[j]=EEPROM.read(j);
          if(!(strncmp(password, pass,4)))
          {
      
            Serial.println("\n*********Passkey Accepted*********");
          lcd.clear(); 
          lcd.setCursor(0, 0);
          lcd.print("---AUTHORIZED---");
          lcd.setCursor(0, 1);
          lcd.print("SYSTEM  DISARMED");
      
            delay(1000);
            digitalWrite(2, HIGH);
            digitalWrite(3, LOW);
            i=0;
      
          }
          else
          {
      
            Serial.println("\n*********Access Denied*********");
            lcd.clear(); 
            lcd.setCursor(0, 0);
            lcd.print("  UNAUTHORIZED  ");
            lcd.setCursor(0, 1);
            lcd.print(" ACCESS  DENIED ");
      
            delay (5000);
      
            Serial.println("\n*********Enter Passkey: *********");
            lcd.clear(); 
            lcd.setCursor(0, 0);
            lcd.print ("--SECURE ROOM!--");
            lcd.setCursor(0, 1);
            lcd.print ("PLEASE ENTER PIN");
            lcd.noBacklight();
      
            i=0;
      
          }
        }
      }
      

      Part 2: Test7_Tested_Tamper_Smoke_PIR_GSM.ino.ino

      #include <SoftwareSerial.h>
      SoftwareSerial mySerial(6, 5); //SIM800L Rx Tx
      char msg;
      String textMessage;
      
      int smokeA0 = A0;            // MQ135 Analog Input
      int led = 13;                // the pin that the LED is atteched to
      int priState = LOW;             // by default, no motion detected
      int TampSignal = 11;       // Tamper 5V Signal
      int sensorThres = 150; //Smoke Air Quality Threshold
      int pretamper = LOW;
      bool premotion = false;
      bool prefire = false;
      
      void setup() {
        pinMode(led, OUTPUT);      // initalize LED as an output
        pinMode(3, INPUT);    // initialize sensor as an input
        pinMode(TampSignal, OUTPUT); // Tamper Drive Signal as Output
        pinMode(10, INPUT);    // Tamper Alert
        Serial.begin(9600);        // initialize serial
        mySerial.begin(9600);
      }
      
      
      void SmokeSMS()
      {
        Serial.println("Warning!! Secure Room Fire Detected");
        mySerial.println("AT+CMGF=1");    //Sets the GSM Module in Text Mode
        delay(1000);  // Delay of 1000 milli seconds or 1 second
        mySerial.println("AT+CMGS=\"+xx\"\r");
        delay(1000);
        mySerial.println("Warning!! Secure Room Fire Detected");
        mySerial.println((char)26);// ASCII code of CTRL+Z
        delay(1000);
        mySerial.println("AT+CMGD=2");
      
        delay(5000);
      
        Serial.println("Warning!! Secure Room Fire Detected");
        mySerial.println("AT+CMGF=1");    //Sets the GSM Module in Text Mode
        delay(1000);  // Delay of 1000 milli seconds or 1 second
        mySerial.println("AT+CMGS=\"+xx2\"\r");
        delay(1000);
        mySerial.println("Warning!! Secure Room Fire Detected");
        mySerial.println((char)26);// ASCII code of CTRL+Z
        delay(1000);
        mySerial.println("AT+CMGD=2");
      
      }
      
      void MotionSMS()
      {
        Serial.println("Warning!! Secure Room Motion Detected");
        mySerial.println("AT+CMGF=1");    //Sets the GSM Module in Text Mode
        delay(1000);  // Delay of 1000 milli seconds or 1 second
        mySerial.println("AT+CMGS=\"xx\"\r");
        delay(1000);
        mySerial.println("PIN 3 HIGH");
        mySerial.println((char)26);// ASCII code of CTRL+Z
        delay(1000);
        mySerial.println("AT+CMGD=2");
      
        delay(5000);
      /*
        Serial.println("Warning!! Secure Room Motion Detected");
        mySerial.println("AT+CMGF=1");    //Sets the GSM Module in Text Mode
        delay(1000);  // Delay of 1000 milli seconds or 1 second
        mySerial.println("AT+CMGS=\"xx2\"\r");
        delay(1000);
        mySerial.println("Warning!! Secure Room Motion Detected");
        mySerial.println((char)26);// ASCII code of CTRL+Z
        delay(1000);
        mySerial.println("AT+CMGD=2");
      */
      
      }
      
      void TamperSMS()
      {
      
      
        Serial.println("Warning!! System Tamper Detected");
        mySerial.println("AT+CMGF=1");    //Sets the GSM Module in Text Mode
        delay(1000);  // Delay of 1000 milli seconds or 1 second
        mySerial.println("AT+CMGS=\"xx2\"\r");
        delay(1000);
        mySerial.println("Warning!! System Tamper Detected");
        mySerial.println((char)26);// ASCII code of CTRL+Z
        delay(1000);
        mySerial.println("AT+CMGD=2");
      
        delay(5000);
      
        Serial.println("Warning!! System Tamper Detected");
        mySerial.println("AT+CMGF=1");    //Sets the GSM Module in Text Mode
        delay(1000);  // Delay of 1000 milli seconds or 1 second
        mySerial.println("AT+CMGS=\"xx\"\r");
        delay(1000);
        mySerial.println("Warning!! System Tamper Detected");
        mySerial.println((char)26);// ASCII code of CTRL+Z
        delay(1000);
        mySerial.println("AT+CMGD=2");
      
      }
      
      
      void loop() {
        int analogSensor = analogRead(smokeA0);
        digitalWrite(TampSignal, HIGH); // Drive Signal Always High
        //val = digitalRead(3);   // read sensor value
        //  ReceiveMessage(); //System Recive Messages
        //Serial.print("Smoke Level:");
        //Serial.println(analogSensor);
        Serial.println(digitalRead(3));
        if (analogSensor > sensorThres  ) {           // check if the sensor is HIGH and Armed Status
          digitalWrite(led, HIGH);   // turn LED ON
          Serial.print("\nSmoke Alert....!!!");
          SmokeSMS(); // Smoke SMS Alert
          delay(100);                // delay 100 milliseconds
      
        }
      
        else if ( priState == LOW && digitalRead(3) == HIGH && digitalRead(7) == HIGH ) {
      
          digitalWrite(led, HIGH);   // turn LED ON
          Serial.println("Motion detected!");
          MotionSMS(); //Motion SMS
          priState = HIGH; // Previous Motion Status set to High
      
          delay(15000);
      
      
        }
      
      
        else if ( digitalRead(7) == HIGH && digitalRead(10) == LOW )
        {
      
          digitalWrite(led, HIGH);   // turn LED ON and Temper Alarm On
          Serial.println("One of the TIP Switches being Trigered");
          if ( pretamper == LOW ) {
            TamperSMS(); // Tamper SMS
            pretamper  = HIGH;
            delay(15000);
          }
      
        }
      
      
      
        else {
          digitalWrite(led, LOW); // turn LED OFF
          digitalWrite(11, HIGH); // Tamper Signal
          delay(200);             // delay 200 milliseconds
          pretamper = LOW;
          //Serial.print("\n.....Normal.....");
      
          if (priState == HIGH) {
            Serial.println("Motion stopped!");
            priState = LOW;       // update variable state to LOW
      
          }
        }
      
      }
      

      I am loosing my mind because I could not find the problem of getting false alert in every 55 minutes.

      I am very grateful any one can help.

      YveauxY Offline
      YveauxY Offline
      Yveaux
      Mod
      wrote on last edited by Yveaux
      #2

      @vinod-amarathunga where is mySensors in your setup? This is a troubleshooting forum for MySensors.
      Don't crosspost your question over the internet: https://www.google.com/search?q=Vinod+Amarathunga+fssg

      http://yveaux.blogspot.nl

      V 1 Reply Last reply
      0
      • V Vinod Amarathunga

        Hi,

        I have built a system to identify motions and fire alerts. System can send a SMS in case if it's identify such alerts.

        System consist of two parts,

        Part 1: Armed and Disarmed using a PIN (Using Arduino Uno)

        This Module Consists with 4*4 PIN PAD, I2C Module, 2 LEDs and Arduino UNO This part works fine

        Part 2: Sensor Systems and SMS System

        This module consists of Arduino NANO, MQ135 Gas Sensor, PIR Sensor, SIM 800L Module, Tamper Switches This part also works, but in every 55 minutes it generates a false motion alert and I could not troubleshoot the issue.
        Schematics is attachedalt text

        Codes as Below,
        Part 1: Test6-LCD_Intigrated_Working_Temper.ino

        #include <Keypad.h>
        #include<EEPROM.h>
        #include <Wire.h> // Library for I2C communication
        #include <LiquidCrystal_I2C.h> // Library for LCD
        char password[4];
        char pass[4],pass1[4];
        int i=0;
        int k=0;
        char customKey=0;
        byte col = 0;
        const byte ROWS = 4; //four rows
        const byte COLS = 4; //four columns
        char keys[ROWS][COLS] = {
        
        {'1','2','3','A'},
        
        {'4','5','6','B'},
        
        {'7','8','9','C'},
        
        {'*','0','#','D'}
        
        };
        
        
        byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
        
        byte colPins[COLS] = {13, 12, 11, 10}; //connect to the column pinouts of the keypad
        
        //initialize an instance of class NewKeypad
        
        Keypad customKeypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
        LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 2);
        void setup()
        {
          lcd.begin();
        
          Serial.begin(9600);
          pinMode(4, INPUT);      // Tamper Signal
          pinMode(3, OUTPUT); //Armed 
          pinMode(2, OUTPUT); //Disarmed
        
          lcd.setCursor(0, 0);
          lcd.print ("--SECURE ROOM!--");
          Serial.print("Server Room");
          lcd.setCursor(0, 1);
          lcd.print ("PLEASE ENTER PIN");
          Serial.print("\n*********Keypad Lock********* ");
          delay(2000);
          Serial.println("\n*********Enter Ur Passkey:*********");
        
          for(int j=0;j<4;j++)
            EEPROM.write(j, j+49);
          for(int j=0;j<4;j++)
            pass[j]=EEPROM.read(j);
        }
        
        void Armed(){
        
          digitalWrite(3, HIGH);
          digitalWrite(2, LOW);
          Serial.println("\n***System is Armed***");
          lcd.clear();
          lcd.setCursor(0, 0);
          lcd.print("--SYSTEM ARMED--");
          lcd.setCursor(0, 1);
          lcd.print("-SENSORS ACTIVE-");
          delay (2000);
          lcd.noBacklight();
          i=0;
          customKey=0;
        
          }
        
        void change()
        {
          int j=0;
         lcd.backlight();
          Serial.println("\n*********UR Current Passk*********");
          lcd.clear(); 
              lcd.setCursor(0, 0);
              lcd.print("   CURRENT PIN   ");
        
          while(j<4)
          {
            char key=customKeypad.getKey();
            if(key)
            {
              pass1[j++]=key;
        
              Serial.print(key);
              lcd.setCursor(j+6, 1);
              lcd.print(key);
        
        
            }
            key=0;
          }
          delay(500);
        
          if((strncmp(pass1, pass, 4)))
          {
        
        
            Serial.println("\n*********Wrong Passkey*********");
            lcd.clear(); 
            lcd.setCursor(0, 0);
              lcd.print("  UNAUTHORIZED  ");
        
            Serial.println("\n*********UNAuthorized Access*********");
              lcd.setCursor(0, 1);
              lcd.print(" ACCESS  DENIED ");
            delay(10000);
          }
          else
          {
            j=0;
        
        
            Serial.println("\n*********Enter New Passk: *********");
              lcd.clear(); 
              lcd.setCursor(0, 0);
              lcd.print(" ENTER NEW PIN! ");
        
            while(j<4)
            {
              char key=customKeypad.getKey();
              if(key)
              {
                pass[j]=key;
        
                Serial.print("*");
                EEPROM.write(j,key);
                lcd.setCursor(j+6, 1);
                lcd.print(key);
                j++;
        
              }
            }
        
            Serial.println("*********Done*********");
            lcd.clear(); 
              lcd.setCursor(0, 0);
              lcd.print("----UPDATED!----");
            delay(1000);
          }
        
        
          Serial.println("\n*********Enter Ur Passk: *********");
          lcd.clear(); 
        
              lcd.setCursor(2, 0);
              lcd.print ("SECURE ROOM!");
              lcd.setCursor(0, 1);
              lcd.print ("PLEASE ENTER PIN");
              lcd.noBacklight();
          customKey=0;
        }
        
        
        void tamper(){
          Serial.println("\n***System is Tampered***");
          lcd.clear();
          lcd.setCursor(2, 0);
          lcd.print("--TAMPERED--");
          lcd.setCursor(0, 1);
          lcd.print("WARN COMPROMISED");
          delay (2000);
          lcd.backlight();
          i=0;
          customKey=0;
        
          }
        
        void loop()
        { 
          Serial.println(digitalRead(4));
          customKey = customKeypad.getKey();
          if(customKey=='A')
            Armed();
        
            if(customKey=='C')
            change();
           /* 
            if(digitalRead(4)==LOW)
            tamper();
         */
          if (customKey)
          {
            lcd.backlight();
            password[i++]=customKey;
        
            Serial.print("*");
            lcd.setCursor(0, 0);
            lcd.print("    PIN INPUT    ");
            lcd.setCursor(0,1);
            lcd.print("       ----     ") ;
            lcd.setCursor(i+6, 1);
            lcd.print("*");
        
        
              }
        
        
        
        
          if(i==4)
          {
            delay(200);
            for(int j=0;j<4;j++)
              pass[j]=EEPROM.read(j);
            if(!(strncmp(password, pass,4)))
            {
        
              Serial.println("\n*********Passkey Accepted*********");
            lcd.clear(); 
            lcd.setCursor(0, 0);
            lcd.print("---AUTHORIZED---");
            lcd.setCursor(0, 1);
            lcd.print("SYSTEM  DISARMED");
        
              delay(1000);
              digitalWrite(2, HIGH);
              digitalWrite(3, LOW);
              i=0;
        
            }
            else
            {
        
              Serial.println("\n*********Access Denied*********");
              lcd.clear(); 
              lcd.setCursor(0, 0);
              lcd.print("  UNAUTHORIZED  ");
              lcd.setCursor(0, 1);
              lcd.print(" ACCESS  DENIED ");
        
              delay (5000);
        
              Serial.println("\n*********Enter Passkey: *********");
              lcd.clear(); 
              lcd.setCursor(0, 0);
              lcd.print ("--SECURE ROOM!--");
              lcd.setCursor(0, 1);
              lcd.print ("PLEASE ENTER PIN");
              lcd.noBacklight();
        
              i=0;
        
            }
          }
        }
        

        Part 2: Test7_Tested_Tamper_Smoke_PIR_GSM.ino.ino

        #include <SoftwareSerial.h>
        SoftwareSerial mySerial(6, 5); //SIM800L Rx Tx
        char msg;
        String textMessage;
        
        int smokeA0 = A0;            // MQ135 Analog Input
        int led = 13;                // the pin that the LED is atteched to
        int priState = LOW;             // by default, no motion detected
        int TampSignal = 11;       // Tamper 5V Signal
        int sensorThres = 150; //Smoke Air Quality Threshold
        int pretamper = LOW;
        bool premotion = false;
        bool prefire = false;
        
        void setup() {
          pinMode(led, OUTPUT);      // initalize LED as an output
          pinMode(3, INPUT);    // initialize sensor as an input
          pinMode(TampSignal, OUTPUT); // Tamper Drive Signal as Output
          pinMode(10, INPUT);    // Tamper Alert
          Serial.begin(9600);        // initialize serial
          mySerial.begin(9600);
        }
        
        
        void SmokeSMS()
        {
          Serial.println("Warning!! Secure Room Fire Detected");
          mySerial.println("AT+CMGF=1");    //Sets the GSM Module in Text Mode
          delay(1000);  // Delay of 1000 milli seconds or 1 second
          mySerial.println("AT+CMGS=\"+xx\"\r");
          delay(1000);
          mySerial.println("Warning!! Secure Room Fire Detected");
          mySerial.println((char)26);// ASCII code of CTRL+Z
          delay(1000);
          mySerial.println("AT+CMGD=2");
        
          delay(5000);
        
          Serial.println("Warning!! Secure Room Fire Detected");
          mySerial.println("AT+CMGF=1");    //Sets the GSM Module in Text Mode
          delay(1000);  // Delay of 1000 milli seconds or 1 second
          mySerial.println("AT+CMGS=\"+xx2\"\r");
          delay(1000);
          mySerial.println("Warning!! Secure Room Fire Detected");
          mySerial.println((char)26);// ASCII code of CTRL+Z
          delay(1000);
          mySerial.println("AT+CMGD=2");
        
        }
        
        void MotionSMS()
        {
          Serial.println("Warning!! Secure Room Motion Detected");
          mySerial.println("AT+CMGF=1");    //Sets the GSM Module in Text Mode
          delay(1000);  // Delay of 1000 milli seconds or 1 second
          mySerial.println("AT+CMGS=\"xx\"\r");
          delay(1000);
          mySerial.println("PIN 3 HIGH");
          mySerial.println((char)26);// ASCII code of CTRL+Z
          delay(1000);
          mySerial.println("AT+CMGD=2");
        
          delay(5000);
        /*
          Serial.println("Warning!! Secure Room Motion Detected");
          mySerial.println("AT+CMGF=1");    //Sets the GSM Module in Text Mode
          delay(1000);  // Delay of 1000 milli seconds or 1 second
          mySerial.println("AT+CMGS=\"xx2\"\r");
          delay(1000);
          mySerial.println("Warning!! Secure Room Motion Detected");
          mySerial.println((char)26);// ASCII code of CTRL+Z
          delay(1000);
          mySerial.println("AT+CMGD=2");
        */
        
        }
        
        void TamperSMS()
        {
        
        
          Serial.println("Warning!! System Tamper Detected");
          mySerial.println("AT+CMGF=1");    //Sets the GSM Module in Text Mode
          delay(1000);  // Delay of 1000 milli seconds or 1 second
          mySerial.println("AT+CMGS=\"xx2\"\r");
          delay(1000);
          mySerial.println("Warning!! System Tamper Detected");
          mySerial.println((char)26);// ASCII code of CTRL+Z
          delay(1000);
          mySerial.println("AT+CMGD=2");
        
          delay(5000);
        
          Serial.println("Warning!! System Tamper Detected");
          mySerial.println("AT+CMGF=1");    //Sets the GSM Module in Text Mode
          delay(1000);  // Delay of 1000 milli seconds or 1 second
          mySerial.println("AT+CMGS=\"xx\"\r");
          delay(1000);
          mySerial.println("Warning!! System Tamper Detected");
          mySerial.println((char)26);// ASCII code of CTRL+Z
          delay(1000);
          mySerial.println("AT+CMGD=2");
        
        }
        
        
        void loop() {
          int analogSensor = analogRead(smokeA0);
          digitalWrite(TampSignal, HIGH); // Drive Signal Always High
          //val = digitalRead(3);   // read sensor value
          //  ReceiveMessage(); //System Recive Messages
          //Serial.print("Smoke Level:");
          //Serial.println(analogSensor);
          Serial.println(digitalRead(3));
          if (analogSensor > sensorThres  ) {           // check if the sensor is HIGH and Armed Status
            digitalWrite(led, HIGH);   // turn LED ON
            Serial.print("\nSmoke Alert....!!!");
            SmokeSMS(); // Smoke SMS Alert
            delay(100);                // delay 100 milliseconds
        
          }
        
          else if ( priState == LOW && digitalRead(3) == HIGH && digitalRead(7) == HIGH ) {
        
            digitalWrite(led, HIGH);   // turn LED ON
            Serial.println("Motion detected!");
            MotionSMS(); //Motion SMS
            priState = HIGH; // Previous Motion Status set to High
        
            delay(15000);
        
        
          }
        
        
          else if ( digitalRead(7) == HIGH && digitalRead(10) == LOW )
          {
        
            digitalWrite(led, HIGH);   // turn LED ON and Temper Alarm On
            Serial.println("One of the TIP Switches being Trigered");
            if ( pretamper == LOW ) {
              TamperSMS(); // Tamper SMS
              pretamper  = HIGH;
              delay(15000);
            }
        
          }
        
        
        
          else {
            digitalWrite(led, LOW); // turn LED OFF
            digitalWrite(11, HIGH); // Tamper Signal
            delay(200);             // delay 200 milliseconds
            pretamper = LOW;
            //Serial.print("\n.....Normal.....");
        
            if (priState == HIGH) {
              Serial.println("Motion stopped!");
              priState = LOW;       // update variable state to LOW
        
            }
          }
        
        }
        

        I am loosing my mind because I could not find the problem of getting false alert in every 55 minutes.

        I am very grateful any one can help.

        badmannenB Offline
        badmannenB Offline
        badmannen
        wrote on last edited by badmannen
        #3

        @vinod-amarathunga
        On PIN 7 ( Pin 3 from your Leonardo) = do you have constant "HIGH" output ?
        else if ( priState == LOW && digitalRead(3) == HIGH && digitalRead(7) == HIGH ) {

        rPi 3 - UNO R3 - Mini - Nano - custom

        V 1 Reply Last reply
        0
        • K Offline
          K Offline
          kimot
          wrote on last edited by
          #4

          Simplify your code maximally.
          Remove PIR and UNO and connect D3 and D7 to correct levels.
          Remove SoftwareSerial and all SMS function.
          Only check serial debug messages for 4-5 hours run.
          If it will work, then little by little add other functions.
          My tip is problem with combination HW serial and SoftwareSerial.

          https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html

          1 Reply Last reply
          1
          • badmannenB badmannen

            @vinod-amarathunga
            On PIN 7 ( Pin 3 from your Leonardo) = do you have constant "HIGH" output ?
            else if ( priState == LOW && digitalRead(3) == HIGH && digitalRead(7) == HIGH ) {

            V Offline
            V Offline
            Vinod Amarathunga
            wrote on last edited by
            #5

            @badmannen

            Yes Correct, it's constant HIGH. unless any tamper switch triggered.

            badmannenB 1 Reply Last reply
            0
            • YveauxY Yveaux

              @vinod-amarathunga where is mySensors in your setup? This is a troubleshooting forum for MySensors.
              Don't crosspost your question over the internet: https://www.google.com/search?q=Vinod+Amarathunga+fssg

              V Offline
              V Offline
              Vinod Amarathunga
              wrote on last edited by
              #6

              @yveaux

              Sorry my mistake. The question you posted is a solved one this is a separate issue. Can I know how to use MySensors ?

              1 Reply Last reply
              0
              • V Vinod Amarathunga

                @badmannen

                Yes Correct, it's constant HIGH. unless any tamper switch triggered.

                badmannenB Offline
                badmannenB Offline
                badmannen
                wrote on last edited by
                #7

                @vinod-amarathunga my question is more if you measured it?
                Also as mentioned. Simplify your code. Brake up your if statements and step it through or debug print it.

                Then you can go back to your fancy complicated if statements when you now it is working 😄

                rPi 3 - UNO R3 - Mini - Nano - custom

                1 Reply Last reply
                0
                • V Offline
                  V Offline
                  Vinod Amarathunga
                  wrote on last edited by
                  #8

                  After tons of research found a way to solve this issue.

                  This is common for ordinary PIR sensors when we use the 5V out from Arduino. Therefore we have to separate the power for PIR and the Arduino using a Opto Coupler and some transistors to smooth the signal. Now the solution works fine.

                  I am posting here to help someone stuck with same issue.![alt text](PIR Isolation.jpg image url)

                  YveauxY 1 Reply Last reply
                  1
                  • V Vinod Amarathunga

                    After tons of research found a way to solve this issue.

                    This is common for ordinary PIR sensors when we use the 5V out from Arduino. Therefore we have to separate the power for PIR and the Arduino using a Opto Coupler and some transistors to smooth the signal. Now the solution works fine.

                    I am posting here to help someone stuck with same issue.![alt text](PIR Isolation.jpg image url)

                    YveauxY Offline
                    YveauxY Offline
                    Yveaux
                    Mod
                    wrote on last edited by
                    #9

                    @Vinod-Amarathunga If this solves your problem then why do you need the transistors & optocoupler? I would expect powering the PIR VIN from the separate 5V supply and tying the GND of the separate supply to the GND of the Arduino would work just as well. Did you try that?

                    http://yveaux.blogspot.nl

                    1 Reply Last reply
                    0
                    Reply
                    • Reply as topic
                    Log in to reply
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes


                    23

                    Online

                    11.7k

                    Users

                    11.2k

                    Topics

                    113.1k

                    Posts


                    Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                    • Login

                    • Don't have an account? Register

                    • Login or register to search.
                    • First post
                      Last post
                    0
                    • MySensors
                    • OpenHardware.io
                    • Categories
                    • Recent
                    • Tags
                    • Popular