How to get longest battery life

  • I have created myself a motion sensor node using one of these:
    motion sensor
    Here is the sketch I have currently uploaded to it. This is basically the example sketch from the MySensors site.

     * The MySensors Arduino library handles the wireless radio link and protocol
     * between your home built sensors/actuators and HA controller of choice.
     * The sensors forms a self healing radio network with optional repeaters. Each
     * repeater and gateway builds a routing tables in EEPROM which keeps track of the
     * network topology allowing messages to be routed to nodes.
     * Created by Henrik Ekblad <>
     * Copyright (C) 2013-2015 Sensnology AB
     * Full contributor list:
     * Documentation:
     * Support Forum:
     * This program is free software; you can redistribute it and/or
     * modify it under the terms of the GNU General Public License
     * version 2 as published by the Free Software Foundation.
     * Version 1.0 - Henrik Ekblad
     * Motion Sensor example using HC-SR501 
    // Enable debug prints
    // #define MY_DEBUG
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69
    #include <MySensors.h>
    #include <SPI.h>
    unsigned long SLEEP_TIME = 60000 * 15; // Sleep time between reports (in milliseconds) 60000 is 1 minute x number of minutes
    #define DIGITAL_INPUT_SENSOR 3   // The digital input you attached your motion sensor.  (Only 2 and 3 generates interrupt!)
    #define CHILD_ID 1   // Id of the sensor child
    // Initialize motion message
    MyMessage msg(CHILD_ID, V_TRIPPED);
    void setup()  
      pinMode(DIGITAL_INPUT_SENSOR, INPUT);      // sets the motion sensor digital pin as input
    void presentation()  {
      // Send the sketch version information to the gateway and Controller
      sendSketchInfo("Motion Sensor", "1.0");
      // Register all sensors to gw (they will be created as child devices)
      present(CHILD_ID, S_MOTION);
    void loop()     
      // Read digital motion value
      bool tripped = digitalRead(DIGITAL_INPUT_SENSOR) == HIGH;
      send(msg.set(tripped?"1":"0"));  // Send tripped value to gw 
      // Sleep until interrupt comes in on motion sensor. Send update defined by SLEEP_TIME.
      sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME);

    Previously I had the SLEEP_TIME to the standard 120000 which was 2 minutes, and the battery only lasted a few days. I have changed the SLEEP_TIME to 15 minutes in hopes to increase battery life. I have had the sensor running for 2 days now and it is still running strong.

    The hardware I am running is a 5 volt pro mini on an easy newbie PCB. One thing I haven't done yet which I will do on the next test is to remove the red power LED from the nano. I am guessing that that will improve the battery life quite a bit too. My question though is, would I get significantly better battery life switching to a 3.3 volt pro mini? Currently I only have 5 volt versions in my arsenal of parts, so I would have to order some. I will not order them though unless I can confirm that they will significantly prolong battery life on sensors such as these. Can anyone tell me approximately how long a 9 volt should last under ideal conditions?

    One other thing, Can anyone recommend a good project case for this type of sensor? I am thinking of putting a few of these around the house for occupancy sensing if I can get the battery to last long enough.

  • Hero Member

    Why do you need SLEEP_TIME to wake up your node at all? Is not the interrupt from motion enough to get you what you need from this node?

    My understanding is that you get the most significant improvement in battery life if you remove the on-board voltage regulator and LED from the Pro Mini.

  • Hardware Contributor

    There is also several posts about how to use the motion detector with low power as well.
    No links, but search and you will find!

  • @korttoma I suppose I don't need the SLEEP_TIME, but whoever built the sample sketch had included it. If I am not going to use SLEEP_TIME then I need to research how to use an interrupt to call a function. I see they use one in the sleep() call in the sample sketch. I would have thought too that having the send call in the main loop, that it would constantly sen.

    send(msg.set(tripped?"1":"0"));  // Send tripped value to gw

    But when I tested with the Serial.println(tripped); it only seemed to do the print when the motion sensor changed state. I would have thought that you would put the send in the interrupt method call.

    @sundberg84 will running it at 3.3 volts give significant battery life improvement?

  • Hardware Contributor

    @dbemowsk - Yes.
    Running pro mini + motion at 5v is doing it harder than necessary.

  • Admin


    running at lower voltages, and using a lower oscillator frequency, causes the cpu to use less power.

    So yes, running without regulators (the PIR sensor can also run at 3V, if I remember right), and run it at 3v3 instead of 5V. and set the oscillator in your atmega to 8Mhz (or 1Mhz), it will require reprogramming of the fuses though, to switch operating frequency.

    Also use a battery closer to the operating frequency, so you don't have to waste energy in lowering the voltage to the operating voltage of your circuitry.

    Another thing, 9V batteries doesn't have that high a capacity, ordinary alkaline have only 500mAh, while 1.5V AA alkaline batteries have 1800-2600mAh. (according to this and this)

  • Hero Member


    Rather than re-invent the wheel, why don't you just build a PIR project that has already been optimized for battery life? Example:

  • Here you find a sketch including battery report which I found best. Works also with your PIR I think. For a advanced sketch you can ckeck this.

    I use an arduino pro mini 3.3V with 2 AA batteries at 8 MHZ CPU speed.

    Most important is to remove the voltage regulator on the PIR and supply it directly with 3V. My battery lasts over month with this combination.

    There are different solutions for this. Most powersaving is to remove the regulator.
    The solution n the picture above has the advantage that the electrolytic capacitor downright is still in use. The additional blue capacitor 100nF is optional, should serve as noise filter.
    PIR modification

  • @sundberg84 and @tbowmo, What you are saying makes sense. If I remove the regulators though, how do I get to a stable 3.3v for the nano and the radio. Do I need to get some of the battery boosters? I heard those are prone to a lot of noise that can interfere with the radio. If I need them, what are the best capacitors to filter the noise?

    Are you saying that I can remove the regulator from a 5V pro mini to run it at 3.3v? How do I reprogram the fuses to switch the operating frequency? Might just be easier to get some 3.3v pro minis that are already set up to run at that freq.

    Standard 1.5v alkaline batteries are 1.5v which when 2 are used only brings the voltage to 3v, not the 3.3 needed for the nano. Can the nano run at lower than 3.3v? I know the nRF24 radios can run down to I think 1.9v.

    @NeverDie That looks like a nice project, but it mentions that it runs with a RFM69CW radio. My setup uses nRF24L01 radios. It does say that an nRF24 version is coming soon, but not there yet apparently.

    @heizelmann The first project you linked to uses a different PIR motion sensor than the ones that I have. You mention that the PIRs that I have are equipped with a regulator that I did not know about. I am assuming that you are talking about the diode circled on the right in your pic. I am guessing that that is a zener diode doing the regulation. Also, what type of capacitor is that?

  • Hardware Contributor

    yes nrf24 version of my board is not released yet. Release-able..soon 😉

    I'm not really expert with this PIR module, I have some though, but it uses a bit too much power for goals i had.
    You could for instance run your 328P mcu with Internal RC 8Mhz through a 3V vcc.

    That said, about :

    • why 3.3v use less power than 5v. regarding frequency etc..
    • why Nano is 5V 16Mhz whereas mini pro is 3V 8Mhz
    • the interruptions mechanism
    • some tips etc...

    You'll find lots of infos here .
    with the well known curve 328P Speed vs Voltage.

    I hope this helps 😉

  • @dbemowsk The picture shows the modified PIR. The right circle shows the place where the diode was. It is also removed and the contacts are bridged by soldering. The regulator was on position marked with the left circle. it is removed and the two upper contacts are bridged. The adde blue capacitor is contected from this point ( now 3.3V) input to the lower pad which is Ground. It is a 100nF ceramic capacitor.

  • @dbemosk
    Look for a datasheet for the PIR
    In the diagram you can find the regulator IC1 on the topright as well as the diode D1 below of it.

  • Hero Member

    How much current does it draw after your suggested modifications are made?

  • @NeverDie My Multimeter is not very good, but I tried to measure the total current. I got 3 values: 0.03mA when sleeping, 0.16mA when PIR triggered and about 18mA when RF is sending. Last is very short an cannot measured with my digital multimeter directly. I measured this value on startup the node when the registration process is longer and I guess it is a similar value when sending.

  • Hero Member

    Here's some additional background that explains some of the "why" behind Heizelmann's approach:

    In practice, how beneficial is the 100nf capacitor? Have you noticed whether it makes any difference, or is it there just for good measure?

  • @Never Thanks for this additional link.
    The solution described there is very common, I saw it on some places. The advantage is that no modification of the board is necessary but the disadvantage is that the regulator is still in place and might draw some current back from the 3.3V supply. I prefer to remove unused parts.

    I had no problems without the 100nf capacitor. It was only a preventive measure.

  • Admin


    with propper fuses set, the atmega328p can run down to 1.8V, so you do not need 3v3 to run either radio, or the atmega on your arduino board. The PIR might be another story, I haven't looked at the datasheets for that one..

    As an example of boards without regulators, you could take a look at the sensebender micro, which is designed to run without regulators at all. I have had 4 sensors running of 2xAA batteries for more than 18 months, they report 66% battery left now..

  • Hero Member

    If it could be done cheaply enough, maybe this would be a good use-case for energy harvesting. If the energy harvesting were expensive, though, then it would be cheaper to just use a more energy efficient PIR. So far I've been quite surprised at just how expensive the best energy harvesting chips seem to be.

  • Thanks everyone for the great input. It helps a lot in understanding all of this.

    @Heizelmann , Is is really necessary to remove the diode when removing the regulator? Seems like it would give some protection from reverse voltage/current. Does removing it save that much power? I see now that the spot for the regulator is right under the blue cap in your pic.

    @tbowmo , I see you mentioned reprogramming the arduino's fuses to switch the operating frequency. Does this require flashing a new reconfigured bootloader or something? I just ordered some 3.3v pro mini boards and some 2 x AA battery holders, so I will try some of this when those arrive.

  • Admin


    Reprogramming, of fuses is probably needed for low voltage operation, if they have set BOD fuses for 2.5V, then the atmega will not operate under that voltage. Also clock selection is set by programming the fuses. This can be done with another arduino acting as an ISP device.

    A diode has a voltage drop across it, so if a diode has 0.5V, and the atmega / radio can work at 1.8V, then the battery voltage needs to be above 2.3V (1.8V operating voltage + diode drop voltage). This means that you can not utilize the full battery life, if you have the diode in the circuit for reverse polarization protection. That is probably why the diode have been removed from the PIR sensor.

Log in to reply





Looks like your connection to MySensors Forum was lost, please wait while we try to reconnect.