
Posture tracker v2
Posture Correction using ESP32-MINI-1 and MU sensor (GY-521 / MPU-6050)
- Size
- 47.9 × 28.5 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 52
- Nets
- 82
- Pads
- 260
- Tracks, vias
- 437, 38
- Pours
- 2
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 25 Apr 2026
- Updated
- 10 Jun 2026
Overview
Posture tracker v2 is an open-source printed circuit board by kiranj26, from the kiranj26/Posture-Tracker-Using-ESP32 repository on GitHub, published under the MIT licence. It is a 2-layer board of 47.9 × 28.5 mm with 52 parts on 82 nets, routed with 437 tracks and 38 vias.
It is built around the ESP32-S3-MINI-1-N8, DRV2605LDGS and AP2112K-3.3TRG1, with the MCP73831T-2ACI/OT-HXY, MPU-6050 and USBLC6-2SC6 among its other parts. Its parts include 19 capacitors, 14 resistors, 7 ICs, 3 switches and 2 diodes. It belongs with the ESP32 boards of this library.
Main components
6ESP32-S3-MINI-1-N8
SMD-104.5dBm -40℃~+85℃ 2.4GHz 20.5dBm 330mA 3V~3.6V 97mA Bluetooth5.0 ESP32-S3FN8 Chip On-board PCB Antenna UART、SPI、I2C、I2S、USB SMD WiFi Modules ROHSEspressif SystemsWiFi ModulesDRV2605LDGS
VSSOP-10-0.5mm-40℃~+85℃ 1 2V~5.2V 500uA I2C Yes VSSOP-10-0.5mm Brushed DC Motor Drivers ROHSTexas InstrumentsBrushed DC Motor DriversAP2112K-3.3TRG1
SOT-25-5-40℃~+85℃@(Ta) 1 250mV@(600mA) 3.3V 50uVrms 55uA 600mA 65dB@(1kHz) 6V Fixed Over Current Protection、Thermal Shutdown、Enable control Positive SOT-25-5 Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSDiodes IncorporatedVoltage Regulators - Linear, Low Drop Out (LDO) RegulatorsMCP73831T-2ACI/OT-HXY
SOT-23-5LBattery ManagementHXY MOSFETMPU-6050
QFN-24-EP(4x4)-40℃~+85℃ 16bit 1KB 2.375V~3.46V 5uA Accelerometer Gyroscope I2C X,Y,Z X,Y,Z ±16g ±2000dps QFN-24-EP(4x4) Accelerometers ROHSTDK InvenSenseAccelerometersUSBLC6-2SC6
SOT-23-60.35pF、0.8pF 100nA 150W@8/20us 15V 2 5V 6A@8/20us 6V ESD SOT-23-6 ESD and Surge Protection (TVS/ESD) ROHSUMWESD And Surge Protection (TVS/ESD)
README
README.mdPosture Tracker V2 — Product Grade Wearable
Branch:
release/v2-product
Status: In development
V1 (MVP breadboard): See main branch
A product-grade evolution of the ESP32 posture tracker. V2 moves from a breadboard prototype to a wearable device — custom PCB, LiPo battery, haptic motor, and a compact shoulder-clip form factor small enough to wear all day.
Hardware: ESP32-S3-MINI-1 · MPU-6050 · DRV2605L + LRA · MAX98357A · 20mm speaker · 350mAh LiPo
Stack: ESP-IDF 5.5.0 · PlatformIO · C only (no Arduino, no C++)
Target size: 45×35×16mm (PCB + battery + clip)
What's New in V2
| Feature | V1 | V2 |
|---|---|---|
| Alerts | Audio only | Haptic (early) + Audio (escalation) |
| MCU | ESP32 Dev Kit breakout | ESP32-S3-MINI-1 stamp module (built-in PCB antenna) |
| Power | USB only | 350mAh LiPo — 12–15 hr battery life |
| PCB | Breadboard + breakouts | Custom 2-layer PCB, all ICs direct |
| Speaker | 3W 4Ω (50mm, large) | 0.5W 8Ω (20mm, compact) |
| USB | Micro-USB | USB-C with proper CC resistors |
| Buttons | None | 2 buttons — recalibrate + snooze |
| Form factor | ~120×80mm breadboard | 45×35×16mm shoulder clip |
Alert UX — Layered Haptic + Audio
The key design principle: haptics for early alerts, audio only for escalation.
| Time / State | Haptic | Audio |
|---|---|---|
| 10° for 3s — WARNING entry | Single tap | Silent |
| WARNING sustained | Double tap | Silent |
| 20° for 5s — BAD entry | Strong double tap | Double beep |
| BAD +8s | Triple pulse | Double beep |
| BAD +16s | Triple pulse | Double beep |
| BAD +24s onwards | Triple pulse | "Sit up straight" — repeats every 8s |
| Posture corrected | Long reward pulse | "Thank you good work" |
| 30s good streak | Gentle pulse | Silent |
SW2 (snooze button) mutes all audio for 10 minutes while haptics continue — for meetings, calls, or quiet environments.
Hardware
Component List
| Component | Part | Purpose |
|---|---|---|
| ESP32-S3-MINI-1 | Espressif | MCU — dual core, BLE 5.0, native USB, built-in PCB antenna |
| MPU-6050 | InvenSense | 6-axis IMU — pitch/roll angle sensing |
| DRV2605L | Texas Instruments | Haptic driver — 123 built-in LRA waveforms |
| Z10SC2B LRA | Jinlong | 10mm linear resonant actuator — sharp haptic taps |
| MAX98357A | Maxim | I2S Class D amplifier — voice clips + tones |
| CMS-2009-SMT-TR | CUI Devices | 20mm 8Ω 0.5W speaker |
| MCP73831 | Microchip | LiPo charging IC — 100mA from USB-C |
| AP2112K-3.3 | Diodes Inc | 600mA LDO regulator — 3.3V rail |
| USBLC6-2SC6 | STMicro | USB ESD protection on D+/D- lines |
| 350mAh LiPo | Generic | Battery — 12–15 hour runtime |
| USB-C (HRO TYPE-C-31-M-12) | HRO | Charging + programming port, both-orientation USB 2.0 |
Pin Assignment
| Signal | GPIO | Notes |
|---|---|---|
| I2C SDA | 8 | MPU-6050 + DRV2605L shared (GPIO21/22 do not exist on ESP32-S3) |
| I2C SCL | 9 | MPU-6050 + DRV2605L shared |
| I2S BCLK | 26 | MAX98357A |
| I2S WS | 25 | MAX98357A |
| I2S DOUT | 27 | MAX98357A |
| SW1 BOOT/CAL | 0 | Recalibrate / ESP32 boot |
| SW2 SNOOZE | 35 | 10-min snooze / mute toggle |
| SW3 RESET | EN pin | Hardware reset button |
| VBAT SENSE | 34 | ADC — battery voltage monitor |
| AUDIO MUTE | 48 | MAX98357A SD_MODE |
| USB D+ | 20 | Via USBLC6-2SC6 ESD protection |
| USB D- | 19 | Via USBLC6-2SC6 ESD protection |
Architecture
Three FreeRTOS tasks (V1) + Two new tasks (V2)
| Task | Core | Priority | Purpose |
|---|---|---|---|
| task_read_imu | 0 | 5 | IMU read every 100ms with light sleep |
| task_posture_fsm | 0 | 4 | State machine — unchanged from V1 |
| task_audio | 1 | 3 | Audio + haptic dispatch |
| task_buttons | 0 | 2 | Debounced button events |
| task_power | 0 | 1 | Battery monitor every 60s |
New modules vs V1
NEW: haptic.c — DRV2605L I2C driver, waveform playback (non-blocking)
NEW: power.c — battery ADC, low-battery warning, deep sleep entry
NEW: buttons.c — debounced GPIO, short/long press detection
UNCHANGED: mpu6050.c — I2C driver, atan2 angle math, EMA filter
UNCHANGED: posture_fsm.c — state machine logic (only alert commands change)
MODIFIED: audio.c — adds haptic command dispatch alongside audio
MODIFIED: main.c — init order adds haptic, power, buttonsPower System
USB-C (5V) → Polyfuse → MCP73831 LiPo charger → 350mAh LiPo
↓
AP2112K LDO
↓
3.3V rail → all ICsBattery life estimate:
- Active draw (IMU reading, no alerts): ~6mA average with light sleep
- 350mAh ÷ 6mA = ~58 hours theoretical
- Real world (audio bursts, haptic, occasional BLE): 12–15 hours
Low battery handling:
- < 3.5V → warning beep + haptic
- < 3.3V → shutdown tone + deep sleep
Form Factor
Assembled dimensions:
PCB alone: 45 × 35 × 1.6mm
PCB + battery: 45 × 35 × 8mm
With clip: 45 × 38 × 16mm ← final wearable size
Comparable to a car key fob.
Clips onto shirt collar, bra strap, or epaulette.
LRA motor faces the body for best haptic transmission.
Speaker grille faces outward.
USB-C and buttons accessible on edges.Development Phases
| Phase | Description | Status | Hardware |
|---|---|---|---|
| 7 | Haptic validation on breadboard (DRV2605L + LRA) | ⏳ Next | 📦 Parts ordered |
| 8 | Speaker swap validation (20mm 8Ω 1W) | ⏳ Next | 📦 Parts ordered |
| 9 | Battery system validation (MCP73831 + LiPo) | ⏳ Pending | 📦 Parts ordered |
| 10 | PCB V2 schematic + layout + fabrication (JLCPCB) | 🔄 PCB complete — awaiting order | Schematic ✅ ERC clean. Layout ✅ fully routed. DRC ✅ 0 errors, 0 unconnected, 2 cosmetic silk warnings. Gerbers ✅ hardware/pcb/v2/. JLCPCB order ⏳ pending. |
| 11 | Full integration + enclosure (3D printed clip) | ⏳ Pending | 🛒 Order after Phase 10 |
Branch Structure
main ← V1 MVP (public, breadboard, complete)
└── release/v2-product ← this branch — all V2 work
└── feature/haptics
└── feature/speaker-swap
└── feature/power-system
└── feature/pcb-v2
└── feature/enclosurePCB Layout — Complete
Design decisions locked
- 2-layer board — F.Cu for all signal and power traces, B.Cu solid GND copper pour
- Trace widths (IPC-2221 verified, 1oz copper, 10°C rise) — VBUS/VBUS_FUSED: 0.4mm, +3V3/VBAT/audio/motor: 0.3mm, all signals: 0.2mm
- Net classes — HighCurrent (0.4mm), Power (0.3mm), Audio (0.3mm), Motor (0.3mm), USB_Diff (0.2mm impedance-controlled), Default (0.2mm)
- Via spec — 0.8mm outer / 0.4mm drill (JLCPCB standard rule compliant)
- Board size — ~47.6 × 28.3mm (fits 45×35×16mm wearable form factor with battery)
- Connectors — J1: USB-C (HRO TYPE-C-31-M-12), J2: JST PH 2mm (battery), J3: Molex PicoBlade 53261-0271 (LRA haptic), LS1: Molex PicoBlade 53261-0271 (speaker)
Routing status
| Net group | Connections | Status |
|---|---|---|
| GND | ~72 | ✅ B.Cu + F.Cu copper pour, stitching vias placed |
| +3V3 | 23 | ✅ Routed |
| VBAT | 7 | ✅ Routed |
| VBUS / VBUS_FUSED | 4 | ✅ Routed |
| I2C (SDA/SCL) | 6 | ✅ Routed |
| USB_DP / USB_DM | 8 | ✅ Routed |
| I2S (BCLK/WS/DOUT) | 3 | ✅ Routed |
| Signals + buttons | ~31 | ✅ Routed |
Final DRC (2026-06-09): 0 errors, 0 unconnected, 2 cosmetic silk warnings (U1 silkscreen clips board edge — JLCPCB trims automatically).
File locations
hardware/
├── kicad/posture_tracker_v2/
│ └── posture_tracker_v2/ ← KiCad source (schematic + PCB + project files)
│ └── reports/ ← DRC.rpt, ERC.rpt
├── schematics/ ← Exported schematic PDF (posture_tracker_v2_v2.pdf)
├── pcb/
│ └── v2/
│ ├── gerbers/ ← 12 Gerber + drill files (canonical fab outputs)
│ └── posture_tracker_v2_gerbers.zip ← upload this to JLCPCB
├── bom/ ← Bill of materials
└── datasheets/ ← Component datasheetsHardware Visuals
PCB — 3D View
![]()
PCB — Top Layer
![]()
PCB — Bottom Layer
![]()
PCB — Combined
![]()
Schematic
![]()
Full schematic PDF: hardware/schematics/posture_tracker_v2_v2.pdf
Reference Docs
- CLAUDE.md — full V2 architecture, component decisions, hard rules, PCB design reference
- PHASES.md — V2 phase build guide (phases 7–11)
- hardware/schematics/SCHEMATIC_GUIDE.md — full reasoning for every schematic block
Parts
52| Qty | Value | Footprint | References |
|---|---|---|---|
| 10 | 100n | Capacitor_SMD:C_0402_1005Metric | C1, C2, C3, C4, C8, C9, C10, C11, C12, C13 |
| 5 | 10k | Resistor_SMD:R_0402_1005Metric | R3, R7, R8, R11, R12 |
| 3 | 10u | Capacitor_SMD:C_0805_2012Metric | C6, C7, C15 |
| 2 | 100k | Resistor_SMD:R_0402_1005Metric | R9, R10 |
| 2 | 1k | Resistor_SMD:R_0402_1005Metric | R6, R13 |
| 2 | 220p | Capacitor_SMD:C_0805_2012Metric | C18, C19 |
| 2 | 4.7k | Resistor_SMD:R_0402_1005Metric | R1, R2 |
| 2 | 5.1k | Resistor_SMD:R_0402_1005Metric | R4, R5 |
| 2 | FerriteBead_Small | Inductor_SMD:L_0402_1005Metric | FB1, FB2 |
| 2 | Molex_PicoBlade_53047-0210 | Connector_Molex:Molex_PicoBlade_53047-0210_1x02_P1.25mm_Vertical | LS1, M1 |
| 1 | 1M | Resistor_SMD:R_0402_1005Metric | R14 |
| 1 | 1u | Capacitor_SMD:C_0402_1005Metric | C16 |
| 1 | 22u | Capacitor_SMD:C_0805_2012Metric | C5 |
| 1 | 4.7u | Capacitor_SMD:C_0402_1005Metric | C17 |
| 1 | 47u | Capacitor_SMD:C_0805_2012Metric | C14 |
| 1 | 500mA | Fuse:Fuse_0805_2012Metric | F1 |
| 1 | AP2112K-3.3TRG1 | Package_TO_SOT_SMD:SOT-23-5 | U6 |
| 1 | BTN_CAL | SKRPABE010:SW_SKRPABE010 | SW1 |
| 1 | BTN_SNOOZE | SKRPABE010:SW_SKRPABE010 | SW2 |
| 1 | DRV2605LDGS | Package_SO:TSSOP-10_3x3mm_P0.5mm | U3 |
| 1 | ESP32-S3-MINI-1 | RF_Module:ESP32-S2-MINI-1 | U1 |
| 1 | HRO TYPE-C-31-M-12 | Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12 | J1 |
| 1 | JST-PH-2 | Connector_JST:JST_PH_S2B-PH-K_1x02_P2.00mm_Horizontal | J2 |
| 1 | LED_Green | LED_SMD:LED_0805_2012Metric | LED1 |
| 1 | LED_Yellow | LED_SMD:LED_0805_2012Metric | LED2 |
| 1 | MAX98357A | Package_DFN_QFN:TQFN-16-1EP_3x3mm_P0.5mm_EP1.23x1.23mm | U4 |
| 1 | MCP73831T-2ACI/OT | Package_TO_SOT_SMD:SOT-23-5 | U5 |
| 1 | MPU-6050 | Sensor_Motion:InvenSense_QFN-24_4x4mm_P0.5mm | U2 |
| 1 | RESET | SKRPABE010:SW_SKRPABE010 | SW3 |
| 1 | USBLC6-2SC6 | Package_TO_SOT_SMD:SOT-23-6 | U7 |
Questions
How big is the Posture tracker v2 PCB?
It measures 47.9 × 28.5 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Posture tracker v2 use?
52 parts, built around the ESP32-S3-MINI-1-N8, DRV2605LDGS, AP2112K-3.3TRG1 and MCP73831T-2ACI/OT-HXY. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the Posture tracker v2 KiCad files?
From the kiranj26/Posture-Tracker-Using-ESP32 repository on GitHub, at the commit this page was made from: the board is hardware/kicad/posture_tracker_v2/posture_tracker_v2/posture_tracker_v2.kicad_pcb and its schematic hardware/kicad/posture_tracker_v2/posture_tracker_v2/posture_tracker_v2.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Posture tracker v2 design in my own project?
Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).
Similar boards
- 2 layers50 × 50 mm

- 4 layers80 × 60 mm

BardsAssistant
jaylingelbach/BardAssistant
A tiny “Vicious Mockery” companion built on an ESP32-S3 DevKitM-1.
77 parts - 4 layers68 × 46 mm

Utter
IFAKA/utter
Utter: covert silent-speech text input from surface EMG (open-source ALS voice)
107 parts - 4 layers42.3 × 47 mm

- 2 layers71.8 × 62.2 mm

Air quality pcb v7
NilsEngelbach/air-quality-pcb
Seventh iteration: ESP8266 → ESP32-C3 (native USB, no UART bridge), fixes from the v6 design review, right-angle switches with longer actuators, a STEMMA QT port for optional sensors, and charge-status sensing.
85 parts - 2 layers64.3 × 24.5 mm

- 2 layers87.9 × 87.5 mm

- 4 layers85.6 × 54 mm

SYCL Badge 2024
ZigEmbeddedGroup/sycl-badge
The badge for the SYCL conference! https://zigembeddedgroup.github.io/sycl-badge/
92 parts39