Spitalul Virtual – open-source health smartwatch & band (student project)
Spitalul Virtual ("The Virtual Hospital"): a smartwatch and a slim screenless band that measure heart rate, blood oxygen (SpO2), skin temperature and steps all day, and send the data to a real telemedicine platform used by patients and doctors in Romania.
Hi! I'm Stancu Patrick, a middle-school student at Colegiul Național „Mihai Viteazul" Ploiești, Romania. I design the whole device myself: the circuit, the PCB, the firmware, the 3D-printed / silicone case and the phone app. In 2024 my project SmartBuoy won the Olimpiada Națională de Creativitate Științifică (Romania's national Scientific Creativity Olympiad), and in 2025 my project ThermoGuard (temperature monitoring for medical fridges) received an Honourable Mention. Spitalul Virtual is my project for 2026.



The problem
Spitalul Virtual is a Romanian telemedicine platform that already has registered users. Patients connect their smartwatch and press "Preia din dispozitive" ("import from devices"); the platform reads their heart rate, oxygen and activity, and a doctor can follow them between visits.
The problem is that this only works for people who own an expensive smartwatch. Most of the platform's users – often elderly people or patients with chronic conditions – don't have one. A commercial watch also measures what the manufacturer decides, keeps the data in its own cloud and cannot be repaired or changed.
So I decided to build our own: a low-cost wearable that measures exactly what a doctor needs, stores it all day even without a phone nearby, and is completely open source (hardware, firmware and app), so anyone can build, check or improve it.
Two devices, one platform
Spitalul Virtual Watch – a round watch with a 1.28" colour display (GC9A01, 240×240). It shows the time, heart rate, SpO2 and steps, and vibrates for notifications. Round black PCB, Ø 42 mm, Li-Po 402530 (~250 mAh).
Spitalul Virtual Band – a slim band without a screen, made to be worn day and night. It adds a high-accuracy skin temperature sensor (TMP117, ±0.1 °C) and keeps one record per minute for about 40–45 days. Black PCB 40 × 24 mm, Li-Po 302025 (~110 mAh), pod 44 × 28 × 11 mm.
Both use the same core: an ESP32-C3 (Wi-Fi + Bluetooth LE), a MAX30102 heart-rate / SpO2 sensor and a LIS3DH accelerometer for steps, USB-C charging and a vibration motor.
How the data reaches the doctor
The band saves one record per minute in its flash memory. When the patient opens the Spitalul Virtual phone app, the band sends everything new over Bluetooth LE. The app saves it to Health Connect, Android's health data store, where it sits next to the data from any other watch – and from there it goes to the Spitalul Virtual platform, so the doctor can follow the patient between visits.

The boards
Both boards are 2-layer, 1.0 mm thick, with black solder mask, white silkscreen and ENIG (gold) finish. All sensors are on the skin side; the ESP32-C3 module, USB-C connector, charger and power parts are on the top side, under the battery. Every design file is generated from one Python description of the circuit, so the schematic and the PCB always match. KiCad design-rule check: 0 errors, 0 unconnected pads.




Microcontroller – ESP32-C3
The brain of both devices is the ESP32-C3-WROOM-02 module: a 160 MHz RISC-V core with Wi-Fi and Bluetooth LE 5 and a built-in PCB antenna, placed at the edge of the board away from the battery and the USB-C connector. It reads all sensors over one I²C bus, keeps the per-minute history in its flash and talks to the phone. Its native USB is connected directly to the USB-C port, so the firmware can be uploaded with just a cable – no extra USB-serial chip. The side button (EVQP7C01P) wakes the device, starts a sync and switches it off.

Heart rate and blood oxygen – MAX30102
The MAX30102 sits on the skin side, under a window in the silicone floor. It shines red and infrared light into the skin and measures how much comes back; the firmware calculates heart rate and SpO2 from the two signals. Its core needs 1.8 V, so it has its own small regulator (XC6206, 1.8 V) and decoupling capacitors placed right next to the sensor (the smaller highlighted area).

Steps and skin temperature – LIS3DH and TMP117
The LIS3DH 3-axis accelerometer counts steps and also tells the firmware whether the band is being worn. On the band, the TMP117 (next to the TEMP label) measures skin temperature with ±0.1 °C accuracy through its own round window, with a small thermal pad between the sensor and the skin. This is skin temperature (usually 32–35 °C) – useful for trends during sleep, fever or exercise, not a clinical thermometer. Off the wrist, temperature is not recorded.

USB-C and Li-Po charger
A 16-pin USB-C connector with 5.1 kΩ resistors on CC1/CC2, so any USB-C charger supplies 5 V. The MCP73831 charges the Li-Po battery at about 210 mA (set by the PROG resistor) and drives a red charging LED that shines through the floor of the case.

3.3 V supply and battery sense
The ME6211 is a low-dropout 3.3 V regulator with a very low quiescent current, which matters for a device that runs all day from 110 mAh. A 100 kΩ / 100 kΩ divider with a 100 nF filter lets the ESP32 measure the battery voltage, so the app can show the battery level.

Vibration motor and status LED
An AO3400A MOSFET with a flyback diode (1N4148WS) drives a small coin vibration motor for alerts and for finding the band. A 100 kΩ pull-down keeps the motor off while the ESP32 boots. On the band, a green status LED shows through the clear top cap.

Watch display
On the watch, eight wire pads on the edge of the board connect the round GC9A01 display over SPI (SCK, MOSI, CS, DC, backlight). The display reset is tied to the ESP32 enable line, so both start together. The motor driver for the watch is highlighted on the right.

Case and straps
The cases are designed in OpenSCAD. They can be 3D-printed in flexible TPU (85A–95A) or cast in platinum silicone using printed molds (the molds are included). The board rests on a ledge with the sensors facing the skin; the battery sits on top of the ESP32 module and the vibration motor on top of the USB-C shell. On the band, a clear top cap is pressed into a silicone lip.


Firmware
The firmware is written in C++ (Arduino framework, PlatformIO). The band advertises the standard Bluetooth Heart Rate, Pulse Oximeter, Health Thermometer and Battery services, so it also works with existing fitness apps, plus a Spitalul Virtual service with live data and commands.
All-day history: once the phone has set the clock, the band averages heart rate, SpO2 and temperature every minute and counts the steps, then saves one 12-byte record. Records are buffered in RAM and written to flash every 10 minutes, in a ring of 8 files (96 KB each), so the band always keeps the last 40–45 days even if the phone is away. When the app connects, it asks for everything newer than the last sync and the band sends up to 20 records per Bluetooth packet. I tested the storage and sync logic on a computer with a simulated flash: 139 days of data, many file rotations, and every sync returned exactly the new records.
Phone app
The Spitalul Virtual app is written in Flutter. It finds the band, sets its clock, downloads the history and writes heart rate, oxygen saturation, steps and skin temperature to Health Connect. The Android version is built automatically by GitHub Actions on every change; it is still in development and will be finished and tested with the first prototypes.
Ordering the boards
I uploaded both designs to PCBWay (5 pieces each, black solder mask, ENIG, 1.0 mm). The engineering review was fast and very helpful: PCBWay pointed out that the 0.20 mm gap between the fine-pitch IC pads is too small for a black solder-mask bridge (black needs 0.22 mm), and offered clear options. I chose to keep the black mask without bridges between those pads.


Bill of materials (band)
ESP32-C3-WROOM-02-N4 – MCU, Wi-Fi + Bluetooth LE
MAX30102 – Heart rate + SpO2
LIS3DH – Accelerometer – steps, on-wrist detection
TMP117 – Skin temperature, ±0.1 °C
MCP73831 – Li-Po charger
ME6211 3.3 V / XC6206 1.8 V – Regulators
AO3400A + 1N4148WS – Vibration motor driver
USB-C 16P (HRO TYPE-C-31-M-12) – Charging and firmware upload
EVQP7C01P – Side button
Li-Po 302025 (~110 mAh), coin motor – Battery and vibration
What the sponsorship will help with
With PCBWay I will: assemble and test the first watches and bands;
compare heart rate, SpO2 and temperature with a medical pulse oximeter and thermometer, and calibrate them;
measure the real battery life with one record per minute;
finish the phone app and test the whole path to the Spitalul Virtual platform with real users;
present the project at the 2026 Olimpiada Națională de Creativitate Științifică.
I will share photos of the PCBWay boards, the assembly and the test results here as soon as they arrive.

Me (with the diploma, in the white T-shirt) on stage at the award ceremony of the Olimpiada Națională de Creativitate Științifică.
Open source
Everything – KiCad files, Gerbers, BOM, 3D models, case and mold files, firmware and app – is on GitHub under the MIT licence: github.com/stancupatrick1/spitalul-virtual. Project website: stancupatrick1.github.io/spitalul-virtual
This is a student project. Heart rate, SpO2 and temperature readings are estimates and are not for medical diagnosis.
Apply for sponsorship >>- Comments(0)
- Likes(0)