Sep 25 2013

DIY Digital Wristwatch

Introduction

The main incentive behind this project was to see how much I could cram, in terms of both hardware and software, into a wristwatch-like device that is no larger than the display itself. An OLED display was chosen for being only 1.5mm thick and not requiring a backlight (each pixel produces its own light), but mostly because they look cool. The watch was originally going to have a 0.96″ display, but this proved too difficult to get all the things I wanted underneath it. Going up a size to 1.3″ was perfect.

DIGITAL CAMERA
DIGITAL CAMERA



Hardware

Wristwatch schematic

Wristwatch schematic


On the hardware side the watch contains an Atmel ATmega328P microcontroller, 2.5V regulator, Maxim DS3231M RTC, 1.3″ 128×64 monochrome OLED, 2 LEDs (red and green), a buzzer sounder, 3 way switch for navigation, powered by a 150mAh LiPo battery which can be charged via USB and 2 PCBs (though one PCB is just used as a raiser for the OLED).

The ATmega328P uses its internal 8MHz oscillator and runs on 2.5V from a linear regulator. Its current draw is around 1.5mA when active and 100nA in sleep mode.

The DS3231M RTC is an excellent chip, housed in a small 8 pin package which includes a built-in temperature compensated MEMS resonator with an accuracy of ±5ppm (± 2 minutes 40 seconds per year). Only a decoupling capacitor and a few extra pull-up resistors were required. The RTC is wired up so that instead of having power applied to the VCC pin, it’s applied to the Vbat pin which reduces its current draw from around 100uA down to 2.5uA.
Unfortunately this chip seems to be very hard to get hold of at a reasonable price if you’re not in the US. I had to get mine as samples.

The battery charging circuit uses a Microchip MCP73832 along with some additional components for load sharing, where the battery can charge without the rest of the watch interfering with it.

You might have noticed in the schematic that the LEDs are directly connected to the microcontroller without any resistors. The internal MOSFETs of the microcontroller have an on resistance of around 40Ω, so with a 2.5V supply voltage and LEDs with 2Vf, around 12.5mA ends up through the LEDs. I would have liked to have a blue LED, but the voltage drop for those are usually more than 3V which would have required some additional resistors and a MOSFET.

As the microcontroller is running on 2.5V the battery voltage needs to be brought down a bit to obtain an ADC reading. This is done by a simple voltage divider. However, with the voltage divider connected across the battery there would be a current of around 350uA constantly flowing through it, this is a huge waste of power. A P-MOSFET (and some voltage level conversion for it, which I forgot about in the first version so it was always stuck on) was added so the divider can be turned on only when needed.

The 2.5V regulator being used is a Torex XC6206, primarily chosen for its tiny quiescent current of just 1uA.
Why a linear regulator and not a switching regulator? The switching regulators I looked at had an efficiency of at least 80% with a 2mA load, but that efficiency quickly dropped off to less than 50% with loads of 100uA. Since the devices connected to the regulator draw 2-3uA in sleep mode, a switching regulator would have performed incredibly poor compared to a linear regulator. The 2.5V linear regulator efficiency is 60% with 4.2V input going up to 83% with 3V input.

Underside

Underside

Top side, under display

Top side, under display

Software

So we’ve got a nice OLED display and 32KB of program space at our disposal, surely we can have more than just the time and date?

Almost everything is animated

A lot of time was spent optimizing the rendering code which, in short, involves copying bitmap images from flash to the frame buffer in RAM and sending the frame buffer over SPI to the OLED. The end result was being able to maintain 100+ FPS in almost all areas of the watch with an 8MHz AVR. However, since the animations are frame based instead of time based and to save power, the frame rate is limited to 60FPS.

Some of the main animated things:

  • CRT animation when entering and exiting sleep mode (similar to the CRT animation that some Android smartphones have).
  • Main time numbers have a ticker effect.
  • Menus have a scroll left/right animation and selecting an option will cause the current menu to fall off the screen and the next thing to fall on.

Alarms

  • Set up to 10 alarm times.
    Number of alarm times is only limited by the amount of available EEPROM.
  • Each alarm has the hour, minute and which days of the week it should be active on.
Alarms menu

Alarms menu

Games

Breakout

Breakout

Car dodge

Car dodge

 
 

Apps

Flashlight

Flashlight
Turns on all OLED pixels and LEDs, also has seizure strobe mode

Stopwatch

Stopwatch

 
 

Plenty of options

  • 3 Channel volume control
    • UI
    • Alarms
    • Hour beeps
  • Sleep timeout
  • Display brightness
  • Animations
    You’re not going to turn them off, right?
Volume settings

Volume settings

Power saving

In ‘active’ mode the microcontroller tries to go into idle sleep as much a possible. In idle sleep the controller is woken each millisecond to see if anything needs to be updated, if not then it goes back to idle sleep, this usually takes less than 100us if the display doesn’t need to be updated. In this mode the current draw can be anywhere between 0.8mA and 2mA, depending on how long it takes to draw frames (fast frame draw time = more time in idle sleep).

In ‘sleep’ mode the microcontroller turns the OLED off and goes into power-down sleep mode where it is only woken by either a button press, an RTC alarm or USB being plugged in. In this state the microcontroller draws ~100nA.

Power consumption

In sleep mode the overall current draw of the watch is around 6uA. In active mode the current draw can vary from 2mA to over 70mA, though 10mA is the typical current draw.


Battery life in various modes
Battery capacity: 150mAh

Minimum
(sleep mode)
Typical
(main time display)
High
(flashlight)
6uA
2.85 years
10mA
15 hours
64mA
2 hours, 20 minutes

If the watch is in active mode for an average of 1 minute per day (with a 5 second sleep timeout that would be checking the time 12 times a day) and all volume channels set to minimum the watch should last for around 1 year and 4 months on a single charge.


Current draw breakdown (typical)

Part Current
ATmega328P (sleep / active) 100nA / 1.5mA
OLED (sleep / active) 500nA / 8.5mA
DS3231M RTC 2.5uA
Schottky diode (D1) (reverse leakage) 1uA
Regulator (quiescent current) 1uA
Other (MOSFET and capacitor leakage etc) 1uA
Total (sleep / active) 6.1uA / 10mA

v1 to v1.1 changes

The first version had a few problems:

  • Added level conversion for the ADC P-MOSFET.
    Without level conversion the P-MOSFET was always stuck on. To turn of the P-MOSFET off the gate voltage needs to be at around the same level as its source voltage (which is connected to the battery), but the microcontroller was only providing 2.5V.
  • Added a gate pull-down resistor for the MOSFET driving the sounder.
    The MOSFET gate was floating when the microcontroller was being programmed which was causing the MOSFET to turn on and allow non-pulsed current to flow through the sounder, which probably wasn’t good for it.
  • Larger solder pads for MicroUSB connector.
    Normally SMD MicroUSB connectors have solder tabs at the sides and should have extra solder pads underneath, but since this is soldered by hand the underneath is unreachable. With out the extra solder pads the USB connector was wobbly so some of the connector pins eventually broke their solder joints. To fix this issue I enlarged the side solder pads so that the connector can be soldered all along its side instead of just the tab. No more wobbly connectors.

DIGITAL CAMERA

Other problems

Out of 3 OLED displays, 2 died after a few minutes of being attached to the watch. One from Ebay and the other from AliExpress. I’m still not sure why they died, maybe just China quality? The one that worked was also from Ebay.

Future improvements

  • Programming via USB.
    At the moment 4 wires need to be poked into the board (SPI programming) and then hope they don’t fall out while programming.
  • Add a fuel gauge IC.
    At the moment the battery level is determined by its voltage, this isn’t a very accurate method of getting the remaining battery charge.
  • Different microcontroller.
    The current firmware is using ~28KB out of the 32KB of available program space in the ATmega328P, a different microcontroller with more program space and probably more RAM would be needed to add more things like a calculator (floating point stuff eats up a lot of program space). However, the ATmega328P has the most program space for an AVR in a 32 pin TQFP package, to have more program space I would have to use a 44 pin AVR. The ATmega1284 looks interesting.
  • Switching regulator, charge pump regulator or maybe a hybrid solution?
    The linear regulator in use at the moment isn’t particularly efficient and switching regulators don’t seem to be very good with low current draw. Perhaps a charge pump regulator or a hybrid solution to swap between a linear regulator for sleep mode and a switching regulator for active mode?
  • A case of some sort?

Sources available at GitHub

Parts list

Schematic Part/value Description Quantity
U1 Atmel ATmega328P Microcontroller 1
U3 MCP73832 Lithium battery charger IC 1
U4 XC6206P252MR 2.5V LDO Regulator 1
U2 DS3231MZ+ RTC 1
Q1, Q2 DMP1045U P-MOSFET 2
Q3, Q4 DMG6968U N-MOSFET 2
D1 ZLLS410 Schottky diode 1
D2 TS4148 High speed diode 1
C5 4.7nF Capacitor 1
C4, C6, C7 100nF Capacitor 3
C3, C8, C9, C10 1uF Capacitor 4
C12 2.2uF Capacitor 1
C1, C2, C11 4.7uF Capacitor 3
R4, R8, R10 100R Resistor 3
R6 2.7K Resistor 1
R5 7.5K Resistor 1
R7 10K Resistor 1
R1 22K Resistor 1
R2, R3, R11 47K Resistor 3
R9 390K Resistor 1
RN1 10K network Resistor network (4x resistors) 1
LED1 LED (green) LED 1
LED2 LED (red) LED 1
LS1 Sounder Magnetic sounder 1
SW1 3 Way navigation switch 1
MicroUSB connector (Ebay) 1
OLED1 OLED (Ebay / AliExpress) 1
Battery (Ebay) 1
Main PCB 1
Display raiser PCB 1
Watch strap G10 NATO 22mm 1


Featured at
Atmel, HackADay, Electronics Lab, adafruit

Water proof down to 0m!

269 comments

17 pings

Skip to comment form

    • Martin Andersen on September 26, 2013 at 4:05 pm
    • Reply

    Über cool! That is a very nice build!

  1. this is great! you should make kits for these and enter it into contests on instructables.com

  2. Very cool, may I ask why you use lipo instead of coin cells? Apart from rechargeable what are the benefits?

    1. Coin cells start at 3V and go down to ~2V, which is a bit too low for the watch.
      The recommended discharge rate for most coin cells is less than 10mA, but the watch can easily draw much more than that.
      Mounting the cell and making it replaceable would be a bit of an issue, a coin cell with decent capacity is going be at least 20mm in diameter, a holder for it will take up the whole side of the PCB.
      Rechargeable Lithium coin cells are also available, but a 110mAh cell has a 24.5mm diameter, that’s slightly larger than the height of the screen and they’re not particularly thin either at 5.2mm.

    • Winston Tan on September 27, 2013 at 2:14 pm
    • Reply

    Awesome watch! Have you thought of using LPC11U24 which has builtin USB ROM drivers? It’s a 32-bit ARM Cortex M0 and it’s cheap! You can use QFN package to increase your board space.

    Cheers!

    1. I haven’t had any experience with ARM processors or soldering QFN packages yet, but I guess they should be the next thing to try out.

    • Pietro on September 27, 2013 at 2:28 pm
    • Reply

    How much money do i have to throw at the pc screen until i got one of these?

    • adrian on September 27, 2013 at 6:22 pm
    • Reply

    Congrats, a very , very nice project.

    • Thomas P on September 27, 2013 at 6:45 pm
    • Reply

    Would you be interested in selling kits with the components soldered on? I would be willing to pay over $60 for it .

    • emmanuel on September 27, 2013 at 7:01 pm
    • Reply

    hello Zak this is really amazing wonderful! the animation and the CRT transition effects, the games they all just cool and great! Good Job!. please i need to know how to just interface a micro-controller with a 0.96″ OLED module and also draw graphics on it. or can you please just direct me to any link, book that will explain the use of the OLED module. i will appreciate it a lot thanks.

    1. Thanks 🙂

      This should help explain how to use your OLED – http://learn.adafruit.com/monochrome-oled-breakouts/overview

    • Nick on September 27, 2013 at 7:29 pm
    • Reply

    Very, very nice… and I don’t mean “nice” as in one step up from OK, I mean the masculine niiiiiiice as in describing the latest Pagani Zonda or Ibanez Ziphos.

    That is some serious engineering, utter respect!

    Have the guys at tokyoflash.com seen this?

    • Mustela Nivalis on September 27, 2013 at 7:50 pm
    • Reply

    You can save some space off the MCU by adding a small FLASH chip like AT45DB161D or an SD card and store the bitmaps on that. The extra space used by the drivers instead of the bitmaps should be quite small.
    Replacing the AVR with an ARM Cortex M3 (I use STM for example) will also give you the USB connectivity. I recommend an ESD protection chip on the USB bus lines.
    Congratulation on the “load sharing” transistor+ diode implementation. One of my first projects with LiPOs was burnt to a crisp by the battery itself because I did not have this kind of protection and nor did the battery have any. After I added this kind of protection to all my LiPO circuits I never had a problem again.

    1. Moving the bitmaps off the MCU will slow all the drawing down. Using an ARM processor would probably be the best thing to do, though I’ll have to learn how to use them properly first since I’ve never used ARM before. 😀

        • Mustela Nivalis on October 1, 2013 at 9:46 am
        • Reply

        Another tip on the power path(load sharing circuit as you name it). You can always check and use an integrated P-MOSFET/Schottky like FDFMA2P853. This will save you some PCB space. Problem with this is the RDS(on) for the P-MOSFET and the max forward current for the Schottky. But then again searching will give you some results of better combination. Perhaps this will help you reduce the leakage current.

    • Kevin Smith on September 27, 2013 at 7:52 pm
    • Reply

    Make it available to buy sooon. I would love to own one.

    Good Job.

  3. Nice work.Simple, classic and no unnecessary stuff. You should take it kickstarter.

    • Vincenttech on September 27, 2013 at 8:09 pm
    • Reply

    I would buy it for sure!
    Awsome Project.
    Try to put it on Kickstarter maybe some People would like it!

  4. Wow, this is an awesome hack! I am amazed you got that much functionality into a 328p! The animations of the bitmap menus are super sweet too, I am grateful for your source code. I think I might incorporate similar menus on my project, except my buttons aren’t buttons – they’re touch sensor electrodes. I’m using that .96″ screen you said was too small, and I agree the 1.3″ 128×64 looks great.

    Bookmarked your blog – will definitely be back to stalk you for more great ideas!

  5. Awesome work! You could save bit space by using QFN packages for the MCU and RTC. This could leave room for some inductive charging magic…

    • JustAnAnon on September 27, 2013 at 10:31 pm
    • Reply

    This is really impressive! Even the UI is nice looking.

    • Mike on September 27, 2013 at 10:47 pm
    • Reply

    Awesome project! I’m surprised at how fast the aminations are on the screen. I’ve been making and building projects using the 0.96″ i2c oled display that is much slower than SPI. If you sell kits then I’ll defiantly buy one!

    • davide on September 28, 2013 at 8:20 am
    • Reply

    Cool. Your project shows incredible skill in putting together a watch with a lot of features, in a really tiny space.
    Really impressive! And you are also sharing details on how you built it, so extra congrats for that 😉

    • Gabriel Crowe on September 28, 2013 at 9:09 am
    • Reply

    Found you through hackaday.

    I’m not even kidding, if this was a watch I could buy right here and just slap it on my wrist, you would have already had my money.

      • FranktheTank on September 28, 2013 at 5:27 pm
      • Reply

      I agree

      SHUT UP AND TAKE MY MONEY

      *WAVES MONEY FURIOUSLY*

    • Tim on September 28, 2013 at 11:12 am
    • Reply

    Do you have a part-number of manufacturer of the OLED display?

    1. WiseChip UG-2864KSWLG01
      I got mine from here and here.

        • Mike on October 2, 2013 at 12:52 pm
        • Reply

        I make projects using the 0.96″ oled and get mine from here: http://www.buy-display.com/

        1. Thanks for the link, I’ll have to check them out.

  6. I love this Wristwatch !
    Congratulations Zak !

    • kap on September 28, 2013 at 5:01 pm
    • Reply

    I love this project! Did you think put bluetooth?

    It would be awesome can connect with smartphones and notify messages or anything!

    1. Bluetooth was thought about, but that would have made the watch thicker so I decided to leave it out for now.

        • m on January 7, 2014 at 7:20 pm
        • Reply

        “For now” very, very interested in this. Any chance a ‘daughterboard’ could be used, so as to start wrapping along the wristband at an angle?

        1. Hmm, I could try adding some pads to access the SPI or I2C bus and power if I can fit them on the PCB. I’ll try adding them for the kit version.

    • rere on September 28, 2013 at 6:05 pm
    • Reply

    please add one time password to this watch.

  7. Can you sell it in kit form. I would be very interested in acquiring one.

  8. Wow, amazing job!!
    My two cents: could the battery be embedded directly in the wrist band to “hide” it and make it thinner even? Also if you added an accelerometer, you could switch the display automatically with a rotation of the wrist! This probably would even spare some energy in the long term.

      • m on January 7, 2014 at 7:18 pm
      • Reply

      battery-in-wristband is my idea too – don’t know how flexible this is: http://www.alibaba.com/product-gs/1432667139/014461_180mah_3_7v_ultra_thin.html

    • Snake on September 29, 2013 at 12:38 am
    • Reply

    Impressive! you made my (hack-a-)day, really.
    Very subtle touches, great execution. Perfect!

    Thank you for the opensourced stuff.
    Well… when can we buy the z-watch? 🙂

    • Maigo on September 29, 2013 at 5:54 am
    • Reply

    Sell me one!!!!

    • shadow1w2 on September 29, 2013 at 8:37 am
    • Reply

    I agree with others, I’d glady buy a kit for this sorta thing.

    Very impressive job.

    I wonder if a solar panel could be added to that.
    My best guess is a portable solar panel USB charger would have to do though it might look silly wearing one on your back just to power a fancy watch.

    I also wanna suggest a cooking timer for small temporary alarms.

    • Steve Diamond on September 29, 2013 at 8:18 pm
    • Reply

    Zak,

    Hugely impressive! Congratulations and thanks for the writeup.

    P.S. I’d buy one too!

  9. Absolutely amazing! COuld you add some GPS functionality and out everything in the waterproof resin? that would be cool 😀

      • Mike on October 2, 2013 at 12:53 pm
      • Reply

      GPS modules and the antenna needed are pretty bulky.

  10. Hey!

    Very very nice build!

    Do you plan on doing DIY kit or something? It would be nice, because it would drive the cost down for everyone that is interested.
    I did something similar a while back with the Makerbot Watch after doing a new rev ( http://wiki.gromain.info/tiki-index.php?page=Makerbot+Watch ). I can do it again if needed. The goal was to provide everyone with all the parts to be soldered together for the marginal cost for me. If I remember well, around 20 people got a kit a that time.

    Cheers,

    R

    1. I’m working on getting a kit available, still in early stages though.

        • Romain Bazile on October 5, 2013 at 12:50 pm
        • Reply

        That’s awesome then! Do not hesitate to ask if you need any help!

      • Sergey on June 5, 2014 at 6:09 pm
      • Reply

      I loved both your watch and if I can take somewhere PCB and HEX??

      1. The PCB design and .hex are in the .zip download, link is a the end of the post, just above the images.

    • Petr Stehlík on September 30, 2013 at 7:03 pm
    • Reply

    You simply rock! Thanks for making everything downloadable under the great GPL3. BTW, is the plastic base printed on a 3D printer?

    1. Thanks 😀
      I presume you mean the part between the main PCB and display? That is also a PCB, just without any traces on it.

  11. That was really Cool! Where do get those small small components. Can we play any custom animation in that!
    Really nice work buddy!

    • Irregular Shed on October 1, 2013 at 11:41 pm
    • Reply

    Add me to the list of people thinking this is an amazing design. I too would pay real money for it.

    • Ken Scharf on October 2, 2013 at 3:01 pm
    • Reply

    I like the atmega1284, in a QFN package it won’t be much bigger in footprint than the 32 pin QFP. You also might look at the ATXmega128A3U3 or U4 devices. These run at 3.3 volts at full speed, and have built in USB. They are available in BGA for an even smaller footprint. Atmel has a bootstrap package that works with these. Both devices are under $5 in singles too! I think sparkfun sells “RAW” OLED displays. You might consider going with one of those squarish COLOR OLED displays. You could then display photos in low res.

    • THX1082 on October 2, 2013 at 10:15 pm
    • Reply

    Add me to the list of those interested in a kit. I may not be able to wait and might attempt a clone. Did you use OSH Park for the PCB? Thanks.

    1. Yup, PCBs are from OSHPark.

    • tenrual on October 4, 2013 at 7:51 am
    • Reply

    create a data link with radio or skin, when you simply touch a door you can unlock it 🙂

    • Daniel on October 4, 2013 at 11:26 am
    • Reply

    Absolutely amazing!

    I’d buy one too! I would love to own one.

    • Allen Kipling on October 4, 2013 at 11:31 am
    • Reply

    Buddy this is amazing stuff . The idea , the concept, the execution is simply mind blowing. And thanks for sharing the information as well.I think you can just work on the modelling of the product and think of a marketing strategy . I for one would love to buy such a product. Good stuff buddy.

  1. […] functional and not overly bulky is very, very hard. [Zak], though, makes it look easy. He started his DIY digital wrist watch to see how much he could cram into a watch-sized device. The finished product is really incredible, […]

  2. […] functional and not overly bulky is very, very hard. [Zak], though, makes it look easy. He started his DIY digital wrist watch to see how much he could cram into a watch-sized device. The finished product is really incredible, […]

  3. […] functional and not overly bulky is very, very hard. [Zak], though, makes it look easy. He started his DIY digital wrist watch to see how much he could cram into a watch-sized device. The finished product is really incredible, […]

  4. […] functional and not overly bulky is very, very hard. [Zak], though, makes it look easy. He started his DIY digital wrist watch to see how much he could cram into a watch-sized device. The finished product is really incredible, […]

  5. […] functional and not overly bulky is very, very hard. [Zak], though, makes it look easy. He started his DIY digital wrist watch to see how much he could cram into a watch-sized device. The finished product is really incredible, […]

  6. […] functional and not overly bulky is very, very hard. [Zak], though, makes it look easy. He started his DIY digital wrist watch to see how much he could cram into a watch-sized device. The finished product is really incredible, […]

  7. […] I’ve been wanting to make something like this for a long time but I never did. This is truly impressive. It’s very nice looking and keeps a decent size. He has posted the schematics and source code on his website. […]

  8. […] “The main incentive behind this project was to see how much I could cram, in terms of both hardware and software, into a wristwatch-like device that is no larger than the display itself,” Kemble wrote in a recent blog post. […]

  9. […] watches are grand – been there for many years and I prefer them over digital watches, well this watch from Zak Kemble might just be an exception (Yes! its an exception!). Zak’s goal was to fit as much features […]

  10. […] DIY digital wristwatch would come in handy in many situations but i especially like the ability to set up to 10 alarm […]

  11. […] anticipated too huh?   How’s 1.5mm thick sound ?   Sounds pretty good to me too.  Zak has a really awesome writeup of him rolling his own […]

Leave a Reply

Your email address will not be published.

Are you human? *