Hello,
I've spent many months reading this great forum and i'm ready to build my first project.
I'm using VeraLite as controller with a serial gateway (USB) and i would like to build a window/motion sensor battery operated (2AA).
For the sensors I collected all the stuff:
-
list itemArduino Pro mini
-
list item2AA battery holder
-
list itemDC-DC Step up regulator
-
list itemRadio NRF24L01+ (directly linked to the step-up for power)
-
list itemMotion HC SR501 (to PIN2 not used by radio)
-
list itemReed switch
I hacked the Nano by broking the LED (since i wasn't able to desolder it)
Now i have some problem with the sketch, since i tried to fuse 2 different sketches (door/window and motion)
Can someone help me?
#include <MySensor.h>
#include <SPI.h>
unsigned long SLEEP_TIME = 120000; // Sleep time between reports (in milliseconds)
#define SKETCH_NAME "Binary / Motion Sensor"
#define SKETCH_MAJOR_VER "2"
#define SKETCH_MINOR_VER "0"
#define PRIMARY_CHILD_ID 4
#define PRIMARY_BUTTON_PIN 2 // Arduino Digital I/O pin for button/reed switch
#define DIGITAL_INPUT_SENSOR 3 // The digital input you attached your motion sensor. (Only 2 and 3 generates interrupt!)
#define INTERRUPT DIGITAL_INPUT_SENSOR-2 // Usually the interrupt = pin -2 (on uno/nano anyway)
// initialize motion sensor
MySensor gw;
// Initialize motion message
MyMessage msg(CHILD_ID, V_TRIPPED);
//initialize window sensor
MySensor sensor_node;
// Change to V_LIGHT if you use S_LIGHT in presentation below
MyMessage msg(PRIMARY_CHILD_ID, V_TRIPPED);
void setup()
{
sensor_node.begin();
// Setup the Window
pinMode(PRIMARY_BUTTON_PIN, INPUT);
// Activate internal pull-ups
digitalWrite(PRIMARY_BUTTON_PIN, HIGH);
// Send the sketch version information to the gateway and Controller
sensor_node.sendSketchInfo(SKETCH_NAME, SKETCH_MAJOR_VER "." SKETCH_MINOR_VER);
// Register binary input sensor to sensor_node (they will be created as child devices)
// You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage.
// If S_LIGHT is used, remember to update variable type you send in. See "msg" above.
sensor_node.present(PRIMARY_CHILD_ID, S_DOOR);
}
{
gw.begin();
pinMode(DIGITAL_INPUT_SENSOR, INPUT); // sets the motion sensor digital pin as input
// Register all sensors to gw (they will be created as child devices)
gw.present(CHILD_ID, S_MOTION);
}
// Loop will iterate on changes on the BUTTON_PINs
void loop()
{
uint8_t value;
static uint8_t sentValue=2;
// Short delay to allow buttons to properly settle
sensor_node.sleep(5);
value = digitalRead(PRIMARY_BUTTON_PIN);
if (value != sentValue) {
// Value has changed from last transmission, send the updated value
sensor_node.send(msg.set(value==HIGH ? 1 : 0));
sentValue = value;
}
// Read digital motion value
boolean tripped = digitalRead(DIGITAL_INPUT_SENSOR) == HIGH;
Serial.println(tripped);
gw.send(msg.set(tripped?"1":"0")); // Send tripped value to gw
// Sleep until something happens with the window sensor
sensor_node.sleep(PRIMARY_BUTTON_PIN-2, CHANGE, 0);
// Sleep until motion interrupt comes in on motion sensor. Send update every two minute.
gw.sleep(INTERRUPT,CHANGE, SLEEP_TIME);
}