💬 Motion Sensor

  • Admin

    This thread contains comments for the article "Motion Sensor" posted on MySensors.org.

  • step-up regulator is not needed for 3V the easiest way is removing stabilizer an diode and replace by wire. HC-SR01 sensor inner works with 3 to 5V

  • I have just started with an Arduino Nano and connected both radio and a HC-SR50I PIR.
    When I check the Serial monitor it spams me with

    Is that common or is something wrong? Thanks for help.

  • @Patrik Söderström I think this is normal. Please check the Serial Protocol spec. under Download & API above to understand what the different elements describe. You should get this message once every two minutes if SLEEP_TIME = 120000 and you do not trigger the PIR. If triggered you should get 0;1;1;0;16;1 followed by 0;1;1;0;16;0 when the PIR resets. I built the Motion detector using the MiniPIR module above but I found that it needs at least +5V to operate reliably. Below 5V I think I remember that I got a lot of false trigs.

  • @xlibor Where these? Stabilizer and diode what needed replace with wire.

  • Blue - parts to be removed
    Red - wire or tin short circuit

  • Thank you. I try.

  • Is it possible to break both interrupt pins on a board? cus with or without a pir, the serial monitor keeps getting spammed.

  • Hi to everyone,
    it's possible to connect more than one PIR Sensor to the same board ?
    In case if it's possible, there's a limit on that number ?

    Thank you for your help

  • Mod

    @Mercury69 do you want to know which pir fired, or just combine them all?

  • @Yveaux
    Hi Yveaux, I want to know if it's possible to connect more than one PIR sensor at the same node and if there's a limit on the number.

    I mean the possibility to have only 1 node with connected more PIR sensor in order to avoid the moltiplication of the assembly composed by arduino+radio+PIR+power supply.

    I imagine (but I'm not sure) if I connect more PIR sensor to the same PIN3 on arduino node I will obtain a "network" of PIR Sensor reacting as a single element to a possible presence, without the possibility to differentiate the area interested by the alarm.

    If I can differentiate the PIN where I can connect the PIR sensor, maybe I can get information from each single area of detection controlled by the PIR sensor.

    Thank you for your attention.

  • @Mercury69 PIR is based on interrupts, which wake-up processor from sleep mode, Arduinos based on ATMEGA328 have only two these pins, pin 2 and 3.

    You can use 2 PIRs with detection which was fired, if you need more than two PIRs you can connect each PIR to any digital input of arduino and common signal OR-ing from all PIRs to generate interrupt to pin 2 or 3. Then if you wake-up by interrupt you can software test all of digital inputs and resolve which PIR was fired.

  • Mod

    @xlibor said:


    Better ORed, or all your sensors have to trigger at the same time to wake up the Arduino 😉

    For the rest @xlibor is right: OR-ing PIR triggers into a single wake-up signal can be as simple as using a diode per PIR and a resistor:

    alt text

    Ref: https://learn.sparkfun.com/tutorials/diodes/diode-applications

  • Do you have an example sketch of connecting two PIRs to one Arduino? Would really need that in my setup.

  • @Patrik-Söderström said:

    Do you have an example sketch of connecting two PIRs to one Arduino? Would really need that in my setup.

    And so do I. Have tried to accomplish this as my first mysensors project, but coming up short... 😞

  • Hi all

    I have build a node with this setup.
    It is an Arduino Pro Mini with a SR501 and a RFL01. Arduino and sensor converted to 3.3V.
    Motion is detected like it should, no trouble.

    But everytime my arduino hits this :

       // Sleep until interrupt comes in on motion sensor. Send update every two minute.
        sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME);

    the node returns a "high"... meaning there's motion (where there is not actually)
    So my notification board gets a new entry every two minutes...

    Is this normal beahaviour ? (Hope not!!! 😉 )

  • Hi ben999
    I don't know what your sketch looks like but in my implementation I catch the movement in a boolean variable called tripped which I use to set the message sent to the controller.

    // Read digital motion value
    boolean tripped = digitalRead(DIGITAL_INPUT_SENSOR) == HIGH; 
    send(msgm.set(tripped?"1":"0"));  // Send tripped value to gw

    Then I do some other stuff based on tripped being true or false.
    Before the node goes to sleep I reset tripped. Otherwise I will get the old value back next time the node wakes up after SLEEP_TIME regardless if there is movement or not.

    // Sleep until interrupt comes in on motion sensor but send update every minute. 
      tripped = false;  //reset tripped

    It goes without saying that SLEEP_TIME will have to be longer than the reset time of the sensor itself. My sensor element resets in about 20 seconds, which puts a lower limit to SLEEP_TIME.

  • So my notification board gets a new entry every two minutes...

    The SLEEP_TIME define tells your board to wake up every two minutes regardless of whether there is an interrupt. If you want longer, increase this value. I think you can also set it to 0 to only wake on interrupts.

  • @bgunnarb
    Thank you very much for your message
    I added tripped = false; to my sketch but that didn't change the general behaviour : sensor still give false trigger when coming out of sleep period...

    Thank you very much for your message as well

    I might not have described my problem precisely enough :
    Motion sensor will be used as part of an house alarm
    I have set up a very simple rule for now (home.rules) stating that

    when sensor changed from CLOSED to OPEN
       then sendBroadcastNotification(to me)

    This works fine and node comes out of sleep when motion triggers the interrupt. All fine.

    Trouble is when we get to the end of the sleeptime... node comes out of sleep and i get a "tripped" that sends me a notification (or later on will set the siren on!!!)

    @Graham 's idea is pretty good: keep node asleep forever until interrupt kicks in...
    But nodes do have temperature, humidity and battery statuses to share...

    I tried to load the basic sketch (ignoring temp, hum and batt) but node still behaves the same... 😞

    Does it not do the same at yours ?

    #define MY_RADIO_NRF24
    #include <MySensors.h>
    unsigned long SLEEP_TIME = 120000; 
    #define CHILD_ID 1
    MyMessage msg(CHILD_ID, V_TRIPPED);
    void setup()
    void presentation()
        sendSketchInfo("Motion Sensor", "1.0");
        present(CHILD_ID, S_MOTION);
    void loop()
        bool tripped = digitalRead(DIGITAL_INPUT_SENSOR) == HIGH;
        sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME);

    Thanks a lot for your help

  • @ben999 The sketch you have will report the state of the pin every 2 minutes as well as when interrupted by motion.

    If the SR501 is still within its timeout after the last motion detected, the pin will still be high. Eventually, (the maximum length of time is about 10 minutes) the pin should go low. If it doesn't, there is a fault with the SR501.

    The timeout can be adjusted by one of the dials (see http://henrysbench.capnfatz.com/henrys-bench/arduino-sensors-and-input/arduino-hc-sr501-motion-sensor-tutorial/#Time_Delay_Adjustment). I'm not sure what the shortest period is, but it is probably less than two minutes, which would send 0 in the next message.

    You would, however, get another interrupt if more motion occurred before the two minutes are up.


Suggested Topics