diff --git a/articles/f91w/images/c7c8.jpg b/articles/f91w/images/c7c8.jpg new file mode 100644 index 0000000..0ba34d2 Binary files /dev/null and b/articles/f91w/images/c7c8.jpg differ diff --git a/articles/f91w/images/f91w-strap.svg b/articles/f91w/images/f91w-strap.svg new file mode 100644 index 0000000..a5e0112 --- /dev/null +++ b/articles/f91w/images/f91w-strap.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/articles/f91w/images/f91w.svg b/articles/f91w/images/f91w.svg new file mode 100644 index 0000000..19476c8 --- /dev/null +++ b/articles/f91w/images/f91w.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/articles/f91w/images/pcb.jpg b/articles/f91w/images/pcb.jpg new file mode 100644 index 0000000..ae4261f Binary files /dev/null and b/articles/f91w/images/pcb.jpg differ diff --git a/articles/f91w/images/watch1.jpg b/articles/f91w/images/watch1.jpg new file mode 100644 index 0000000..6a019b9 Binary files /dev/null and b/articles/f91w/images/watch1.jpg differ diff --git a/articles/f91w/images/watch2.jpg b/articles/f91w/images/watch2.jpg new file mode 100644 index 0000000..28abd69 Binary files /dev/null and b/articles/f91w/images/watch2.jpg differ diff --git a/articles/f91w/images/wrist.jpg b/articles/f91w/images/wrist.jpg new file mode 100644 index 0000000..58fbb38 Binary files /dev/null and b/articles/f91w/images/wrist.jpg differ diff --git a/articles/f91w/index.html b/articles/f91w/index.html new file mode 100644 index 0000000..6974c64 --- /dev/null +++ b/articles/f91w/index.html @@ -0,0 +1,439 @@ + + + + + sensor watch | jack bond-preston + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +

sensor watch

+ +

preamble

+

+some time back I was browsing Crowd Supply when I came +across the Sensor +Watch project by Joey Castillo. I had wanted some kind of "hackable" watch for a while, and had +looked at things like Watchy, but this +project hit the sweet spot for me. I love my existing F91-W, and this project was a good +combination of open source with community software support. one key feature that was important to +me is battery life - the Sensor Watch battery life in an average usage scenario is so long that +Joey's is still going +strong! +

+

+I was excited to pick one up and start messing around with it, but the first issue I came across +was availability - the delivery date for Crowd Supply orders was summer 2023 (I think they ended up +being delivered sooner than this, not sure). on top of this, shipping and import fees made it +pretty prohibitively expensive. I've always found this to be an issue with Crowd Supply as someone +based in the UK, even some things designed in the UK are very expensive from Crowd Supply as they +are assembled in/shipped from the US. so I decided to build one myself! +

+ +

component acquisition

+

+the first challenge was acquiring all the necessary parts to actually build one. I downloaded +the PCB files +and generated a BOM to figure +out exactly what I needed to acquire. I'm sure in ordinary times this would be easy enough, but the +current state of some electronics/silicon supply chains had other things to say. some parts are of +course still easy to come across, e.g. 10pF 0402 caps and 10k 0603 resistors; most of the +components of the Sensor Watch are this kind of commonplace part. what quickly became clear from +some scouring of the internet was that my main problem was going to be two parts: the +ATSAML22J18A-MUT (the processor +driving the Sensor Watch), and the +FH19C-9S-0.5SH(10) (the connector used to attach the extra sensor boards). +

+

ATSAML22J18A-MUT

+

+the former of these was a fairly well discussed shortage that had been ongoing for a while. it was + +the driving force of the Sensor Watch Crowd Supply delay. I spent quite a lot of time searching +around the internet, looking at various sites on the English-speaking and Chinese-speaking web. +sadly this part was clearly in very short supply, and prices could get pretty insane from vendors +that did have some stock. I received quotes for unit prices that include the following (USD/GBP): +$79.35, $6.56, $13.61, $6.83 (MOQ 4000), £6.45. I guess some people are desperate enough to pay +$79.35 :(. I spent so long looking for them that they ended up randomly coming back in stock on +MicrochipDirect. as of the time of writing this +article, +they are again out of stock. +the unit price I bought them for was £3.92, shipping and handling was ~£12. +

+

FH19C-9S-0.5SH(10)

+

+this part was out of stock everywhere I initially looked (the usual contenders for parts). I +searched around in a similar manner as the ATSAML22J18A-MUT, and found some similarly wild pricing. +I ended up purchasing a small quantity at a unit price of £0.44 from a website called +dacikeys. yes, the +site is actually called this. yes, the unit price is cheaper than digikey and mouser. yes, I +actually received all of my order, consisting of working parts. I was definitely shocked that this +happened, but sometimes bravery pays off I guess. I still can't endorse this shop. +

+

PCB and stencil

+

+for the PCB I opted to go with JLCPCB. I simply uploaded the +relevant gerbers, and adjusted the necessary settings. notably, +the +thickness should be 0.6mm - this does narrow the choice of manufacturer (for example, OSH Park +doesn't go this thin). I haven't yet ordered any sensor board PCBs, but +PCBWay seems to be the option there. The PCB turned +out great, although the silkscreen is a little hard to read at this size due to lack of sharpness: + +

+ +

assembly

+

+I decided to assemble myself. partially because the logistics of paying for assembly when I had to +source parts from many different providers seemed like a headache, partially because I thought it +would be a fun challenge and learning experience! +

+

+a few things were necessary to solder the components to this PCB. I'm sure someone talented could +hand solder this with an iron, but I can name a lot of things I'd rather do than try to do that +(especially the QFN SAML) - and +that list includes unpleasant things. I opted to go with +hotplate soldering, which is a cheaper +way to access the ease of reflow soldering. for a PCB like the Sensor Watch, where almost all the +components are on one side, it's ideal. the hotplate I have is the ever-popular +MHP30, which I +run IronOS on. I highly recommend it, it's great! my +soldering iron is the iconic +Pinecil (not +the fancy new V2 +though :[) which also runs IronOS. nice! +

+

process

+

+the assembly process is as follows: +

    +
  • +apply solder paste to the PCB with the stencil. make sure the stencil is really flush and just +kind of squeegee it on with a plastic card. I used tape to hold it in place. then carefully +removed the stencil, avoiding smudging the paste in doing so. +
  • +
  • +place components on the PCB. this was by far the most painful part of the whole process. a +steady hand is not something I was blessed with, and some of these parts are really small. I used a +microscope from Amazon for this, the ample manouverable lighting was a big help. a lot of time and +patience is required, but it's very first time doable with no prior experience! simply go through +the parts one by one, or by area of the board - whatever you prefer. then pick up the respective +part with some fine tweezers, and slowly put in place on the solder paste. thankfully, the paste +will lightly stick the component in place once you've done this (it is not knock-proof though!). +
  • +
  • +carefully (really!) place the PCB onto the hotplate and heat up. keep on until everything seems +to be melted, and the components have hopefully been pulled into place. that's the top side done! +let it cool down, then move on to the bottom. +
  • +
  • +time for some hand soldering. the button is pretty small, and very fiddly to do. I found you don't +need too much precision, but you have to be really careful with your iron as the plastic button +will melt if you touch it. once that's in place, it's just a matter of +removing the buzzer connector from your old PCB and +soldering it onto the back of the Sensor Watch PCB. this will feel blissfully easy after the +button! you also have to place the battery clip, but no soldering needed here :). +
  • +
+

+

+one area I found particularly difficult was the area with the oscillator crystal and the two 0402 +capacitors, C7 and C8. things are a bit cramped here, so extra care was needed: + +

+ +

software

+

+at this point the watch was assembled with all components in place. did it work? at this stage, no +idea. hopefully yes, and I could progress to the more familiar world of embedded software. +

+ +

bootloader

+

+the next necessary step is to flash the bootloader, so that we can put the firmware in place. +unfortunately this requires a little more real-world action. we need to access the SWD points on +the board to write the bootloader. ideally you could do this with some kind of +pogo pin jig - and if you were doing any +number exceeding about 5 I'm sure this would be worth the time. however, I decided to just solder +some jump wires (stripped on one end, solid tip female on the other) to the points on the board. +they're all close, but it's easy enough to do (albeit ugly). then I connected these to my +Adafruit Trinket M0 (PyRuler would also work). +the pin mapping is as follows: SWD=0, SWC=1, RST=3, V+=3V, GND=GND. +

+ +

+I used the + +flasher from the sensor watch repo to flash the bootloader. note that you could build the +bootloader yourself first and put the generated binary into bootloader.h - the source is located +here. personally, I just used the prebuilt +version from the repo. I had to change part of the Adafruit DAP library and add the SAM L22 DID to +get this to work, +I provided +the diff of this change in a Sensor Watch GitHub issue (I just now am remembering I promised to +upstream this, oops!). mercifully, I got the red blinky LED, and all was good! I unsoldered the +wires from the board, and tried to clean up most of the solder blob to keep the board fairly flat. +

+ +

movement

+

+now the bootloader is in place, the main firmware can be installed! +the community firmware, Movement is great, +so this is what I installed. there are a bunch of different useful faces available, and more +functionality is always being added. +

+

+flashing firmware was easy: I plugged the PCB into the end of a USB Micro B cable (plugged on the +other end into my computer) and double tapped the reset button (I find this has to be done quite +quickly, using my fingernail was the trick to doing this reliably on such a small button). done +successfully, the LED on the board pulses and a new drive labelled "WATCHBOOT" appears on the +computer. now a built UF2 firmware file can just be dragged onto the device to flash, thanks to the +bootloader flashed earlier. for the initial test, I just used a +prebuilt image to check +everything was working. I flashed this, and the LED pulsed and turned off, signalling success. +

+

+from here I just assembled the watch with the Sensor Watch PCB, and it worked! I verified LED and +buzzer function by playing around with various functionality. success! +

+ +

developing on movement

+

+one face I found particularly cool was the +TOTP face. I use TOTP +2FA on various accounts, so +having access to the codes on my wrist at all times was really appealing. at the time, the TOTP +face only supported one key - so I decided to improve it. +

+

+thankfully, Sensor Watch has an emulator for development. without this, development would be pretty +tiresome with the flashing and reassembling of the watch getting tiring if you needed to iterate on +some code and test it on the watch. the emulator runs inside the browser and uses +Emscripten. +some minimal +instructions on how to build this is available on the README. this allowed me to extend the +TOTP face easily and allow for multiple keys. +my PR was merged, and the +functionality is now available for anyone to use. the keys are added at compile time, so they are +baked into the firmware on flashing. for my purposes this is fine, as I never really change them. +however, with the recent addition of a +LittleFS +filesystem, the community have added +a version of the face which stores the keys on the filesystem. awesome! +

+

+some more details on using Sensor Watch for TOTP is available +on this blog post +(HN discussion, if you dare). it's even +running my code :)! +

+ +

epilogue

+

+ + + +

+

+some summary thoughts: +

    +
  • +shoutout to Joey Castillo. for creating the Sensor Watch as a beautifully open source project (the +fact I could independently make my own is what it's all about!). for being +so helpful and kind when I +asked for help. for having such a positive attitude towards those in the community who are using +Sensor Watch to learn about all kinds of things (seriously, check out the +Oddly Specific Objects Discord to see how much this guy +is giving to the community). +
  • +
  • +sometimes it's worth just trying things that are difficult. this is my first time successfully +doing and small-scale soldering of this kind, and it worked out great with some patience. having +the motivation from making something I thought was really cool was an important factor here I think. +
  • +
  • +if you have a Sensor Watch (or are planning to!) please go ahead and +contribute to movement if you have a cool idea. I'm sure some reviews would be helpful to spot +any issues on existing PRs before a maintainer gets to them to save some time. +
  • +
  • +the one issue I've had with using my Sensor Watch for TOTP is clock accuracy. the clock drifts over +time, so I have to set the time once or twice a week to keep it nice and accurate for the TOTP +functionality to be nice to use. but a community member is working on this, and it's going to get a +lot better. check out the Discord channel to see some seriously cool engineering going into this +calibration effort. +
  • +
+

+
+
+

+email me to have a conversation +

+ + + +
+
+
+ + + diff --git a/index.html b/index.html index 79b7edf..592f0ab 100644 --- a/index.html +++ b/index.html @@ -46,6 +46,11 @@ my onload commits at amd can be found on the github repo

+

articles

+

+ [14/11/2022] sensor watch +

+