Skip to main content
Version: FILS English

General Smartwatch

A smartwatch-inspired device that tracks temperature, heart rate, and step count, and suggests actions based on mood.

info

Author: Ghibirdic Maria-Cristina
GitHub Project Link: General Smartwactch

Description

This smartwatch is designed with user-friendly interactions for daily use. It displays the current time and temperature, monitors the user’s heart rate, and counts steps throughout the day. Based on the heart rate and activity levels, it provides simple mood-based suggestions: helping users become more aware of their emotional state. With its playful design and practical features, the smartwatch makes wellness tracking more engaging and accessible.

Motivation

I wanted to create something both interactive and useful, a tool that could assist in monitoring key health indicators while remaining easy and enjoyable to use. The idea was to design a lightweight smartwatch that not only tracks data like heart rate, temperature, and steps but also encourages the user to become more aware of their physical and emotional state. By combining wellness tracking with a subtle challenge to stay mindful, the project aims to offer value beyond simple measurements.

Architecture

This is the diagram that illustrates the components and their connections.

Schematic diagram

Raspberry Pi Pico W

  • Role: Acts as the "brain" of the smartwatch: it controls all sensors, reads inputs, manages the display, and processes data in real-time.
  • Connections:
    • I²C for temperature, heart rate, and motion sensors
    • SPI for display
    • GPIO for rotary encoder and tactile buttons

LCD Display (ST7735)

  • Interface: SPI
  • Role: Displays the user interface: time, heart rate, temperature, mood, and step count
  • Connections:
    • CS (Chip Select): GPIO17
    • CLK (Clock): GPIO18
    • MOSI (Master Out Slave In): GPIO19
    • DC (Data/Command): GPIO20
    • RESET: GPIO21
    • Backlight & Power: 3.3V and GND

Heart Rate Sensor (MAX30102)

  • Interface: I²C
  • Role: Measures the user's heart rate and SpO₂ levels
  • Connections:
    • SCL: GPIO5
    • SDA: GPIO4
    • Power: 3.3V and GND

Temperature Sensor (BMP280)

  • Interface: I²C
  • Role: Measures ambient temperature and pressure
  • Connections:
    • SCL: GPIO5 (shared)
    • SDA: GPIO4 (shared)
    • Power: 3.3V and GND

Motion Sensor (MPU-6500)

  • Interface: I²C
  • Role: Tracks movement and counts steps using 3-axis accelerometer and gyroscope
  • Connections:
    • SCL: GPIO5 (shared)
    • SDA: GPIO4 (shared)
    • Power: 3.3V and GND

Rotary Encoder (KY-040)

  • Interface: GPIO
  • Role: Used for UI navigation (scroll left/right + click to select)
  • Connections:
    • CLK (A): GPIO10
    • DT (B): GPIO11
    • SW (Click): GPIO12
    • Power: 3.3V and GND

Tactile Button 1

  • Interface: GPIO
  • Role: "Back" button to exit views or return to main screen
  • Connection: GPIO13

Tactile Button 2

  • Interface: GPIO
  • Role: "Reset" or additional custom input
  • Connection: GPIO14

Log

Week 5 - 11 May

I started to search for the necessary components, looking for inspiration online and creating the overall plan of the project. Also, I ran small tests to observe the functionality of the pieces that I am using, for a better understanding.

Week 12 - 18 May

Week 19 - 25 May

Hardware

  1. Microcontroller
    Raspberry Pi Pico W

    • Dual-core Cortex-M0+
    • Built-in Wi-Fi
    • Supports Embedded Rust (Embassy)
    • Low power consumption
  2. Display and User Input
    ST7735 TFT LCD

    • 1.3", 240×240 resolution
    • SPI interface
    • Displays time, mood, sensor data, and basic UI

    Rotary Encoder (KY-040)

    • Acts as a scroll wheel and selection button
    • Uses 2 GPIOs for rotation + 1 GPIO for click

    Tactile Push Buttons (x2)

    • One for back/exit, one for reset or additional input
    • Connected to GPIO pins
  3. Sensors
    Heart Rate Sensor - MAX30102

    • Measures heart rate and SpO₂
    • I²C interface
    • Used for mood/emotion estimation

    Temperature Sensor – BMP280

    • Measures ambient temperature and pressure
    • I²C interface
    • Accurate and low-power sensor

    Motion Sensor – MPU-6500

    • 3-axis accelerometer + 3-axis gyroscope
    • SPI
    • Used for step counting and motion tracking
  4. Power Supply
    LiPo Battery (9V, 500–1000mAh)

    • Portable power for wearable use
  5. Input (Optional)
    Tactile Push Buttons (x2 or x3)

    • Optional fallback input
    • Connected to GPIOs for basic interaction
  6. Breadboard

  7. Jumper wires

Schematics

The Kicad scheme of the project:

Bill of Materials

DeviceUsagePrice
Raspberry Pi Pico WThe main microcontroller with Wi-Fi support~35 RON
1.3" ST7735 TFT LCD DisplayUI display for time, sensor data, and mood~12 RON
Rotary Encoder ModuleScroll navigation~10 RON
MAX30102 Heart Rate SensorMeasures heart rate and SpO₂~15 RON
BMP280 Barometric Pressure Sensor Module Measures ambient temperature~8 RON
MPU-6500 Accelerometer + GyroscopeMotion detection and step counting~12 RON
9V Alkaline BatteryPower supply for the smartwatch~10 RON
Breadboard + Jumper WiresUsed for prototyping and wiringAlredy owned
Tactile Push Buttons (x2)Simple back/exit and interaction inputAlready owned

Software

The smartwatch firmware is developed in Rust, utilizing the Embassy async framework for efficient multitasking on embedded devices. Sensor readings, display updates, and data processing are structured as concurrent tasks.

LibraryDescriptionUsage
embassyAsynchronous embedded runtime for RustHandles multitasking and timing
embedded-timeComprehensive library for handling time-related operations in embedded systemsProvides time and date utilities for embedded sysems
embedded-graphics2D graphics library for embedded displaysUsed for drawing time, icons, and graphs on the display
st7789Driver for ST7789 SPI TFT displaysInterfaces with the smartwatch’s LCD screen
max3010xDriver for MAX30102 pulse oximeter sensorReads heart rate and SpO₂ data
heaplessFixed-capacity data structures for no_std environmentsManages queues, buffers, and logging without dynamic allocation
defmtLogging framework for embedded systemsProvides efficient logging for debugging
  1. mwatch_kernel
  2. Raspberry Pi Pico powers open source smart watch
  3. SmartWatch on the Raspberry Pi
  4. What is MAX30102 and how to use it | Heart Beat Sensor | UtGo
  5. How to build your own Raspberry Pi watch ...