Close

Mechanical and Software Improvements

A project log for nRF52 SmartWatch

nRF52 Smartwatch from Scratch

jeff-cooperJeff Cooper 05/20/2021 at 18:082 Comments

I've been working on the watch a fair amount, but I realized I've been bad about project logs. So here's a sort of omnibus update:

Highlights

Mechanical

That's me, having just washed my hands. The cloudiness you see is not, unfortunately, a trick of the light, but a bit of water that got in (presumably through the flashlight hole) and stuck between the acrylic protector and the screen. Luckily this didn't damage anything, and eventually it cleared up on its own.  It did, however, demonstrate the need for something a little more robust than a hole with an LED poking out.

Adding a small protrusion for the light turned out not to impact the aesthetics nearly as much as I'd expected. I cut a small circle of clear acrylic and sealed it into the hole with a healthy drip of superglue, and I haven't had water issues on that side since. I do occasionally get a bit of water seeping in around the white button bar on the other side of the watch if I'm not careful, so the next revision of the case will likely include a better buffer there (or perhaps just make the TPU fit more snugly to keep water out). I don't need the watch to be fully submersible or waterproof, but it needs to be able to stand up to handwashing without damage.

Thermal

Electrical

Bootloader

Firmware

(I will note I haven't actually done anything with the `update()` but yet, and may remove it. We'll see.)

A good example of a View is WatchFace, which is the "home" view (it, unsurprisingly, shows the time and date). Near the bottom of that file is a hacked-together main menu view, which is created and drawn when one of the buttons is pressed from the watch face. Menu is its own view type, and I'm making heavy use of C++ lambdas to populate it. I'm sure I won't regret this at all, and it won't come back to bite me. Various menus will probably eventually be encapsulated in their own source files (and thus maybe use statically-defined functions rather than lambdas), but this is fine for now.

I'm pretty happy with the concept of views and the "View Stack" (exactly what it sounds like), which should give me enough of a framework to be useful without constraining what I can do when I start getting BLE notifications.

I'll try to post more frequent updates as time and life allow. Thanks for all the comments and suggestions; keep them coming!

Discussions

Kinetic Labs wrote 05/22/2021 at 03:58 point

Glad to hear the water didn't manage to fry anything! I've been casually glancing at some sealed button solutions, but there's a pretty short list at this form factor. I'm aware most G-Shocks have little o-rings around each button pushrod that seem to do the job. Maybe you could include something similar.

I have immense jealousy for your hardware progress. I need to put the time in and get a pcb together for my design so I can get to the fun casing stuff you're working through now. Best of luck!

  Are you sure? yes | no

Jeff Cooper wrote 05/22/2021 at 04:32 point

Thanks for the kind words!  It's hard to conceptualize how to put an o ring around a soft piece (the white bar is TPU), but I think I should be able to work something out.

As for the hardware: I've been locked in to a particular PCB form factor for quite a while because of the shape of my display; I've been able to iterate on the case somewhat independently because I know that there's very limited wiggle room in the shape of the board. The initial schematic was largely copied from an existing board (I think the sparkfun nrf52840 one) with stuff added to the i2c and spi busses, so that was a great way to hit the ground running.

  Are you sure? yes | no