

UV Curing Box
UV PCB resin curing box controller using WCH CH32V003 RISC-V MCU, 4x4 keypad, TM1637 display, and KiCad PCB
- Size
- 213.7 × 144.8 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 151
- Nets
- 120
- Pads
- 325
- Tracks, vias
- 282, 3
- Pours
- 4
- Routed
- Yes
- KiCad
- KiCad 9.0 (file 20241229)
- Created
- 29 Sep 2026
- Updated
- 29 Sep 2026
Overview
UV Curing Box is an open-source printed circuit board by koko69420, from the koko69420/UV-Curing-Box repository on GitHub. It is a 2-layer board of 213.7 × 144.8 mm with 151 parts on 120 nets, routed with 282 tracks and 3 vias.
It is built around the CH32V003A4M6, AMS1117-5.0 and AO3400A, with the SS54 among its other parts. Its parts include 100 diodes, 36 resistors, 5 connectors, 4 capacitors and 2 ICs. It belongs with the lEDs and displays and keyboards and input boards and the RISC-V boards of this library.
Main components
4CH32V003A4M6
SOP-16SOP-16 Microcontrollers (MCU/MPU/SOC) ROHSWCH (Nanjing Qinheng Microelectronics)Microcontrollers (MCU/MPU/SOC)AMS1117-5.0
SOT-223-40℃~+125℃ 1 1.3V 15V 1A 5V 60dB Fixed Positive Short Circuit Protection、Thermal shutdown SOT-223 Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSAdvanced Monolithic SystemsVoltage Regulators - Linear, Low Drop Out (LDO) RegulatorsAO3400A
SOT-23-55℃~+150℃ 1 N-channel 1.45V 1.4W 30V 48mΩ@2.5V 5.7A 50pF 630pF 75pF 7nC@10V N-Channel SOT-23 MOSFETs ROHSAlpha & Omega SemiconductorMOSFETsSS54
SMA(DO-214AC)-55℃~+125℃ 1mA@40V 40V 550mV@5A 5A Independent SMA(DO-214AC) Schottky Diodes ROHSMDDSchottky Diodes
README
README.mdUV PCB Curing Box
A dedicated, safety-interlocked UV exposure and resin curing chamber controller powered by the ultra-low-cost WCH CH32V003 RISC-V microcontroller, featuring a 4x4 matrix keypad, a 4-digit TM1637 7-segment display, software PWM brightness control, and custom KiCad hardware.
Features
- RISC-V Microcontroller Core:
- Implemented on the WCH CH32V003A4M6 (QingKe 32-bit RISC-V2A core @ 48 MHz, 16 KB Flash, 2 KB SRAM).
- Built with the PlatformIO Community CH32V Arduino core (
ch32v003funHAL).
- Fail-Safe UV Safety Interlocking:
- The high-power UV LED MOSFET (pin A2) is strictly energized ONLY during the active
RUNNINGstate. - Transitions to
BOOT,IDLE,READY,PAUSED, orFINISHEDinstantly and continuously force the gate LOW.
- The high-power UV LED MOSFET (pin A2) is strictly energized ONLY during the active
- Dual Timing Modes:
- Timer Mode: Countdown timer with customizable duration (capped at 8:00 minutes) and automated shutoff.
- Stopwatch Mode: Elapsed time counter with live LED toggling.
- Fast Presets & Matrix Keypad Input:
- 4x4 matrix keypad interface for direct numeric entry, pause/resume, and reset.
- One-touch curing duration presets:
- A: 1:00 min
- B: 1:30 min
- C: 2:00 min
- D: 3:00 min
- On-the-fly cycle extension (
#button adds +5 seconds, clamped to 8:00).
- PWM Exposure Brightness Regulation:
- 50 Hz sampled software PWM (0–100%) designed to eliminate flicker and ensure accurate optical dose delivery.
- Dedicated on-screen brightness tuning menu (
b 0tob100).
- Telemetry & Status Display:
- TM1637 4-digit 7-segment display showing MM:SS with blinking colon indicators during exposure.
- Custom Hardware & PCB:
- Designed in KiCad with full schematics, PCB routing, 3D step models, and vector silkscreens.
Hardware Specification
Components & Microcontroller
- MCU: WCH CH32V003A4M6 (TSSOP-20).
- Display: TM1637 4-digit 0.36" / 0.56" 7-segment clock display module.
- Keypad: 4x4 tactile matrix keypad.
- Switching MOSFET: N-Channel Power MOSFET (low-side switch on A2 driving 395nm/405nm UV LED arrays).
- Power Input: 12V DC input for LED strings with onboard 5V / 3.3V LDO regulation for logic.
Hardware Prototype & Visual Design
Live Hardware Prototype
Below is the operational controller prototype executing a countdown exposure on the TM1637 4-digit display:
Electrical Schematic
PCB Board Layout & Copper Routing
| Complete Board Layout | Top Copper Layer (F_Cu) | Bottom Copper Layer (B_Cu) |
|---|---|---|
Pinout Mapping
| Function | Pin Name | Direction | Description |
|---|---|---|---|
| Keypad Row 1 | C1 | Output | Matrix row scan line 1 |
| Keypad Row 2 | C2 | Output | Matrix row scan line 2 |
| Keypad Row 3 | C3 | Output | Matrix row scan line 3 |
| Keypad Row 4 | C4 | Output | Matrix row scan line 4 |
| Keypad Col 1 | C6 | Input (Pullup) | Matrix column sense line 1 |
| Keypad Col 2 | C7 | Input (Pullup) | Matrix column sense line 2 |
| Keypad Col 3 | D4 | Input (Pullup) | Matrix column sense line 3 |
| Keypad Col 4 | D5 | Input (Pullup) | Matrix column sense line 4 |
| TM1637 CLK | D6 | Output | Display serial clock |
| TM1637 DIO | A1 | Bidirectional | Display serial data line |
| UV MOSFET Gate | A2 | Output | Low-side power gate driver (PWM) |
State Machine
stateDiagram-v2
[*] --> BOOT
BOOT --> IDLE: Initialization Complete
IDLE --> READY: Digit Entry or Preset (A-D)
READY --> RUNNING: Press '#' (Start)
RUNNING --> PAUSED: Press '*' (Pause)
PAUSED --> RUNNING: Press '#' (Resume)
PAUSED --> IDLE: Press '*' (Reset to Zero)
RUNNING --> FINISHED: Time Reaches 0:00 (Timer) or 8:00 (Stopwatch)
FINISHED --> IDLE: 5s Auto-timeout or Any KeyProject Structure
UV-Curing-Box/
├── Programs/ # PlatformIO firmware project
│ ├── platformio.ini # CH32V003 target configuration
│ └── src/
│ └── main.cpp # Complete non-blocking state machine & firmware
├── Schematic.pdf # Schematic diagram export
├── UV_curing_box.kicad_sch # KiCad schematic
├── UV_curing_box.kicad_pcb # KiCad PCB board layout
├── MCU_WCH_CH32V003xxx6.kicad_sym # Custom CH32V003 symbol library
├── led_string.kicad_sch # UV LED array layout
├── UV_curing_box.svg # Scalable vector graphics board plot
├── .gitignore # Git ignore rules
└── README.md # Project documentationFirmware Compilation & Flashing
Using PlatformIO (VS Code / CLI)
- Install PlatformIO Core and the Community CH32V platform:
bash cd Programs pio run - Connect a WCH-LinkE programmer to the single-wire debug interface (SWDIO on pin D1, GND, 3V3).
- Upload firmware:
bash pio run --target upload
License
Open hardware and embedded firmware. All rights reserved by the author.
Parts
151| Qty | Value | Footprint | References |
|---|---|---|---|
| 99 | LED | LED_SMD:LED_PLCC_2835_Handsoldering | D2, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23, D100 +83 |
| 33 | 47Ω | Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder | R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22, R23, R24, R25 +17 |
| 3 | 10µF | Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder | C1, C2, C3 |
| 2 | , | ||
| 2 | 10kΩ | Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder | R1, R36 |
| 1 | 100nF | Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder | C4 |
| 1 | 100Ω | Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder | R2 |
| 1 | 12V Input | TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-02P_1x02_P5.00mm | J1 |
| 1 | 4X4 Matrix Keypad | connector-smd:smd_conn_1x08_2.54 | J4 |
| 1 | 4X7 Segment Display | connector-smd:smd_conn_1x04_2.54 | J3 |
| 1 | AMS1117-5.0 | Package_TO_SOT_SMD:SOT-223-3_TabPin2 | U1 |
| 1 | AO3400A | Package_TO_SOT_SMD:SOT-23 | Q1 |
| 1 | CH32V003A4M6 | Package_SO:SO-16_3.9x9.9mm_P1.27mm | U2 |
| 1 | Open | Connector_Wire:SolderWirePad_1x01_SMD_1.5x3mm | J5 |
| 1 | Programming Header | Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical | J2 |
| 1 | SS54 | Diode_SMD:D_SMA_Handsoldering | D1 |
The 150 most common of 151 parts.
Similar boards
- 2 layers34.5 × 24 mm

- 2 layers43.9 × 54.1 mm

- 2 layers25 × 23.9 mm

Rpi camera led
mithro/rpi-camera-led
Interposer for the Raspberry Pi camera flex cable: passes the 15-way CSI bus straight through and adds I2C-controlled camera GPIO, PWM illumination LEDs and an ambient light sensor, driven by a CH32V003.
24 parts1Apache-2.0 - 2 layers45 × 49.8 mm

CCCCPPPS MkI
BogdanTheGeek/CCCCPPPS
Cheap Crappy Constant Current Portable Programmable Power Supply
26 parts12MIT - 4 layers

SUNNY C1-HEAD
RSXLX/sunny-the-growing-sunflower-lamp
SUNNY — The Growing Sunflower Lamp | A personal lamp with customizable exteriors, traceable fabrication, and a local creative workspace.
55 parts - 2 layers87 × 55.9 mm

- 2 layers48 × 36.5 mm

Osillyscope etchable
tvlad1234/osillyscope
Low cost, low part count CH32V003-based oscilloscope
31 parts30MIT - 2 layers24.1 × 21.6 mm

Ch32v003a4m6-breakout
mverdon/ch32v003a4m6-breakout
Breakout board for prototyping with the CH32V003 MCU
4 partsCERN-OHL-P-2.0
Questions
How big is the UV Curing Box PCB?
It measures 213.7 × 144.8 mm and has 2 copper layers, 1.6 mm thick.
What parts does the UV Curing Box use?
151 parts, built around the CH32V003A4M6, AMS1117-5.0, AO3400A and SS54. 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 UV Curing Box KiCad files?
From the koko69420/UV-Curing-Box repository on GitHub, at the commit this page was made from: the board is UV_curing_box.kicad_pcb and its schematic UV_curing_box.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the UV Curing Box design in my own project?
Its repository states no licence, so its author keeps all rights: ask koko69420 before reusing the design.