Burglary and tamper detector for door and window



  • Hello,

    I develop for some time sensors for this purpose.
    And I think now I have a variant found.
    The technology is nothing special.
    I simple use a MMA8452 connect to a Mysensors Note.
    The evaluation does the Sketch.
    Here my Sketch:

    /******************************************************************************
    MMA8452Q_Basic.ino
    SFE_MMA8452Q Library Basic Example Sketch
    Jim Lindblom @ SparkFun Electronics
    Original Creation Date: June 3, 2014
    https://github.com/sparkfun/MMA8452_Accelerometer
    
    This sketch uses the SparkFun_MMA8452Q library to initialize the
    accelerometer, and stream values from it.
    
    Development environment specifics:
    	IDE: Arduino 1.0.5
    	Hardware Platform: Arduino Uno
    	
    	**Updated for Arduino 1.6.4 5/2015**
    
    This code is beerware; if you see me (or any other SparkFun employee) at the
    local, and you've found our code helpful, please buy us a round!
    
    Distributed as-is; no warranty is given.
    ******************************************************************************/
    #include <Wire.h> // Must include Wire library for I2C
    #include <SparkFun_MMA8452Q.h> // Includes the SFE_MMA8452Q library
    #include <MySensor.h>  
    #include <Vcc.h>
    
    const float VccMin   = 0.0;           // Minimum expected Vcc level, in Volts.
    const float VccMax   = 5.5;           // Maximum expected Vcc level, in Volts.
    const float VccCorrection = 5.0/5.0;  // Measured Vcc by multimeter divided by reported Vcc
    
    unsigned int countr = 0;
    float peakMax0 = -1000.0;
    float peakMax1 = -1000.0;
    float peakMax2 = -1000.0;
    unsigned long startMillis = 0;
    Vcc vcc(VccCorrection);
    
    #define CHILD_ID_BATT 0
    #define CHILD_ID_MAXX 1
    #define CHILD_ID_MAXY 2
    #define CHILD_ID_MAXZ 3
    
    MySensor gw;
    MyMessage battmsg(CHILD_ID_BATT, V_VOLTAGE);
    MyMessage maxxmsg(CHILD_ID_MAXX, V_LEVEL);
    MyMessage maxymsg(CHILD_ID_MAXY, V_LEVEL);
    MyMessage maxzmsg(CHILD_ID_MAXZ, V_LEVEL);
    
    
    MMA8452Q accel;
    
    void setup()
    {
      Serial.begin(115200);
      accel.init(SCALE_2G, ODR_800);
      gw.begin(NULL, AUTO, true);
    
      // Send the sketch version information to the gateway and Controller
      gw.sendSketchInfo("MMA8452", "1.0");
    
      // Register all sensors to gateway (they will be created as child devices)
      gw.present(CHILD_ID_BATT, S_POWER);
      gw.present(CHILD_ID_MAXX, S_VIBRATION);
      gw.present(CHILD_ID_MAXY, S_VIBRATION);
      gw.present(CHILD_ID_MAXZ, S_VIBRATION);
    }
    
    void loop()
    {     
           countr = 0;
           float peakToPeak0 = 0.0;   // peak-to-peak level
           float peakToPeak1 = 0.0;   // peak-to-peak level
           float peakToPeak2 = 0.0;   // peak-to-peak level
           
           float signalMax0 = -100.0000;
           float signalMin0 = 100.0000;
           float signalMax1 = -100.0;
           float signalMin1 = 100.0;
           float signalMax2 = -100.0;
           float signalMin2 = 100.0;
         
           
           while (countr < 20)
               {
                gw.process();
              if (accel.available())
                 {
                  accel.read();
                  delay(2);
                  double accxx = accel.cx;
                  double accyy = accel.cy;
                  double acczz = accel.cz;
                     //--------------------------------------------------
                     if (accxx > signalMax0)
                      {
                         signalMax0 = accxx;  // save just the max levels
                      }
                     if (accxx < signalMin0)
                      {
                         signalMin0 = accxx;  // save just the min levels
                      }
                     //--------------------------------------------------
                     if (accyy > signalMax1)
                      {
                         signalMax1 = accyy;  // save just the max levels
                      }
                      
                     if (accyy < signalMin1)
                      {
                         signalMin1 = accyy;  // save just the min levels
                      }
                     //-------------------------------------------------
                     if (acczz > signalMax2)
                      {
                        signalMax2 = acczz;  // save just the max levels
                      }
                      
                     if (acczz < signalMin2)
                      {
                        signalMin2 = acczz;  // save just the min levels
                      }
                      countr = countr + 1;
                 }
             }
                 //------------------------------------------------------
                 peakToPeak0 = signalMax0 - signalMin0;
                 peakToPeak1 = signalMax1 - signalMin1;
                 peakToPeak2 = signalMax2 - signalMin2;
                 //-----------------------------------------------------
                 //------------------------------------------------------
                 if (peakToPeak0 > peakMax0)
                 {
                    peakMax0 = peakToPeak0;  // save just the max levels
                 }
                 if (peakToPeak1 > peakMax1)
                 {
                    peakMax1 = peakToPeak1;  // save just the max levels
                 }
                 if (peakToPeak2 > peakMax2)
                 {
                    peakMax2 = peakToPeak2;  // save just the max levels
                 }
                 //-----------------------------------------------------
                 
     if (millis() > startMillis)
     {
     float v = vcc.Read_Volts();
      gw.send(battmsg.set(v,2));
      gw.send(maxxmsg.set(peakMax0,4));
      gw.send(maxymsg.set(peakMax1,4));
      gw.send(maxzmsg.set(peakMax2,4));
      
     peakMax0 = -1.0;
     peakMax1 = -1.0;
     peakMax2 = -1.0;
     startMillis= millis() + 15000;
     }
     
    }
    

    Improvements and suggestions are welcome.

    regards
    Thomas


Log in to reply
 

Suggested Topics

  • 8
  • 90
  • 44
  • 1
  • 7
  • 2

0
Online

11.4k
Users

11.1k
Topics

112.7k
Posts