TOOOL Timer is an eight-station hardware timer built for lockpicking games and competitions. It was originally designed with TOOOL DMV chapters for events using TOOOL red KIK lock fixtures.
The project combines embedded software, custom electronics, physical fabrication, and event-oriented user interaction. Each station monitors a lock's open/closed state and drives its own display so multiple competitors can be timed independently from one controller.
- Supports up to 8 lock stations at once.
- Monitors separate open/closed switch inputs for each lock.
- Drives 8 independent 7-segment displays over I2C.
- Uses two MCP23017 I/O expanders for lock sensors, controls, and indicator lights.
- Provides play/pause, reset, and mode controls with debouncing.
- Tracks each station through startup, active timing, pause, and completion states.
- Records the order in which locks are opened, including ties detected in the same update cycle.
- Includes PCB design files, 3D-printable mechanical parts, wiring/build photos, software, and a bill of materials.
This repository contains the full physical-project stack rather than only the firmware:
| Area | Contents |
|---|---|
| Embedded software | Arduino/C++ timer state machine, button handling, I/O expansion, display control |
| Electronics | PCB design files and system wiring |
| Mechanical | 3D-printable lock and enclosure components |
| Integration | Eight sensor channels, eight displays, shared controls, power/data interconnects |
| Documentation | Build photos, parts lists, and demonstration video |
The software separates the timer state logic from the hardware-facing Arduino sketch. Software/main/TooolTimer.hh implements button debouncing and the multi-station timer state machine, while Software/main/main.ino handles the displays, MCP23017 I/O expanders, and physical controls.
Software/— Arduino/C++ implementation.PCBs/— PCB design and manufacturing files.3dModels/— printable mechanical parts.Graphics/— assembly, wiring, and build photographs.PartsList.csv— bill of materials in CSV form.PartsList.xlsx— bill of materials spreadsheet.ThirdParty/— third-party material used by the project.
Two MCP23017 I/O expanders provide the additional digital I/O needed for the eight lock fixtures and front-panel controls. The Arduino reads the lock and button states, updates the shared timer state machine, and drives eight I2C 7-segment displays.
Each lock uses two switch inputs so the software can distinguish expected open/closed states from an invalid switch combination. The timer maintains a separate LockState for each station and advances the system through initial, starting, countup, paused, and complete modes.
The Arduino sketch currently uses:
WireAdafruit_GFXAdafruit_LEDBackpackAdafruit_MCP23X17
The firmware source is under Software/main.
The repository includes photographs from construction and integration:
A video covering the basic operation of the timer is available here:
This repository documents a working prototype/event system rather than a packaged commercial product. Hardware-specific assumptions, wiring, and the Arduino implementation reflect the original build.
See LICENSE.

