Make your own smart watch! Built with the Seeeduino XIAO BLE Sense microcontroller, this watch can be programmed in either Arduino or CircuitPython. For the purposes of this project we will be using CircuitPython.
- Color Screen (240x240 RGB TFT via SPI)
- GPS (receives lat, lng, alt, date, time, velocity, position of satellites, etc. via UART)
- Acceleromenter & Gyroscope (for running cadence, step counting, fall detection, detecting motion/position etc. via I2C)
- Heart Rate Monitor (receives raw analog data based on intensity of reflected light via AnalogIn)
- Microphone (via PDM In)
- 3 buttons (via Digital Pins with internal pull-up)
- Vibrational Motor (via AnalogOut/DigitalOut)
- 120mAh LiPo Battery (connected to builtin battery charging pins)
- Solar Panels (wired in series and connected to boost converter to 5V in. not currently working)
- On-Board File System (easy to modify code with any text editor, no need to rebuild)
- BLE (wireless file transfer and communication with phone/laptop, etc.)
- CircuitPython REPL (easy to test code)
- Arduino or CircuitPython compatible (easy to get started and lots of open source examples)
- NFC pins (not currently used)
- KICAD (free PCB Design Software)
- Fusion 360 (free CAD Software)
- Mu (free CircuitPython IDE)
- PyCharm (free fully fledged Python IDE)
- Gimp (free Image Editor)
- Ultimaker Cura (free gcode 3D print setup software)
- git (free version control software)
- Seeed Studio Official Documentation
- CircuitPython Official Documentation
- Interpreting NMEA Sentences (for GPS)
- Making Bitmaps
- WebBluetooth Editor
Item | Reference | Quantity | Price | Shipping | Features | Price at Scale |
---|---|---|---|---|---|---|
*Seeed XIAO BLE nRF52840 Sense | nRF2580 | 1 | $15.99 | $8.99 | BLE, MicroPython, 6-axis IMU, Microphone, Battery Charger, 5uA sleep mode | $13.90 |
MakerFocus 1.3", 240 x 240 Color TFT | ST7789 | 1 | $12.99 | $0 (w/ Prime) | square, color, backlight, easy to use | $3.78 |
Gooouuuunu Tech GPS module | GT-U7 | 1 | $11.59 | $0 (w/ Prime) | GPS with antenna, 2.5m accuracy | $5.49 |
Pulse Sensor Arduino Heart Rate Sensor | N/A | 1 | $8.99 | $0 (w/ Prime) | small analog pulse sensor | $1.38 |
120 mAh LiPo Battery | PL521521 | 1 | $8.39 | $0 (w/ Prime) | 3.7V, 120mAh | $4.14 |
Vibrational Motor | N/A | 1 | $7 | $0 (w/Prime) | works on analog or digital output pins | $0.20 |
Momentary Buttons | N/A | 3 | $7 | $0 (w/Prime) | Momentary Buttons | $0.15 |
Flexible PLA | FPLA | 1 | $33 | $0 (w/ Prime) | flexible brown PLA | ~$2 |
Custom PCB | N/A | 3 | $15.70 | $5 | 0.8mm | ~3 |
**Solar Cells | IXOLARTM SolarBITs | 10 | $29.4 | $4.99 | 0.56V, 24.5mW | $18.7 |
**Boost Converter | N/A | 5 | $7.99 | $0 (w/ Prime) | 0.9-5V to 5V | $0.5 |
*$16 Seeed BLE can be replaced by $6 Seeed if bluetooth, accelerometer, and gyroscope are not desired
** Adding solar panels costs ~$40 and has so far not been effective
Item | Price |
---|---|
Soldering Iron | $21 |
Wire Strippers | $7 |
Solder | $7 |
Small Gauge Wire (30) | $13 |
Ender 3 Pro 3D Printer | $236 |
Gorilla Glue Gel | $8 |
- Without solar panels the components in the watch cost ~$70 or ~$40 if produced at scale.
- When building just one there will be some waste (e.g. you have to buy PCBs in batches of 3)
- Without solar panels, accelerometer, gyro, ble, or heart rate a gps watch could be made for ~$55, or ~$30 at scale.
- The simplest smart watch requires only a $6 Seeed, a $13 screen ($4 at scale), and a 3D printed band and could be produced for ~$20 or ~$10 at scale.
- Solar panels add ~$40 to the price and so far have not been effective (but I'm holding out hope).
Component | Part Pin | Board Pin |
---|---|---|
Screen | SCL | SCK |
Screen | SDA | MOSI |
Screen | Res | D4 |
Screen | DC | D5 |
GT-U7 | TXD | RX |
Bottom Button | + | *A0 |
Middle Button | + | A1 |
Top Button | + | A2 |
Vibrational Motor | + | *A0 |
Pulse | Signal | A3 |
- the silkscreen on the PCB says SCL and SDA implying the screen uses I2C, but these pins actually get connected to SCK and MOSI and the screen uses SPI
- screen SPI needs
polarity=1
,phase=1
. In Arduino, this isSPI_MODE3
- To display images, use GIMP to convert the image to an indexed bitmap, the fewer the colors used the better (recommended <10 colors) (see https://learn.adafruit.com/creating-your-first-tilemap-game-with-circuitpython/indexed-bmp-graphics)
- The internal IMU works using I2C. Before reading data, power the IMU and allow time to sleep before initializing (see
accel.py
)
- Make sure
TX
on the GPS is wired toRX
on the Seeed
- The vibrational motor and the bottom button use the same pin
A0
, so only one can be used at onse.
Unfortunately the pads on the custom PCB do not fit the Seeed quite right so soldering will be tough but possible. The next revision of the board should improve this.
To boot the Seeed:
- double click the boot button (located on right side of USB-C port).
- a File Explorer window should pop up on your computer with a CircuitPython D: drive
- drag and drop
boot/adafruit-circuitpython-Seeed_XIAO_nRF52840_Sense-en_US-20220607-ee3ccbc.uf2
into the CircuitPython folder - once the
.uf2
file gets loaded, the device will boot up and a new File Explorer window should pop up, now showing a folder containing code.py and alib
folder - copy and paste the contents of
src
into the CircuitPython device folder
When the Seeed is turned on or rebooted, either code.py
or main.py
will be run.
The easiest way to test code is to use the Mu Editor in RP2040 Mode.
You can run files individually with the Run button, or use the REPL to test stuff.
If you are interested in this idea and want to do some or all of this project on your own, I'd love to hear about it. I am toying with the idea of selling kits of materials as well, so let me know if you are interested! modularizer@gmail.com