Close

Does this project spark your interest?

Become a member to follow this project and don't miss any updates

OSHWatch

An open-source "smart watch" that can be built from easily available parts, and assembled by hand. Designed for hackers

12 44 38
Enjoy this project?
Share on twitter   Share on Facebook

This project was created on 08/05/2014 and last updated 5 days ago.

Description
Smart-watches are becoming the next big thing, but with increased miniaturization it is becoming impossible to build these sorts of devices yourself. This project aims to provide a "smart-watch" which can be built from readily available components (eg. from element14, digikey, etc.), and able to be soldered by hand. Of course, processing power must be sacrificed, but who needs a camera and 60FPS graphics on a *watch*???

You are welcome to contribute! just comment below or send me an e-mail (on my website)
Details

I originally came up with the idea because I had an OLED display lying around, but no way to use it. So I turned it into a watch! I have been working on it for around a year now, and I have documented progress on my website: http://jared.geek.nz/2014/jul/oshw-oled-watch

The watch uses a PIC24F microcontroller and a 128x128 RGB OLED display, and features an accelerometer and magnetometer. The goal is to have both USB-HID (driverless) and Bluetooth 4.0 LE connectivity, so I can sync the calendar quickly and easily.

I have entered this into the hackaday competition, so I will be detailing further progress on this page! In particular, I still have to do the following:

  • Implement & Test Bluetooth 4.0 LE (Fingers crossed my PCB layout works!)
  • Design a Revision 3 PCB which fixes all the hardware bugs
  • Write a driver for the magnetometer
  • Implement an alarm clock with the peizo
  • Implement "tap to wake" with the accelerometer
  • Write a desktop app for updating the watch time and calendar (possibly syncing from google calendar or .icals)

And here is what is currently working:

  • RTC - It can tell the time!
  • Hard-coded university timetable
  • Simple pre-emptive RTOS with low-power sleep
  • Basic accelerometer logging
  • Button interface
  • USB-HID comms and bootloader (no PC drivers required!)
  • Battery charging & monitoring

I am going to try and finish this project before moving onto my next one, which will be completely re-designing the watch with an eInk display, an EFM32 Gecko, and very low power use in mind! I'll probably also use PCB software that is a bit more free than Altium Designer. But this is probably too much work to do for the competition's deadlines.

Bugs:

  • Watch sometimes resets when waking up
  • USB comms task sometimes doesn't go to sleep (drains battery more)
  • OLED display has some weird ghosting artifacts (have managed to reduce them somewhat)
  • In the schematic I got the connector around the wrong way, so the OLED is on the opposite side of the PCB than I wanted.
  • I didn't assign the OLED data lines to the PIC24's TFT driver, so I can't make use of it and drawing performance is less than it could be.

Components
  • 1 × PIC24FJ256DA206 Microprocessors, Microcontrollers, DSPs / Microcontrollers (MCUs)
  • 1 × 128x128 RGB OLED Display
  • 1 × nRF8001 Bluetooth 4.0 LE Transceiver
  • 1 × MMA7455 Accelerometer
  • 1 × HMC5883L Magnetometer
  • 1 × BQ25010 LiIon Battery Charger + Low power buck converter

Project logs
  • Progress Update

    6 days ago • 0 comments

    It's been a bit of a hectic week with University projects as well as this, but I've been chipping away at my github issues slowly fixing all the bugs with the firmware! (https://github.com/jorticus/zeitgeber-firmware/issues)

    I've had quite a few interesting bugs to fix:

    • Systick overflow bugs causing the watch to reset
    • USB not detecting that the cable has been unplugged
    • Buffer overflows in the printf() library
    • Image buffer becoming corrupted when compiler optimizations are enabled

    On the upside, I've got a new UI prototype and events system under-way:

    New UI
    CPU Utilization
    Old UI

  • Bluetooth Update

    18 days ago • 0 comments

    I finally got around to soldering in the nRF8001 bluetooth LE chip, and yes it does work! (I haven't yet tested the RF side of things, I only know it responds to commands)

    Also see my carefully soldered wires? This is why you should always add test points to your PCB!!! (The wires are connected to the SPI data/clock lines)

    Bonus picture: Blue Screen of Death!

    It now tells me something has gone wrong instead of just restarting. In this case my drawing code had some issues with pointers and near/far data addressing (Ah the joys of 16-bit processors)

  • UI Mockups

    22 days ago • 0 comments

    Here are some of my UI mockups from earlier on in the project..

    You can probably tell it is somewhat inspired from the Android Holo theme, but I am also using aspects in my website's design too. The battery bar is inspired from an app you can get on the Android market, which I think provides nice simple visual feedback of the battery level.

    I wanted to keep it very minimalistic, partly for the asethetics, but also to keep power consumption down and to reduce visible ghosting artifacts which seem to be a problem with my display.

View all 7 project logs

Discussions

Walltech wrote 4 days ago null point

Hi Jared! I'm working on my watch, and I'm really interested to know how you got hold of the battery percentage. I haven't come across a battery monitor IC that I've liked, and would like to know how you've done it. Also, what kind of battery life do you get? Thanks! -John

Are you sure? [yes] / [no]

Jared Sanson wrote 3 days ago null point

Hey, I'm actually just using a voltage divider + ADC to measure the battery voltage. Not very accurate but useful enough! (0% = 3.6V, 100% = 4.15V) I think there's a way to calculate actual capacity if you can also measure current (though that's a bit harder to do).

I'm currently getting about a day's worth of battery life, the trick is to put everything into sleep mode as much as possible.

Keep up the good work on your project! You're making great progress!

Are you sure? [yes] / [no]

peter jansen wrote a month ago null point

This is a great project, and really impressive! I really like your font library, and the variation of fonts that it has!

I think we're using the same display in our projects, and I was surprised how much juice it uses -- the +13V line can draw nearly 300ma when the display is on full-white, which requires it to have a decent sized battery. I think the protocol for the OLED initialization specifies that the OLED +13V should be disabled until the controller is enabled, which might be where the resetting bug is coming from, if there's too much current draw? For some different (much larger) OLEDs I've noticed that they would draw /a lot/ of juice and heat up substantially if the OLED voltage was enabled before the controller was initialized, so there might be something similar going on here, just briefly? It might not be something folks would notice unless their projects were battery powered.

Are you sure? [yes] / [no]

Jared Sanson wrote a month ago null point

Yeah I was also suprised at how much current it drew (mine used at least 100mA).
Thanks for the tips, I did try adding a delay between +12 power on and enabling the controller, but I don't think that fixed the problem. Maybe I'll try again just in case!

Are you sure? [yes] / [no]

Christian wrote a month ago null point

I really like what you have done. I've been working on my own watch project for a while now (too long actually), but yours beats mine out IMO. How hard was it to program for your OLED? The one I am using uses a simple serial interface, but I like the amount of control you seem to have with yours. Also, what kind of peizo are you using? I've been having a hard time finding a small surface mount one.

Are you sure? [yes] / [no]

Jared Sanson wrote a month ago null point

Ah well don't let me put you of your design, half the fun is doing it yourself! GPS is a pretty cool idea too

The OLED is actually pretty easy, it just takes a bit more work. Basically I have a 128x128 image buffer on the PIC, and that just gets written straight out to the OLED through an 8-bit data bus. I have my own drawing functions for drawing text/images/lines to that image buffer, but there are open-source libraries for that. The trickiest thing is the commands you need to send the display on start-up, but there's lots of code around on the internet for that. Also you have to make sure your microcontroller's got enough RAM for the buffer! 128x128x(2 bytes per colour)=32kiB of RAM!

As for the peizo, it's just something ripped out of an old watch soldered to wires...

Are you sure? [yes] / [no]

Mark Jeronimus wrote a month ago null point

I LOVE THIS. I was searching for smart watches that I can program on and came back empty every time. The Pebble doesn't multitask, the TI doesn't have matrix display, the WIMM, Sony, i'm Watch and others don't have enough buttons, are Android (overkill) or don't last long (not to mention that I can't verify my specific requirements without hands-on experience)

I want a wrist-device with RTC (doh), matrix display that's always on (even when stationary), easily programmable, lasts 20 hours on a charge, and at least four buttons (for up, down, enter and back). Will yours be able to do this once finished?

Are you sure? [yes] / [no]

Jared Sanson wrote a month ago null point

I'm glad you like it!

The current design uses an OLED, which in retrospect isn't that great for a watch because of the simple fact that it uses a lot of power, thus you can't have it on all the time if you want it to last an appreciable amount of time.

That's why I'm looking at e-ink for my next design, though that will be quite a few months away yet. With e-ink I expect battery life to be weeks or even months!

FYI another hacker has developed a smart-watch using "memory LCD" technology which is similar to e-ink: https://github.com/hairykiwi/OTM-02

Are you sure? [yes] / [no]

drsmith900 wrote 2 months ago null point

This looks great! I've been mulling over this sort of idea myself and I reckon you could probably get good results controlling the watch using tap/double tap on the accelerometer, if you have a simple UI

Are you sure? [yes] / [no]

Jared Sanson wrote 2 months ago null point

Yeah I've been meaning to implement that sort of UI for my current OLED prototype, but for now buttons work well enough. I know the accelerometer I'm currently using has a "tap detect" function which can generate an external interrupt, thus saving the MCU from having to continually sample it, which wouldn't be terribly great for battery life.

Are you sure? [yes] / [no]

Adam Fabio wrote 2 months ago null point

As a fellow watch designer, I'm watching this one - (pun intended). Gecko power is a great choice - plenty of processor, and low power.
I'm curious how the e-ink display will handle things like scrolling or sweep second hands.

Are you sure? [yes] / [no]

Jared Sanson wrote 2 months ago null point

I did some limited testing with the e-ink, I can get about 1-2FPS with a full refresh every frame, so it probably isn't quite fast enough for drawing a seconds hand or doing any scrolling. I am going to try some more experiments and see how much I can do with it though!

I have seen the Sharp Memory LCD "ePaper" used in another watch which has a higher framerate, but personally I like the look of eInk.

Are you sure? [yes] / [no]