

Kitsujikan
A little Pomodoro timer (my first hardware project!!!)
- Size
- 65 × 90 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 23
- Nets
- 22
- Pads
- 88
- Tracks, vias
- 94, 4
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 8 Oct 2026
- Updated
- 29 Oct 2026
Overview
Kitsujikan is an open-source printed circuit board by techmoocher, from the techmoocher/kitsujikan repository on GitHub, published under the MIT licence. It is a 2-layer board of 65 × 90 mm with 23 parts on 22 nets, routed with 94 tracks and 4 vias.
Its parts include 6 switches, 5 resistors, 3 connectors, 1 capacitor and 1 IC. It belongs with the ESP32 and RISC-V boards of this library.
README
README.mdKitsujikan
A rechargeable, pocket-sized Pomodoro timer with an OLED display and colour-coded buttons, designed for Hack Club's Half-Life 10-week hardware challenge.
| Front | Back |
|---|---|
![]() | ![]() |
Features
- One-press focus sessions: 30, 60 or 90 minutes, one button each.
- Automatic breaks: when a session ends, the buzzer sounds and the timer offers a 5-minute break. Press green to accept or red to skip. After the break, it offers to repeat the last session length.
- Clear display: a 0.96" OLED shows the time left as
HH:MM:SS. Hours are hidden when zero, and minutes and seconds always show two digits. - Pause: press red during a session.
- Battery powered: runs from a LiPo battery and charges over USB-C, with an on/off switch and battery-level sensing.
- Low power: sleeps when idle, and the 30/60/90 buttons wake it from deep sleep.
Status
- Schematic
- PCB layout and routing (DRC clean)
- Gerber and drill files
- Bill of materials (BOM)
- Order the PCB and parts
- Firmware: first version (untested on hardware)
- Assembly and testing
- Enclosure
Hardware
| Power | 3.7 V LiPo (JST-PH), slide switch, 2 × 200 kΩ battery-sense divider | | PCB | 2 layers, 65 × 90 mm, all through-hole parts |
Pin map
| XIAO pin | GPIO | Connected to | Why this pin |
|---|---|---|---|
| D0 | 2 | 30-min button (+10 kΩ pull-up) | Can wake from deep sleep; it's a strapping pin, so the pull-up holds it high at boot |
| D1 | 3 | 60-min button | Can wake from deep sleep |
| D2 / A2 | 4 | Battery voltage (divider midpoint) | Calibrated ADC1 channel |
| D3 | 5 | 90-min button | Can wake from deep sleep; its ADC2 channel is unreliable anyway |
| D4 / D5 | 6 / 7 | I2C SDA / SCL (OLED) | Default I2C pins |
| D6 | 21 | Red No/Pause button | Not a strapping pin |
| D7 | 20 | Buzzer transistor | Input at boot, so the buzzer stays quiet |
| D10 | 10 | Green OK button | General purpose |
| D8, D9 | 8, 9 | Unused | Strapping pins (D9 is the BOOT button) |
Directory structure
PCB/ KiCad 10 project (schematic + board)
PCB/libs/ Symbol, footprint and 3D libraries used by the project
PCB/production/ Gerber and drill files for manufacturing
renders/ 3D renders of the board
Firmware/ Arduino firmware for the XIAO ESP32-C3
kitsujikan_BOM.csv Bill of materials with sources and estimated pricesBill of materials
The full list with links is in kitsujikan_BOM.csv. Summary:
| Qty | Part | Source |
|---|---|---|
| 1 | Seeed Studio XIAO ESP32-C3 | Seeed Studio |
| 1 | 0.96" SSD1306 I2C OLED (pins: GND, VCC, SCL, SDA) | Amazon |
| 5 | 12×12 mm tactile switches with coloured caps | Amazon |
| 1 | C&K OS102011MS2QN1 slide switch | LCSC / DigiKey |
| 1 | JST-PH 2-pin side-entry socket (S2B-PH-K-S) | LCSC / DigiKey |
| 1 | 3.7 V ~500 mAh LiPo with protection circuit, JST-PH plug | Amazon |
| 1 | Passive buzzer, 12 mm | Amazon |
| 1 | 2N3904 transistor, 1N4148 diode | Amazon |
| 5 | Resistors: 2 × 200 kΩ, 2 × 10 kΩ, 1 × 1 kΩ | Amazon |
| 1 | 100 nF ceramic capacitor | Amazon |
| — | Female pin headers (1×7 ×2, 1×4 ×1), thin wire | Amazon |
| 5 | PCBs | JLCPCB |
Prices in the CSV are rough estimates. Many Amazon items come in multi-packs, so the first build costs more than the parts on one board.
Ordering the PCB
- Zip the contents of
PCB/production/. - Upload the zip at jlcpcb.com.
- The defaults work: 2 layers, 1.6 mm, HASL. Pick any solder mask colour.
Notes on assembly
- Mount the XIAO on female headers, not flat. The battery connects to pads on its underside (BAT+ / BAT−). Solder two short wires to those pads, thread them through the J2 holes, and solder them on the back.
- Check the OLED pin order before soldering its socket. This board expects GND, VCC, SCL, SDA.
- Check the LiPo plug polarity before plugging it in. J1 pin 1 is +. Battery plug colours aren't standardised.
- Charging only works with the power switch ON, because the switch disconnects the battery.
- Keep the battery away from the sharp solder joints on the back. Use foam tape, or standoffs and a back plate.
- Solder the low parts first (resistors, diode), then the transistor, buzzer, switches and headers.
Firmware
Arduino (C++) for the ESP32-C3, in Firmware/. It covers the timer state machine, debounced buttons (tap / hold), buzzer melodies, the OLED screens, battery percentage, and deep sleep with wake-on-button. Build steps and controls are in Firmware/README.md. The timer logic has laptop unit tests in Firmware/test/.
Acknowledgements
- Hack Club and the Half-Life challenge
- Starbie, the Half-Life Week 1 example project, and its care-package libraries
- Seeed Studio for the XIAO KiCad symbol library
License
This project is released under the MIT License. Third-party libraries in PCB/libs/ remain under their original authors' licenses.
Parts
23| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | MountingHole | MountingHole:MountingHole_3.2mm_M3 | H1, H2, H3, H4 |
| 2 | 10k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R3, R5 |
| 2 | 200k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R1, R2 |
| 1 | 100nF | Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mm | C1 |
| 1 | 1N4148 | Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal | D1 |
| 1 | 1k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R4 |
| 1 | 2N3904 | Package_TO_SOT_THT:TO-92_Inline | Q1 |
| 1 | 30min | Button_Switch_THT:SW_PUSH-12mm | SW2 |
| 1 | 60min | Button_Switch_THT:SW_PUSH-12mm | SW3 |
| 1 | 90min | Button_Switch_THT:SW_PUSH-12mm | SW4 |
| 1 | Battery | Connector_JST:JST_PH_S2B-PH-K_1x02_P2.00mm_Horizontal | J1 |
| 1 | Buzzer_passive | Buzzer_Beeper:Buzzer_12x9.5RM7.6 | BZ1 |
| 1 | NO_RED | Button_Switch_THT:SW_PUSH-12mm | SW6 |
| 1 | OK_GREEN | Button_Switch_THT:SW_PUSH-12mm | SW5 |
| 1 | OLED_SSD1306 | Imported Parts:Display_128x64_096_I2C | J3 |
| 1 | Power | Button_Switch_THT:SW_Slide_SPDT_Straight_CK_OS102011MS2Q | SW1 |
| 1 | XIAO-ESP32-C3-SMD | Imported Parts:XIAO-ESP32-C6-DIP | U1 |
| 1 | XIAO_BAT | Connector_Wire:SolderWire-0.15sqmm_1x02_P4mm_D0.5mm_OD1.5mm | J2 |
Questions
How big is the Kitsujikan PCB?
It measures 65 × 90 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Kitsujikan use?
23 parts. 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 Kitsujikan KiCad files?
From the techmoocher/kitsujikan repository on GitHub, at the commit this page was made from: the board is PCB/kitsujikan.kicad_pcb and its schematic PCB/kitsujikan.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Kitsujikan 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 layers65 × 56 mm

- 2 layers14 × 100 mm

Yunomi
google/mozc-devices
Circuit diagrams and firmware source code for Gboard DIY keyboards
23 parts3kApache-2.0 - 2 layers50.8 × 52.2 mm

- 2 layers138.8 × 89.8 mm

- 2 layers32.9 × 53.3 mm

- 2 layers35.5 × 50 mm

- 2 layers19 × 19 mm

- 2 layers88.5 × 28 mm

ExpBreakout
Duet3D/Duet-2-Hardware
The KiCAD source for the Duet 3d printer controller see www.duet3d.com
23 parts258

