Sensor Watch

A hackable ARM Cortex M0+ upgrade for a classic Casio wristwatch

Feb 10, 2022

Sleep Mode, Battery Tests, and a Sunrise/Sunset Simulator

by Joey Castillo

One of the first questions I got about Sensor Watch came up during our Teardown Session, back when we were assembling the first hundred boards. Helen Leigh, Crowd Supply’s Head of Community, asked: “That one-year battery life: is that real?” The short answer is: I think so! The longer answer involves explaining that thinking, and testing it by experiment.

Sensor Watch is powered by a CR2016 coin cell and, like any other electronic component, that coin cell has a data sheet. In this case, I’m using a data sheet for Energizer’s CR2016 battery, since it was the one I was able to find in the battery aisle at my local grocery store.

This data sheet includes all kinds of useful information, like the precise dimensions of the coin cell, as well as its chemistry and nominal voltage. It also includes its typical capacity (100 milliampere hours, or mAh) and a graph depicting its typical discharge curve:

This curve shows the typical voltage level over the course of the battery’s life when discharging at about a tenth of a milliampere (97 microamperes, or µA, to be exact).

This is not a lot of current. For comparison: if you were trying to light up a dim red indicator LED, you’d probably need more than ten times that much — 1 mA, or 1000 µA — and that would drain the battery about ten times faster. But for this hypothetical, let’s stick to what’s on the graph. In this scenario, the battery keeps pretty close to 3 volts for maybe 600 hours. Then it will start to drop, to about 2.6 volts after 900 hours. By 1100 hours, the voltage will have dropped all the way down to 1.8 volts, and the battery will be on its last legs.

If Sensor Watch drew 97 µA, we would expect it to follow this curve and the watch would be dead after 45 days (1100 hours ≈ 45 days).

But of course, Sensor Watch doesn’t draw 97 µA.

How Low Can You Go?

The Microchip SAM L22 is a great fit for this project for a number of reasons. We’ve already talked about its ability to speak the language of our LCD display glass, but it’s also a good fit because it’s deeply optimized for low power consumption. In particular, the CPU, the most power-hungry part of the microcontroller, can enter a standby mode where it consumes almost no power, while the microcontroller keeps running things like the screen and the real-time clock.

Movement, the community firmware for Sensor Watch, takes advantage of this to offer two modes, both of which consume a different amount of current:

Let’s look back at that graph from earlier and do some back-of-napkin math. If we can expect to draw 100 µA for 45 days, how long could we expect to draw 30 µA? Hypothetically: one third the consumption ≈ 3x the time! In truth the reality may be a bit different — batteries also discharge themselves, and the chemicals inside deteriorate over time — but it’s useful to get a sense for the orders of magnitude involved:

Clearly, we’re only going to hit this year-long battery target if we spend as much time as possible in sleep mode. But before we talk about that, let’s talk about what Sensor Watch does while awake.

Power trace: ten seconds in normal mode

When Sensor Watch is awake, it’s able to update the display once a second, which means you can have second-level granularity in a time display, or a countdown for the validity window of a two-factor authentication code. When the watch is awake, it’s also ready for you to press the Mode button to change modes, or the Light button to illuminate the screen. This is clearly the mode that’s most useful to folks.

One minute in sleep mode

Now let’s talk about sleep mode. In sleep mode, the display is still on, but it can only update once a minute. That’s clearly no good for your two-factor authentication codes, but if you’re meeting up with friends at 6:30, it’s probably useful enough to know that it’s 6:10; you don’t need the seconds! And yes, the mode and light buttons are disabled, but pressing the wake button immediately wakes up Sensor Watch and restores full functionality.

Movement includes a couple of mechanisms to allow watch faces to fit into the low power strategy. First, each watch face gets a “timeout” event after a configurable interval. Watch faces like the TOTP face can respond to this timeout by snapping back to the first watch face (usually a clock), effectively opting out of sleep mode, and passing control to a watch face that’s better suited to this low power mode.

But watch faces can also implement a low power update method, which allows them to stay on screen in sleep mode. The sunrise/sunset watch face, for example, does just that: it can stay on screen in the 10µA sleep mode and always show the next sunrise or sunset for your location. Watch faces like beat time, world clock and stopwatch all implement this UI, so Sensor Watch can display much more than the time while sipping mere microamperes of current.

Let’s Do The Math (and the Science)

Let’s assume that over the course of the year, we average one hour a day in active mode (29.42 µA) and 23 hours a day in sleep mode (9.85 µA). We’d average 10.67 µA of current consumption per day. Our CR2016 battery has a capacity of 100 mAh, so assuming we can make use of all of that juice: 100 mAh / 10.69 µA ≈ 9355 hours ≈ 391 days. That’s pretty good!

In fact, I did a spreadsheet trying to work out the expected battery life, and this is where the “year-long battery life (estimated)” comes from: if we can stick to active mode for two hours a day on average, the watch should last a year. The math makes sense to me. But of course, this is only in theory. If we want to test it out, we can’t use math alone. We have to use… SCIENCE!

Battery Test: Day 93

Science involves having a hypothesis and testing it by experiment. In this case, our hypothesis is that the battery in the watch should last a year. The experiment: wear it for a year! On November 8th of last year I put a fresh Energizer CR2016 coin cell in this watch, and I’ve been using the Voltage watch face to monitor the battery’s voltage ever since. So far it’s sitting pretty at 3 volts — good news so far!

Of course, if you look again at that discharge curve, you’ll see that the battery voltage stays close to nominal for most of its life before dropping precipitously toward the end. So it’s tough to say right now whether we’re on target. The fact is, I can estimate, but only time will tell how long it can endure.

Backer Questions

This week we got three questions about the buzzer! First up: How hard is the soldering job? Or, rather, how easy is it to screw up if you’ve never/barely soldered before?

I think it’s pretty simple. The part involved isn’t even an an electronic component; it’s just a small bent piece of metal that you have to remove from the F-91W, and solder to the Sensor Watch circuit board. I’m working on a full assembly video, but for now, you can see a preview of this step here:

Second: If you don’t do the soldering job, does it break ALL buzzer functionality? Meaning the hourly chime won’t work?

Unfortunately, the soldering job is required for the buzzer to work at all, including the beep between modes and the hourly chime. The buzzer on the F-91W isn’t part of the circuit board; it’s embedded in the backplate of the watch, so this little metal tab has to be present for the Sensor Watch board to be able to reach out and buzz it.

Finally: Is the buzzer capable of making music? Can it play more tones than just the one that the base watch uses?

Yes, the buzzer can play a variety of notes! The one limitation is that it can only play one tone at a time; you won’t be able to get chords out of it. But as an example, for Halloween I did a hack for a friend that played his favorite Rob Zombie song!

News of the Watch

Last week I mentioned the Sunrise/Sunset watch face. I’m loving wearing it and watching the days get longer here in New York, and I want to share that feeling with y’all. So I’ve uploaded a version of the Sensor Watch emulator with geolocation support! Just click the "Set Location Register" button above the console, and then press the Mode button to go to the rise/set face. The "Alarm" button moves to the following rise/set time. (You can change the location by holding the Alarm button, but note that you’ll also need to change the time zone for the predictions to be accurate.)

We’ve also merged in some improvements to the Stopwatch watch face this week. It now supports counting in low energy mode, and it can count up to 39 days, 23 hours and 59 minutes. That’s a long time!

Anyway: next week is our last regularly scheduled update before the campaign comes to a close, and I’m going to be honest: I’m not sure what it will be about! Do you have any burning questions or topics you’d love to see covered? Reach out and let me know! Until then, thanks again for your support, and I’ll see y’all next week.

- Joey


Sign up to receive future updates for Sensor Watch.

Sensor Watch is part of the Microchip Get Launched design competition!


Subscribe to the Crowd Supply newsletter, highlighting the latest creators and projects