3 years on one set of batteries

Ok, so maybe it’s getting a bit boring to report these results, but one of the JeeNodes I installed long ago has just reached a milestone:

That “buro JC” node has been running on a single battery charge for 3 years now:

And it’s not even close to empty: this is a JeeNode USB with a 1300 mAh LiPo battery tied to its back, and (as I just measured) it’s still running at 3.74 V, go figure.

Let’s do the math on what’s going on here:

the battery is specified as 1300 mAh, i.e. 1300 mA for one hour and then it’s empty

in this case, it has been running for some 1096 x 24 = 26,304 hours total

so the average current consumption must have been under 1300 / 26304 = 50 µA

well… in that case, the battery should be empty by now, but it isn’t

in fact, I suspect that the average power consumption is more like 10..25 µA

Two things to note: 1) LiPo batteries pack a lot of energy, and 2) they have a really low self-discharge rate, so they are able to store that energy for a long time.

The other statistic worth working out, is the amount of energy consumed by a single packet transmission. Again, first assuming that the battery would be dead by now, and that the microcontroller and the rest of the circuit are not drawing any current:

since 60 packets are sent out per hour: about 60 µAh per hour, i.e. 60 µA continuous

energy can also be expressed in coulombs, i.e. 60 µC gets used per packet transmission (3,600 seconds to the hour, but there were 60 packets sent out during that period)

so despite the fact that the RFM12B draws a substantial 25 mA of current during transmission, it does it so briefly that overall it’s still extremely low-power (a few ms every 1s, so that’s a truly minute duty cycle)

The conclusion here is: for these types of uses, with occasional brief wireless sensor data transmissions, the power consumption of the wireless module is not the main issue. It’s far more important to keep the idle (i.e. sleep mode) of the entire circuit under control.

The 2nd result is also a record, a JeeNode Micro, running over 6 months on a coin cell:

This one is running the newer radioBlip2 sketch, which also measures and reports the battery voltage before and after packet transmission. As you can see, the coin cell is struggling a bit, but its voltage level is still fine: it drops to 2.74 V right after sending out a packet (drawing 25 mA), and then recovers the rest of the time to a fairly high 2.94 V. This battery sure isn’t empty yet. Let’s see how many more months it can keep this up.

The 3rd result (penlight test), is this setup, based on the latest JNµ v3:

The timing values are way off though: it has also been running for over 6 months, but I accidentally caused it to reset when moving things around earlier this summer. This one is running with a switching boost regulator. The Eneloop battery started out at 1.3 V and has now dropped slightly to 1.28 V – it should be fine for quite some time, as these batteries tend to run down gradually to 1.2V before they start getting depleted. This is a rechargeable battery, but Eneloop is known to hold on to its charge for a surprisingly long time (losing 20% over 2 years due to self-discharge, if I remember correctly).

You can see the boost regulator doing its thing, as the output voltage sent to the ATtiny is the same 3.04 V as it was on startup. That’s the whole idea: it regulates to a fixed level, while sucking the battery dry along the way…

Note that all these nodes are not sensing anything. They’re just bleeping once a minute.

Anyway… so much for the progress report on a pretty long-running experiment :)

Hi JC, good to see you’re back again! I’m currently building your Opentherm relay from last year (so you know people are actually doing something with your ideas!) (Small typo above btw: “i.e. 1300 mAh for one hour”, should me mA off course…)

May I ask if you had the LiPo directly wired to VCC or if it was regulated down to to 3V3 on both “buro JC” & “Coin cell test”?

If one was going to include, say an I2C temperature sensor, in this low power arrangement, would it be best to power the I2C device down (beyond any sleep mode the sensor has) in between query/sends? If so what would be the best way of doing this – using an I/O pin to switch a transistor controlling VCC on the I2C bus power line? I guess this would mean reinitialising the I2C bus & sensor with wire.begin(); & sensor.begin(); (or however it is coded) each time the I2C bus is powered up and read?

If you want lowest power and your use case allows it, then powering parts down is best (couldn’t be done for a PIR sensor for example – turning it off would defeat its purpose). For a few mA, you can just use a direct I/O pin. For higher power, you can use a P-MOSFET with sufficiently low threshold to avoid a voltage drop (search for notes about the JeeNode Micro v3 on this weblog for more info).

And yes, when you turn a circuit off and then power it back up, you’ll need to re-initialise it.

Got radioblip2 working after I remembered to change the SEND_MODE flag to 2, due to my cpu still having the default fuse settings. I’m trying this out with a LiFePO4 (lithium ferrophosphate) battery. This has the convenient property that its nominal charged voltage is 3.3 V, just right for a Jeenode, and the discharge curve is also quite flat.

Keep the information coming! Love hearing the updates. Actually just found this one when did a Google search so I could re-read the last update! Low power, long life from battery power is very attractive. Everyone wants to know how to do it right!