Skip to content

๐Ÿ›  How I built it

CAD, circuits and a parts list.

This is the engineering half of the bracelet โ€” the housing dimensions, the full circuit, everything on the bill of materials and the logic that decides when it buzzes. Total build cost: about $48.

The CAD

Modelled as one printed housing with a snap-in lid, sized so the sensor sits flat against the wrist. Contact quality matters more than any other design choice.

42 mm34 mm42 mm11 mmTop view โ€” LED strip & strap lugsSide view โ€” sensor boss on undersideoptical sensor window20 mm strap slotsensor boss, 1.2 mm proud

42 ร— 34 ร— 11 mm

Small enough for a teenage wrist, deep enough for the battery underneath the board.

Snap-in lid

No screws. The lid clips over four posts so the electronics can come out during testing โ€” which happened a lot.

Standard 20 mm strap

Quick-release lugs, so it takes any ordinary watch strap instead of a custom band.

The circuit

Six components on one 3.3 volt rail. Nothing exotic โ€” every part is something a student can order and solder by hand.

LiPo 3.7 V400 mAhUSB-C chargerTP4056 + protection3.3 V regulatorLDO, 500 mAMicrocontrollerSeeed XIAO nRF52840Heart-rate sensorMAX30102 (I2C)LED strip5 ร— WS2812BVibration motor10 mm coin, 3 VMomentary buttonmode / reset3V3 / GNDSDA ยท SCLD0 โ†’ 470 ฮฉD1 โ†’ MOSFET + flyback diodeD2 (pull-up)Power: battery โ†’ charger โ†’ 3.3 V rail โ†’ everything else. Every ground is common.The motor never runs off a microcontroller pin โ€” it switches through a transistor, with a diode across it so the coil cannot kick current back into the board.The sensor sits on the skin side of the board so the window presses flat against the wrist.

The parts list

Bill of materials for the TEEN stress bracelet prototype
PartWhat it doesSpecCost
Seeed XIAO nRF52840Brain of the bracelet21 ร— 17.8 mm, Bluetooth LE, built-in battery charging pins~$16
MAX30102 pulse sensorReads the pulse signalGreen + IR LEDs and a photodiode, talks over I2C~$7
WS2812B LEDs ร—5Color changes with the trend2020 package, one data line, 470 ฮฉ series resistor~$4
10 mm coin vibration motorThe buzz3 V, driven through a small MOSFET with a flyback diode~$3
LiPo battery, 400 mAhPower3.7 V, 30 ร— 20 ร— 5 mm, protection circuit included~$8
TP4056 USB-C charger boardRecharging1 A charge current, over-discharge protection~$3
3D-printed housing + strap lugsHolds it all on the wristPLA, 0.12 mm layers, 42 ร— 34 ร— 11 mm, 20 mm strap slots~$1 of filament
20 mm silicone watch strapComfort and contact pressureOff-the-shelf quick-release strap~$6
TotalPlus solder, wire and a lot of reprints~$48

Prices are what I paid in small quantities; they move around a lot.

Build it yourself, step by step

Eight steps, about a weekend of work if the printing goes well. You need to be comfortable with a soldering iron, and you should have an adult nearby for the soldering and the battery steps.

Tools you'll need

  • โ€ข Soldering iron with a fine tip, plus solder and flux
  • โ€ข Wire strippers and thin (28โ€“30 AWG) silicone wire
  • โ€ข 3D printer, or a print service / makerspace
  • โ€ข Multimeter for checking continuity and battery voltage
  • โ€ข Small flush cutters, tweezers and kapton or electrical tape
  • โ€ข A computer with the Arduino IDE installed
  1. Step 1 โ€” Print the housing

    ~2 hours printingPrint the case and snap-in lid in PLA at 0.12 mm layers, 20% infill, no supports if the sensor window faces up. Test-fit the board and battery before you solder anything. Expect two or three reprints โ€” that is normal.
  2. Step 2 โ€” Lay the parts out dry

    15 minutesPlace the microcontroller, pulse sensor, charger board, battery and motor in the case exactly where they will live. Cut every wire to that length plus about 5 mm. Wires that are too long are the main reason lids will not close.
  3. Step 3 โ€” Wire the pulse sensor

    20 minutesFour wires: 3V3, GND, SDA and SCL from the MAX30102 to the matching pins on the XIAO. Keep them short and twisted. Power the board over USB and run an I2C scanner sketch โ€” if the sensor's address shows up, the hard part is done.
  4. Step 4 โ€” Add the LEDs

    20 minutesChain the five WS2812B LEDs data-out to data-in, feed the first one through a 470 ฮฉ resistor from a spare pin, and share 3V3 and GND. Run a test sketch that cycles colours before you glue anything down.
  5. Step 5 โ€” Add the buzz

    20 minutesThe vibration motor does not go straight on a pin. Switch it with a small MOSFET, put a flyback diode across the motor terminals, and keep it on its own rail. Test with a one-second pulse โ€” if the board resets, the diode or the rail is missing.
  6. Step 6 โ€” Power and charging

    30 minutesBattery into the TP4056 input, TP4056 output to the board's battery pins. Check polarity twice with the multimeter before connecting; LiPo cells do not forgive this. Charge fully, then confirm the bracelet still runs with USB unplugged.
  7. Step 7 โ€” Flash the firmware

    45 minutesUpload the beat-detection sketch, then watch the serial plotter with the sensor pressed against your wrist. You are looking for a clean repeating wave. If it is noisy, it is almost always contact pressure, not code.
  8. Step 8 โ€” Close it up and wear it

    1 week of testingClip the lid on, fit a 20 mm strap, and wear it for a few days without acting on anything it says. Those days are what build your personal baseline โ€” and what show you where the design still annoys you.

Before you start

Lithium batteries can catch fire if they are shorted, punctured or wired backwards โ€” do the battery and soldering steps with an adult, in a ventilated space, and never leave a charging cell unattended. What you end up with is a science project, not a health device: it estimates a signal, it does not measure stress and it cannot tell you anything about your health.

Step-by-step build photos from my own prototype are being shot and will be added here โ€” the diagrams above are the drawings I built from.

How it decides you're stressed

It never sees your homework or your group chat. All it has is the rhythm of your heartbeat โ€” so the logic stays deliberately simple.

1. Sample

The sensor streams raw light readings at 100 Hz. The firmware finds the peaks in that waveform โ€” each peak is one heartbeat.

2. Measure the gaps

The time between beats is never identical. Those tiny differences (heart-rate variability) are what the bracelet actually watches, averaged over five minutes.

3. Learn your normal

For the first few days it just records, building a personal baseline. There is no universal 'stressed' number โ€” only your own.

4. Nudge, don't nag

If the readings stay away from baseline for more than ten minutes, the LEDs shift warmer and the motor gives two short buzzes. Then it stays quiet for at least half an hour.

Three things that went wrong

The signal was garbage at first

The sensor was sitting a millimetre off the skin. Adding a 1.2 mm raised boss around the window โ€” so the sensor presses flat โ€” fixed more than any code change did.

The motor kept resetting the board

Driving it straight from a pin browned out the microcontroller. It now switches through a transistor on its own rail, with a diode across the motor.

Movement looks exactly like stress

Walking up the stairs raises heart rate too. The firmware ignores any window where the readings are also very noisy, which is a rough stand-in for motion.

One important limit

This is a student prototype, not a medical device. It estimates signals associated with stress; it does not diagnose, treat or prevent any condition, and its readings should never be used to make a health decision.