General Smartwatch
A smartwatch-inspired device that tracks temperature, heart rate, and step count, and suggests actions based on mood.
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.
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
-
Microcontroller
Raspberry Pi Pico W- Dual-core Cortex-M0+
- Built-in Wi-Fi
- Supports Embedded Rust (Embassy)
- Low power consumption
-
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
-
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
-
Power Supply
LiPo Battery (9V, 500–1000mAh)- Portable power for wearable use
-
Input (Optional)
Tactile Push Buttons (x2 or x3)- Optional fallback input
- Connected to GPIOs for basic interaction
-
Breadboard
-
Jumper wires
Schematics
The Kicad scheme of the project:
Bill of Materials
Device | Usage | Price |
---|---|---|
Raspberry Pi Pico W | The main microcontroller with Wi-Fi support | ~35 RON |
1.3" ST7735 TFT LCD Display | UI display for time, sensor data, and mood | ~12 RON |
Rotary Encoder Module | Scroll navigation | ~10 RON |
MAX30102 Heart Rate Sensor | Measures heart rate and SpO₂ | ~15 RON |
BMP280 Barometric Pressure Sensor Module | Measures ambient temperature | ~8 RON |
MPU-6500 Accelerometer + Gyroscope | Motion detection and step counting | ~12 RON |
9V Alkaline Battery | Power supply for the smartwatch | ~10 RON |
Breadboard + Jumper Wires | Used for prototyping and wiring | Alredy owned |
Tactile Push Buttons (x2) | Simple back/exit and interaction input | Already 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.
Library | Description | Usage |
---|---|---|
embassy | Asynchronous embedded runtime for Rust | Handles multitasking and timing |
embedded-time | Comprehensive library for handling time-related operations in embedded systems | Provides time and date utilities for embedded sysems |
embedded-graphics | 2D graphics library for embedded displays | Used for drawing time, icons, and graphs on the display |
st7789 | Driver for ST7789 SPI TFT displays | Interfaces with the smartwatch’s LCD screen |
max3010x | Driver for MAX30102 pulse oximeter sensor | Reads heart rate and SpO₂ data |
heapless | Fixed-capacity data structures for no_std environments | Manages queues, buffers, and logging without dynamic allocation |
defmt | Logging framework for embedded systems | Provides efficient logging for debugging |