Sunday, January 11, 2015

Estimating OpenBCI Battery Life

In OpenBCI's twitter feed a few weeks ago, I saw that someone 3D printed a belt holster for their OpenBCI system, including the battery pack.  I thought that was pretty sweet.  It also put in my mind the question of "How long might the system run on its batteries?".  So, after assembling the 16-channel OpenBCI system, I decided to measure the power draw.

Current Draw from 16-Channel OpenBCI System During Operation (no SD)

As you can see above, I used my digital multi-meter (DMM) in its "mA" setting to measure the current flow.  It doesn't matter where measure the current, you just have to break into the power circuit somewhere and bridge the gap with the DMM.  I did it at the battery pack, because you just have to pop out one battery.  Easy.

Touch the Red Lead (Positive) to the Battery

I measured the current draw of two of the three OpenBCI versions.  As shown in the picture at the top, the 32-bit board with daisy module (ie, the 16-channel version of OpenBCI) draws about 62 mA.  The picture below shows that the 8-bit board was drawing about 40 mA.  In both cases, the boards were actively streaming their EEG data via their RFDuino BT module.  Neither was saving data to their SD cards (SD writing can be *very* power hungry).

Measuring the Current Draw for the 8-Channel 8-Bit OpenBCI Board.

So, how long might the OpenBCI system run from a set of batteries?  Well, that can be a complicated question.  I started by looking at the datasheet for Energizer AA batteries (here).  The graph below is copied from near the end of the datasheet.  It shows how the battery voltage will change as a function of time for two different called "remote" and one called "radio".  Which might be similar to OpenBCI?  Well, if the 16-channel board is pulling 62 mA, and the nominal battery voltage is 1.5V, then the effective load is (1.5/0.062) = 24 ohms.  Hey, the graph below says that the "remote" is also a load of 24 ohms!  So we can read that line directly.

Discharge Curve for Energizer AA Batteries.  The 16-channel OpenBCI board might last 26 hours.

Looking at the graph, we need to know when the batteries will no longer be able to power the OpenBCI system...when can we call the batteries "dead"?  Often, AA cells are considered dead at 1.0 or even 0.8 V.  Unfortunately, I think (I'm not sure) that OpenBCI can't run that low.  I think that it needs a 5V supply to run (though I could totally be wrong, especially if it uses a buck-boost converter).  If we assume that it needs 5V, and if we've got 4 AA cells, then each cell needs to supply at least 1.25V.  That's our threshold.

Looking at the graph above, I focus on the blue line labeled "remote" and I see when it crosses our hypothetical 1.25V threshold.  It says that it could live for 26 hours.  Wow.  That's a pretty long time.  Cool.

Remember that this lifetime is for a 62 mA current draw (ie, for the 16-channel OpenBCI system).  Pulling 62 mA for 26 hours means that we are utlizing 62 mA * 26 hrs = 1612 mA-hours of battery capacity.  For the 8-channel board, which only pulls 40 mA, that same battery capacity might allow us to run for 1612 mA-hrs / 40 mA = 40 hours.  Not bad at all!

Since the battery life looks pretty good, it means that we should be able to come up with some pretty good mobile EEG hacks.  No need to stay indoors, people!  Let's get outside and freak some people out with our silly EEG headgear!

UPDATE 2015-07-10:  In the comments section, there's been some discussion regarding my "equivalent resistance" approach to estimating battery life.  As an alternative, it might be better to assume that OpenBCI board is actually a constant current load, rather than a constant resistance load.  So, let's estimate the battery life using that approach.  Below is the graph from the datasheet for battery life as a function of constant current draw.

Another Method of Estimating Battery Life for the 16-Channel OpenBCI Board.

To use this graph, I start with the knowledge that the OpenBCI board draws 62 mA.  This locates me on the x-axis.  I then read up to the line corresponding to the battery voltage where my device will die.  In this case, I think that OpenBCI will die at 1.25V.  There's a curve for 1.2V.  Let's use that.  From that point, I read off the the service life from the y-axis.  Allowing for some uncertainty in reading a value from a logarithmic scale, it looks like the battery life would be about 23 hours.   This value agrees decently well with the 26 hour value that I found based on my "equivalent resistance" method.  Such agreement is always satisfying.  It doesn't always work out that way.  :)


  1. Hi Chip,
    I am trying to build my own EEG circuit and what your work gives me many inspirations. But I have some questions:
    1. You wrote "the effective load is (1.5/0.062) = 24 ohms", what does effective load mean? The load of each battery of the load of the whole system? I think it should be the former.
    2. What can be done to extend the lifetime of the battery? According to your graph, the bigger the load gets, the longer lifetime we will achieve, so can adding some resistors to the system extend the lifetime?


    1. Hi Eric,

      The effective load is simply another way of expressing how much power a system draws. The "effective load" is the apparent resistance of the whole electronics if the system were replaced by a single resistor.

      During my testing, the OpenBCI board was drawing 62 mA (aka. 0.062 A). Each battery was at a voltage of 1.5 V. So, the effective load can be calculated as R = V / I...R = 1.5 / 0.062 = 24 ohms.

      On the OpenBCI board, there's not a whole lot that one can do to reduce the power consumption (ie, reduce the current draw, which is another way of saying "increase the effective load"). There might be low power (quick sleep) modes that you could invoke in the microprocessor, or there might be lower power modes that you could invoke in the wireless transmitter, but both of those approach would require you to dive into the lowest-level code...not an easy thing to do.

      Sorry I can't be more help.


    2. Hi Chip,

      Thanks for the reply.
      I think the resistance of the whole electronics system should be R = 1.5*4 / 0.062 = 96 ohms because you use four cascaded(not paralleled) batteries as the power supply.Please correct me if I am wrong.


    3. Hi Eric,

      If we're talking about characterizing the electronics from the perspective of the whole battery pack, you are correct...the load seen by whole battery pack is 96 ohms.

      But, I was trying to use the discharge curve from the datasheet, and that discharge curve was for a single battery. Since what is most important is the amount of current coming out of the single battery, I calculated the apparent load that would result in the current that I actually measured. I measured 62 mA. One cell makes 1.5V. Therefore, from the perspective of one cell in my battery pack, it thought that it was seeing 1.5V / 0.062A = 24 ohms. IMO, that's the right number to use to lookup the discharge life in the datasheet for a single battery.


    4. Hi Chip,
      Sorry but I am still not quite following your opinion.
      I think we can simplify the system like this:
      | |

      (Sorry I don't know how to insert an image in comment...)
      I1(from where you measured)=I2=0.062A, and the voltage between R should be 6V, so R=6 / 0.062 = 96 ohms
      If we try to use the discharge curve from the datasheet, the calculated R= 24 ohms should be regarded as "the distributed resistance per battery", and the whole resistance is 96 ohms.


    5. I think that we're in agreement. OpenBCI has effective resistance of 96 ohms. We were applying 6V to OpenBCI and we measured 62 mA going into OpenBCI. Therefore, the OpenBCI board has an effective resistance of 6V / 0.062mA = 96 Ohm. We agree.

      In using the datasheet, the datasheet only speaks to one battery. We cannot use the discharge curve for a 96 ohm device because OpenBCI isn't being powered by one battery. It's got four batteries in series boosting up the voltage (the current through each battery still 62mA, however). There are several ways of thinking about this configuration. I chose to think of it as "distributed resistance per battery", like you said. If that doesn't click for you, that's fine. "Equivalent resistance" isn't actually the greatest way to model OpenBCI's power consumption. It should actually be modeled as a constant current draw. So, I've added additional material to my post using the constant current model. I get basically the same answer.

    6. Hi Chip,
      We are in agreement, thanks.