Smartwatches have been a trendy new thing recently. Living in Silicon Valley, there’s no shortage of techies wearing watches from Apple, Pebble, Motorola, Samsung, LG, etc. But even with all the options, I still haven’t found one that I liked enough to buy. So, I decided to make my own.

This is my smartwatch in progress.

Screen Shot 2016-04-08 at 12.23.02 AM

The idea started soon after I got this gold Casio watch as a birthday gift from Benson. It advertises a 10 year battery life, which seems insanely long! This made me question why we only get a few days from today’s smartwatches.


  1. Display whatever I want
  2. Get a decent battery life
  3. Look like a normal watch
  4. Learn something
  5. Have fun.

To start with, I researched around for a microcontroller and bluetooth module to be its guts, and settled on the LightBlue Bean.

The Bean has arrived!

The Bean is an Arduino + BLE module, and I picked it for its small form factor, wireless programming, low power requirements, and availability of an iOS SDK.

Miker from the bean forums had gotten a 0.66” OLED screen working, so I went with that as my display. My first (of many) exciting moment.. First display power on! Probably the first time I’ve ever been so happy to see random symbols float across my screen.

Screen Shot 2016-04-07 at 11.35.09 PM

Oh so exciting!

After a few tweeks, I bet you’ll never guess what I programmed it to say:

Screen Shot 2016-04-07 at 11.36.42 PM

Ok, once I got the Bean and display working, I set about tinkering with the physical aspects of my project. The board isn’t small enough to fit inside the Casio, but luckily, that’s nothing a dremel can’t fix.

Screen Shot 2016-04-07 at 11.22.26 PM

Removing the protoboard

Screen Shot 2016-04-07 at 11.25.25 PM

Be sure to review board layout before trimming!

I had to trim the back of the watch to fit the board in too, but I was too focused to remember to take a photo. Anyway, here’s the stripped down watch and display! Match made in dremel heaven.

Screen assembly, screen cover not removed yet

For aesthetic touches, I cut out some vinyl decals to stick on the inside of the watch glass to cover the display surroundings and parts of the circuit board.

Applying vinyl behind the screen

On to power.. For the power source, I was prototyping with the Bean’s included 3V 2032 coin cell battery, but switched over to a rechargeable 3.7V LiPo battery. Unfortunately, I didn’t have a regulator on hand with which to reduce the voltage. So feeling a bit gutsy and impatient, I attached the battery and watched the cutest smoke show I’d ever seen, along with a ruined circuit board. Oops. No picture here, so you’ll have to try for yourself.

After getting replacement parts and a 3.3V regulator this time, I put everything back together a little cleaner this time (below left), and worked on the code a bit more.

Left is new, right is burnt. Coin cell holders desoldered

There’s code to write for each of the 3 parts of the system:

  1. Code for the arduino on the Bean, which goes inside the watch
  2. Code for the iOS app that connects with the Bean via bluetooth, so the Bean can request data
  3. Code for the server where data is stored, so the iOS app can request data.

Screen Shot 2016-04-08 at 12.11.32 AM


Here’s the watch in its current form, the battery pack doesn’t fit (yet) so it sits just behind the watch for now.

Made a plastic cover to hold the battery in place

Battery installed

Everything assembled

Currently I have it programmed to get the date/time from my phone, and using the phone GPS to request weather data in my current location and total # of WHA locations worldwide. All on a press of the bottom left button. Voila!

Ta dah! Time, date, weather, temperature, # of WHA locations, and battery voltage.

Some technical notes.. I did a rough power measurement of the different states the watch is in. Current here is measured from a 4.2V source I had (I should have just measured from the 3.7V battery), before going into the regulator.

  1. Idle with BLE disconnected ~0.4mA
  2. Idle with BLE connected ~1.8mA
  3. Active, requesting and displaying data ~14.6mA
  4. Button pushed down state ~54mA short burst.

Through mixed usage activity, I’m able to get 4.5 days of battery life, but I’ve got some ideas on improving this via some more code. I think I’ll keep the BLE disconnected and have the arduino keep the current date/time as well as other non-network needed information, and only connect to my phone when I want to request some new data. I’d happily tradeoff some connection time when I want new data for a 4.5x idle power reduction (1.8mA to 0.4mA), and hopefully get a few extra days of usage before recharging.

For future improvements, I’d love to switch my relatively power hungry OLED display to a LCD display for a more substantial improvement in battery life. I’d also want to design a thin PCB to fit both the OLED and Bean together, and make room for the battery inside the case. Maybe even fit an inductive charging circuit inside.

Screen Shot 2016-04-08 at 10.50.30 AM

!! If anyone knows where to get a mini LCD display like used in a FitBit Zip, please let me know!

1 Comment
  • Liltunechi Chygrynskiychichari

    2016-04-11 at 4:21 PM Reply

    nice work

Post a Comment