System Architecture: Step & Study Hub
1. Hardware Block Diagram
The board is divided into an AC Mains Primary Zone (230V AC) and a Reinforced-Isolated Secondary Zone (5V / 3.3V DC) separated by a >= 5.0 mm creepage barrier and a 1.5 mm milled PCB slot.
flowchart LR
subgraph Primary ["230V AC Primary Zone (High Voltage)"]
AC["230V AC Input<br/>5.08mm Screw Terminal"] --> FUSE["1A Slow-Blow Fuse<br/>+ 10D471K MOV"]
FUSE --> EMI["Conducted EMI Filter<br/>0.1uF X2 Cap + 10mH CM Choke"]
end
EMI ==>|"Reinforced Isolation<br/>(>= 5.0mm Gap + 1.5mm Slot)"| HLK["Hi-Link HLK-5M05 / PM01<br/>230V AC to 5V DC"]
subgraph Secondary ["Low-Voltage Secondary Zone (3.3V / 5V Safe)"]
HLK -->|"5V Rail"| LDO["AP2112K-3.3 LDO<br/>(5V to 3.3V)"]
HLK -->|"5V Power"| LS["74AHCT1G125<br/>5V Level Shifter"]
LDO -->|"3.3V Rail"| MCU["ESP32-C3-MINI-1<br/>Wi-Fi Microcontroller"]
MODE["J_MODE Jumper<br/>(Stair vs Desk)"] -->|"GPIO4"| MCU
MCU <-->|"I2C (GPIO8/9)"| SENS["J_I2C (Qwiic)<br/>BH1750 Lux + SHT40 Temp"]
PIR["J_PIR (3-Pin JST)<br/>AM312 / mmWave Motion"] -->|"GPIO5 + RC Filter"| MCU
BTN["J_BTN (2-Pin JST)<br/>Study Desk Button"] -->|"GPIO6 + RC Filter"| MCU
MCU -->|"GPIO7"| BZR["Piezo Buzzer<br/>(NPN Driver)"]
MCU -->|"GPIO10 (3.3V)"| LS
LS -->|"5V Data + 330R"| LED["J_LED (3-Pin JST)<br/>WS2812B LED Strip"]
end
style Primary fill:#ffe6e6,stroke:#cc0000,stroke-width:2px
style Secondary fill:#e6f3ff,stroke:#0066cc,stroke-width:2px
2. Power Budget Breakdown
| Rail | Source | Max Available | Typical Load | Consumers |
|---|---|---|---|---|
| 230V AC | Mains Input | 1A (Fused) | ~25 mA | Hi-Link HLK-PM01 AC-DC Module |
| 5.0V DC | HLK-PM01 | 600 mA (3W) | ~350 mA | WS2812B LEDs (brightness-capped in firmware), 3.3V LDO |
| 3.3V DC | 3.3V LDO | 600 mA | ~120 mA | ESP32 Wi-Fi active, PIR/mmWave sensor, I2C sensors |
3. Dual-Mode Operating States
stateDiagram-v2
[*] --> Boot: Power On (230V AC)
Boot --> CheckMode: Read Mode Jumper / Flash Config
CheckMode --> BunkStairMode: Mode = STAIR
CheckMode --> StudyDeskMode: Mode = DESK
state BunkStairMode {
[*] --> IdleDark
IdleDark --> FadeOn: PIR / mmWave Triggered
FadeOn --> HoldLight: Soft Warm-White Step Glow
HoldLight --> FadeOff: No Motion for 30s
FadeOff --> IdleDark
}
state StudyDeskMode {
[*] --> AmbientStandby
AmbientStandby --> TaskLighting: Button Press / Home Assistant
TaskLighting --> BreakReminder: 45-Min Study Timer Chime
BreakReminder --> TaskLighting: Button Acknowledge
}
4. Microcontroller Pin Allocation Table (ESP32-C3-MINI-1)
Locking in pin assignments before schematic capture prevents strapping-pin boot conflicts:
| ESP32-C3 Pin | Net Name | Sheet | Direction | Function & Notes |
|---|---|---|---|---|
| GPIO4 | MODE_SEL |
sheet_mcu_core |
Input (Pull-up) | Closed to GND = Stair Mode; Open = Desk Mode |
| GPIO5 | PIR_IN |
sheet_sensors |
Input | Motion sensor trigger (1k + 100nF low-pass filter) |
| GPIO6 | BTN_IN |
sheet_sensors |
Input (Pull-up) | Desk tactile switch (10k + 100nF debounce) |
| GPIO7 | BUZZER_PWM |
sheet_outputs |
Output | PWM tone output to MMBT2222A buzzer driver |
| GPIO8 | I2C_SDA |
sheet_sensors |
Bidir | I2C Data (4.7k pull-up to +3V3) |
| GPIO9 | I2C_SCL |
sheet_sensors |
Output | I2C Clock (4.7k pull-up to +3V3, also Boot strapping pin) |
| GPIO10 | LED_DATA_3V3 |
sheet_outputs |
Output | Feeds 74AHCT1G125 buffer -> 5V WS2812B data |
| EN / GPIO9 | RESET / BOOT |
sheet_mcu_core |
Input | On-board tactile buttons + 4-pin UART header for flashing |