Introduction: How to Hack a Temperature Sensor for Longer Battery Life
The Inkbird IBS-TH1 is a great little device for logging temperature and humidity over a few hours or days. It can be set to log every second up to every 10 minutes, and it reports the data over Bluetooth LE to an android or iOS smartphone. The app is very solid, although it's missing one or two more advanced features I'd like to see. Unfortunately, the biggest issue with this sensor is that the battery life is VERY poor even with that maximum 10 minute sample interval.
Here, I want to take you through my thought process on doing something about that!
This is a pretty basic tutorial detailing the thought process around a simple electrical modification. It's pretty simple, but goes into a bit of detail about battery specs if you've never come across that before.
The most important/only mandatory bit:
- Inkbird IBS-TH1
Other things I'll probably end up using:
- Suitable replacement battery
- 3D printer
- Conductive copper tape
- Dead 2032 battery
Step 1: Planning
Ok, so what's the issue? The battery life is bad. What could we do about that?
Idea 1: Use less power
In a perfect world, there'd be a setting or something we can change to simply use less power, and operate longer. We know we have control over the sensor sampling interval, but unfortunately it doesn't seem to make much of a difference. The sensor probably wakes up too frequently to send a connectable BLE advertising packet so that the phone app feels like it has good responsiveness. The firmware is probably just not very smart about how power is managed around this activity.
We could have a look at the firmware to see if this could be improved, but of course this is a closed source product. We could maybe write our own firmware and companion app, which would be cool and probably would be reasonable for some use cases, but that's too much work for me. And there's no guarantee yet we can even do that - the processor could be read/write protected, one-time-programmable, etc.
Idea 2: Tack on a bigger battery
This is my plan A here. If the thing lasts not-quite-long-enough for my taste on a coin cell, throwing a bigger battery at it should make it last for ever.
So the question now is, what battery options do we have, from both a physical and electrical standpoint?
In this case, I want to fully explore options. This means
- list possibilities determine the lowest possible battery voltage when close to discharged
- determine the highest possible battery voltage when fresh
- verify that the hardware we want to power operates in that range safely
- disqualify possibilities on this basis
We'll want to look at datasheets for each battery option, find the relevant discharge curve, and pick out both the maximum value the sensor will see when fresh, and the minimum value it'll see when the batteries are "discharged," which is an arbitrary point we get to pick off the curve. Since this is a low-power sensor and will likely consume microamps, we can simply pick the most favorable curve in any datasheet (i.e. the curve with lowest test load).
2x Alkaline AAs (or AAAs): This seems like an ideal baseline replacement option, since AAs operate at 1.5V and 2x1.5=3. The Energizer E91 datasheet (http://data.energizer.com/pdfs/e91.pdf) shows us that the fresh open circuit voltage is 1.5, and the lowest voltage we'd expect to see after exhausting >90% of available energy is 0.8V. If we cut off at 1.1, that'd probably be pretty OK, as well. That gives us a voltage range of 2.2V to 3V for okay life, or 1.6V to 3V for full life.
2x NiMH AAs (or AAAs): NiMH AAs are highly available AND rechargeable, so that's ideal. A random eneloop discharge curve I'm looking at says 1.45V open circuit, to 1.15V quite fully dead, or 1.2V if we're willing to be a little more relaxed. So I'll say the range here is about 2.4V to 2.9V
Lithium Polymer 1S Pack: In a perfect world, I'd just throw another lithium at the problem. I've got a bunch of cells and a few suitable chargers. And lithium means the battery life indicator will be correct too, right? Not so fast. Lithium primary cells use a different chemistry than rechargeables, and have a different discharge curve too. LiPos are 3.7V nominal, but really swing between something like 4.2V fresh open circuit, to 3.6V respectably dead. So we'll call the range here 3.6V-4.2V
Step 2: Getting In
It may actually be the case for a mod like this that we don't ultimately need to go any farther than opening the battery door. We know the CR2032 used off the shelf is a 3V battery, so any other 3V battery should do just fine. Maybe the fuel gauge logic breaks and the % battery life indication becomes bogus, but that probably won't impact performance.
In this case, we've got a bunch of options to check, which means we'll need to see what hardware we're trying to power and if it's compatible, so we'll need to get in.
Looking at the back of the sensor with the battery cover off, we can see a split in the plastic, so the battery holder is probably an insert that snaps in to the shell around it. Sure enough, if we stick a flat blade screwdriver in the gap and pry up, the piece pops right out. I've indicated with arrows where the snaps are - if you pry at these locations, you're less likely to snap plastic where the insert is weak.
With the board out, we can look at the major components and determine voltage compatibility.
Right off, it doesn't look like there's any on-board regulation - everything's running directly from battery voltage. For major components, we see:
- CC2450 BLE Microcontroller
- HTU21D Temp/Humidity Sensor
- SPI Flash
From the CC2450 datasheet: 2-3.6V, 3.9V absolute max
From the HTU21D datasheet: 1.5-3.6V max
I didn't bother looking at the SPI flash since this already limits our options substantially. Right away, the LiPo cell is out - 4.2V at full charge will fry both of these components, and 3.7 nominal is too much for the humidity sensor anyway. On the other hand, the alkaline AAs will work alright, with a 2V cutoff on the CC2450 meaning the sensor dies without too much life left in the cells. Further, the NiMH AAs work ideally, with the sensor turning off only once they're really dead as a doornail.
Step 3: Making the Mod
Now that we know what our options are, and most importantly, what they aren't, we can go about actually making the mod.
I'd like to stick with maximum reusability. In a perfect world, we'd make a whole battery housing that the sensor just slots onto. For now, we'll go a little simpler.
My idea for minimally invasive and maximally easy to execute is to use a dead CR2032 as a dummy to hold + and - leads on the existing contacts.
I used some copper tape to make the contacts, soldered to a separate AA holder. Note: Use insulating tape between the copper and the battery. Even if the coin cell is dead, shorting it may still lead to leakage and corrosion. Even if you're using copper tape with non-conductive insulation, you may still end up with a short which I found out was the case when my battery started heating up (a DEAD battery, mind). I've used kapton tape, which is ideal for this task.
To hold everything in place, I'm just going to drill a small hole in the original battery cover, and pass the battery wires through that to the external holder. I used a hole larger than I originally planned to, since the cap needs to rotate slightly to lock in place.
Speaking of which, I only have a 3xAAA battery holder on hand, when what I need is a 2x. I've made it into a 2x by adding a soldered jumper wire between the far-end of the first two batteies - look at the bottom of that last photo including the battery holder. I don't recommend this because it's very difficult to solder to the metal on the battery holder without melting it, but I WAS able to make it work.
Step 4: Finished!
Ready for measuring humidity in the closet!