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
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login