A minimalist, single-button Pomodoro timer for focused work sessions. Originally created in 2013, now updated for modern low-power microcontrollers with deep sleep support.
I built the original Pomodoro Timer in August 2013 as a way to have a dedicated, distraction-free focus timer on my desk. Unlike phone apps or computer timers, a physical device doesn't tempt you with notifications or other apps—it just does one thing well.
The design philosophy is intentionally minimalist: one button does everything. Press it to wake up, press again to cycle through duration options, and it automatically starts counting down. When you're in the zone, the big display shows remaining minutes at a glance without pulling you out of focus.
In 2026, I revisited the project with modern microcontrollers that support deep sleep modes, making it practical to run on battery power for months. The new versions remember your preferred timer duration even after going to sleep.
Read more about the original project: Arduino Pomodoro Timer (2013)
The Pomodoro Technique is a time management method that uses timed work intervals (traditionally 25 minutes) followed by short breaks. This timer helps you stay focused by counting down your work session and alerting you when it's time for a break.
- Selectable timer durations: 5, 15, 25, or 45 minutes
- Single-button interface: Simple and distraction-free
- Audio feedback: Tones for button presses and session completion
- Deep sleep mode (2026 versions): Ultra-low power consumption when idle, for running on battery
- Persistent settings (2026 versions): Remembers your last timer choice
This repository contains three versions of the timer, each targeting different hardware:
File: pomodorotimer.ino
The classic version using a 7-segment LED display.
| Component | Pin |
|---|---|
| Button | D2 |
| Piezo Buzzer | D7 |
| LED Display Latch | D8 |
| LED Display Clock | D3 |
| LED Display Data | D9 |
Parts needed:
- Arduino Uno
- SPI LED Module (7-segment display)
- Push button
- Piezo buzzer
File: pomodoro_2026_deepsleep_esp32.ino
Modern version with OLED display and deep sleep for battery-powered operation.
| Component | Pin |
|---|---|
| Button | GPIO 25 |
| Piezo Buzzer | GPIO 27 |
| I2C SDA | GPIO 33 |
| I2C SCL | GPIO 32 |
Parts needed:
- ESP32 development board
- SSD1306 OLED display (128x64, I2C)
- Push button
- Piezo buzzer
- LiPo battery (optional, for portable use)
Power features:
- Deep sleep current: ~10µA
- Settings stored in RTC memory (survives deep sleep)
- Wake-on-button using EXT0 wakeup
File: pomodoro_2026_deepsleep_nRF52840.ino
Ultra-compact version using the Seeed XIAO nRF52840 for minimal footprint.
| Component | Pin |
|---|---|
| Button | D1 |
| Piezo Buzzer | D2 |
| I2C SDA | D4 (fixed) |
| I2C SCL | D5 (fixed) |
Parts needed:
- Seeed XIAO nRF52840 (or nRF52840 Sense)
- SSD1306 OLED display (128x64, I2C)
- Push button
- Piezo buzzer
- LiPo battery (optional)
Power features:
- System OFF mode current: ~1µA
- Settings stored in GPREGRET register (survives sleep/reset)
- Wake-on-button using GPIO sense
- Power on: The timer displays an intro screen and plays a startup melody, then goes to sleep
- Wake/Start: Press the button to wake up and see the current timer selection
- Select duration: Press the button repeatedly (within 2 seconds) to cycle through: 5 → 15 → 25 → 45 minutes
- Timer starts: After 2 seconds with no button press, the countdown begins
- During countdown: The display shows remaining minutes. Press the button to cancel and select a new duration
- Session complete: A melody plays, "KLAAR!" (Done!) appears, then the timer goes to sleep
For the 2026 OLED versions, install these libraries via the Arduino Library Manager:
Adafruit GFX LibraryAdafruit SSD1306
For ESP32, you'll also need the ESP32 board package installed in Arduino IDE.
For nRF52840, install the Seeed nRF52 Boards package.
┌─────────────────┐
│ OLED Display │
│ (SSD1306) │
│ ┌───────────┐ │ ┌─────────────────┐
│ │ │ │ │ Microcontroller │
│ │ 128x64 │ │ │ │
│ │ │ │ │ SDA ──────────────── SDA
│ └───────────┘ │ │ SCL ──────────────── SCL
│ VCC GND │ │ 3V3 ──────────────── VCC
│ │ │ │ │ GND ──────────────── GND
└──────┼───┼──────┘ │ │
│ │ │ D1/GPIO25 ─────┬──── Button ──── GND
│ │ │ │
│ │ │ D2/GPIO27 ─────┬──── Buzzer ──── GND
│ │ │ │
└───┼─────────────│─ 3V3 │
└─────────────│─ GND │
└─────────────────┘
| Back | Front | Slice |
|---|---|---|
![]() |
![]() |
![]() |
The enclosure/ folder contains 3D printable files for the case:
enclosure/
├── *.stl # Ready-to-print files
└── source/ # Original CAD files
You can find the enclosure design on MakerWorld.






