Wednesday, June 14, 2017

The ultimate test of the low energy consumption is a sensor that can
survive on its own, without maintenance. My Android weather station supported by BLE weather sensors has
been functioning for more
than a year but this year has not passed without adventures
in the battery front. First the station was powered by 2 AA NiMh
batteries - that was 2 weeks of lifetime. Then came the motorcycle battery, that
took much longer to expire but eventually the battery itself failed. Now the 2
sensors run on a discarded laptop battery which may not be able to power
a laptop but powers nicely the two sensors with their combined 5 mA
consumption.

5 mA, however, is a lot so when I found this solar-powered lamp at Jysk, I
immediately realized that I had to turn the lamp into the solar-powered
version of this weather sensor. Why another weather sensor? Because I
wanted to concentrate on the solar-powering aspects and wanted to reuse
as much as possible from the old sensor. This prototype may serve as a template, however, for different kind of sensors too.

Let's see first the solar lamp that I used as a base.

Solar lamp already containing the weather sensor. The two red LEDs indicate that the solar cell is charging the battery.

This is a quite cheap device with a solar cell on top and a circuit
built around the XD5252F LED driver that takes care of everything from
the charging of the small NiMh battery (if there's sunlight) to
switching on the LED (if there's darkness). Unfortunately the circuit is
so specialized to solar LED lamps that I could not reuse too much of it
except for the solar panel and the LED itself. The solar panel is not
very high-powered, it is a 2V, 20 mA cell. So it became clear
immediately that the Android client app has to work more (consuming more
energy) to obtain sensor data while the sensor has to sleep more to
conserve its own battery that charges only very slowly from the
low-powered solar cell. Also, surviving the night (or longer periods
without sufficiently strong sunlight) requires a quite beefy battery in
the sensor if we want it to transmit BLE messages to the Android
application frequently enough.

The previous Android app has been therefore changed so that instead of
15 seconds of scanning, it now scans for 70 seconds. The sensor sleeps
60 seconds then transmits the measurements for 5 seconds. This results
in a quite low, 4 mAh energy consumption daily that even the low-powered
solar cell can refill if sunny periods occur time to time. To make sure
that the sensor survives long without enough sunlight, a 2700 mAh
Li-Ion battery was installed (of the 14500 type, with the AA form
factor). As in the previous version, the measurement data is transmitted
in the BLE advertisement packets. I wanted to transmit battery
indicator in this case too so I dropped one byte from the 8-byte long
station ID (so it is now 7 bytes long) and instead of that byte now the
supply voltage of the microcontroller is transmitted. It is generally
3.3V, if it drops below that then the battery is really not charging.
This additional measurement data required that the sensor's UUID be
changed, that's how the Android app recognizes this new parameter and
displays in a graph.

Battery indicator in the measurement screen of the new sensor

The schematics of the sensor can be seen below (click to enlarge).

Sensor circuit installed into the solar lamp case

Nothing much changed from the previous version, except for the solar
cell-battery charger power chain. I wanted to save myself the pain of
designing a Li-Ion charger so I used building block already avalable:
this DC-DC converter to produce 5V from the solar cell's varying output
voltage and this battery charger circuit to take care of the Li-Ion
battery. The result is a less than optimal efficiency (almost 50% of the
solar cell's energy is lost during the different up-down conversions)
but at least it is easy to reproduce. And if you like the sensor, you
can always design a much better charging circuit. :-)

The nRF51822 microcontroller application has not changed a lot either.
The most serious modification is the way the delays are implemented, now the
sleeping periods between two measurements are implemented in a very
low-power way and that results in a consumption in the inactive
periods of about 100 microamperes.

About the blog

This blog is a personal diary about my adventures with the Google Android platform. I write it in the hope that others may find my experiences useful but please, beware. The blog is created as I gain experience about the platform myself so errors, omissions, etc. may be found in the entries.