KaroWear is a NRF52840 based watch in a USB dongle form factor. It contains a Heart rate and pulse oximetry sensor, accelerometer, gyroscope, magnetometer, temperature, humidity and pressure sensor along with a OLED display, vibration motor and RGB LED. It has a 75mah lipo battery and charger as well. The NRF52840 has a cortex M4 along with support for multiple 2.4GHz protocols, Bluetooth Low Energy, ANT, IEEE 802.15.4, Thread and nordic proprietary along with native USB enabling multiple ways to program it.
I designed an enclosure for the PCB in solidworks and it looked quite good but after 3D printing, its not that great. It is bulky. This is mainly due to a thick PCB (1.6mm) and a tall motor. Since the thickness is 1.6mm it wobbles a little when i plug it in the USB port. The case is snap fitted together. It has an opening for the HR sensor, LED and a small hole to press the reset button.
The NRF module is slightly thicker than the HR sensor, so the area above the NRF module is extruded more than the rest of the area.
In the next iteration i plan to fix these problems and make a slim watch. Also the wall thickness of the enclosure is greater than the button so i cannot press the button. To add some protection i will need to add a laser cut thin acrylic sheet over the OLED.
I ordered a couple PCBs from JLCPCB. They are of quite good quality given the cost and turnaround time. Since NRF52840 has native USB i thought of making a USB dongle form factor. I could simply plug it in and program it using a USB bootloader.
The design is not complicated, its just the NRF connected to the sensors over I2C. It does not focus on low power yet. I added a few pads for debugging and programming like the SWD pins, 2 pins for RX,TX and power pins. I wanted it to work on both 1.8V and 3.3V so i added some solder bridge pads so i connect/disconnect them to convert from 1.8V to 3.3V and vice versa. All of the ICs except the MAX30101 have 1.8V and 3.3V compatible logic levels, so i added a transistor level shifter on the I2C of it. Unfortunately, I connected the 2 capacitive pads wrong, as the NRF52840 does not support the ISOURCE method. You can read more about it in the Nordic docs about capacitive touch. I will have to change the capacitive touch design in the next revision. The next iteration would also have 0402 or maybe 0201 components instead of the 0603s i have used in this design.
The soldering took some patience. Again the most difficult was NRF52840 module. I had to align it perfectly with the outline i made on the silk screen and heat it up using the hot air gun then give it some gentle taps so there weren't any solder bridges underneath.
KWP-3 means KaroWear prototype - 3. Completely scraped KWP-2 and started fresh.
I use a black magic probe to program and debug it most of the time. Sometimes i use the nordic open bootloader which is a USB bootloader. I am using the NRF SDK currently, For the display i am using the u8g2 library and ported it to work with the NRF SDK. It is a great library, it handles a lot of the work, i just had to write the low level I2C communication. I plan to switch to Apache mynewt, circuit python, Zephyr or arduino. Mynewt and Zephyr have a working open source bluetooth stack so they seem interesting.
Next step is to make a 3D printed case and port libraries for all sensors.
After seeing a plethora of activity tracker/smart watches popping up on markets like aliexpress, alibaba, gearbest, etc I thought to myself, how difficult would it be to make one. I googled and found a few DIY atmega328 based projects but they didn't look good or didnt contain bluetooth.
The goal is to make a device that I can wear everyday. It should be able to display time, notifications, calculate steps, calories, heart rate etc. the basics and should last atleast a couple days with medium usage.
I started looking for some interesting parts and found the new nrf52840. Which seemed perfect. It supports a bunch of protocols, Bluetooth Low Energy, ANT, IEEE 802.15.4, Thread, and nordics proprietary protocol operating in the 2.4 GHz band. They also released the Mesh SDK which would enable me to do some cool home automation projects. I wanted the parts to be well known in the make community so that they would already have the libraries. After some research i finalized on the following parts and ordered them from mouser.
NRF52840 (MDBT50Q-1M module from raytac) the main controller
MPU9250 (Accelerometer, Gyroscope and Magnetometer )
BME280 (temperature, pressure and humidity )
MAX30101 (pulse oximetry and Heart rate)
Next step was to make a prototype as fast as i could and check if everything worked. The design is just the sensors and display connected via i2c to the NRF. I made two different boards, one for the peripherals and one for the NRF52840 module. This would help isolate the problem whether it was in the code or in the soldering. I etched and soldered one at home over a weekend. The soldering would have been very tedious, but my hot air gun made things simpler. The most difficult part was the NRF52840 module, since it had pads below it.
I used an I2C scanner code to check if the sensors and display were working and some GPIO toggling for the LED and motor.