Close
0%
0%

Pomodoro Flasher

Time management gadget based on Pomodoro Technique

Similar projects worth following
The Pomodoro Technique is a time management method developed by Francesco Cirillo in the late 1980s. It uses a kitchen timer to break work into intervals, typically 25 minutes in length, separated by short breaks (wikipedia)

This project implements a Pomodoro timer with visual visual feedback of the current interval. It was designed as an entry to the “One Hertz Challenge”.

The project implements a Pomodoro Timer with three 25 minute work intervals followed by with 5 minute pause and a fourth work interval followed by a 30 minute rest time, and repeats this cycle until it is turned off.

The beginning of each time interval is marked by a certain number of beeps, and every interval is color coded for additional feedback.

States and parameters


OPERATION

The device provides one button to turn the device on/off and to adjust the brightness. Refer to the state diagram below.

When in OFF state, a short press will start the timing and the device will flash once per second. 

When the device is counting time, a long press will turn it OFF and a short press will skip to the beginning of the next interval.

Every working interval is marked by a different color and is marked by 3 beeps. 

The 5 minute brakes pauses are red and it is marked by 4 beeps.

The rest interval is blue and it is marked by 5 beeps.

From OFF state, a long press will enter the brightness adjust mode. In this mode, a short press will cycle through 5 different levels. A long press will return the device to OFF state. 

HARDWARE

The circuit is built around an Arduino Nano, a WS2812 neopixel LED, a buzzer and a push button.

Brightness control

To be implemented (LDR or potentiometer or fixed steps)

SOFTWARE

The software is implemented as a single loop that executes a series of tasks then wait for the next cycle. The heartbeat is provided by AVR Timer 1 that is configured to generate one interrupt at every 10ms. The interrupt service routine sets a flag that is read (and then reset) by the main loop.

The behavior of the circuit at every interval (time, color and number of beeps) is read from a series of tables at the beginning of each interval.

Button Handling

The button task return a single event for either a short press (pulse) or a long press. Every time the button is held down a counter is incremented. A long press is returned at the sample that the counting is equal to the long press threshold (it happens only once). A short press is detected at the sample when the button is released. If the is higher than a noise threshold and less than the long press threshold, a short press is returned.

Sound

Sound is generated using the tone() function of Arduino. The pin where the buzzed is connected was chosen so the beep is generated by PWM (using timer 2) and requires no CPU to generate it.

The beep task turns on and off the tone generation according to the number of beeps it has to generate. The duration and the interval between the beeps are hardcoded

Sinewave Flashing

At every 100 ticks the LED brightness values are increased, then decreased following a sinusoidal pattern equivalent of the interval from -pi/2 to +3pi/2, resulting in a gradual flashing at exact 1Hz.

The brightness values are read from a table that is calculated by a function that runs at the beginning of the execution. That was done to allow dynamically adjustment of brightness. The values from -1 to + 1 interval are converted to a range between 0 and the maximum brightness (up to 255).

Sinewave

Pomodoro_Flasher.ino

Source code

ino - 8.20 kB - 07/24/2025 at 00:16

Download

  • 1 × Arduino Nano
  • 1 × WS2812 neopixel
  • 1 × Buzzer (passive)
  • 1 × 10uf / 25V electrolytic capacitor
  • 1 × tactile switch

  • Assembling

    danjovic08/10/2025 at 02:50 0 comments

    The circuit was assembled on the plywood case and tested. The bottom will receive a felt sheet to protect the circuit and soften the contact with the surface of the table where I will leave the pomodoro timer. I will do it later because my glue gun broke.

  • Plywood Case

    danjovic08/10/2025 at 02:43 0 comments

    I have built a plywood case for the project. The cuts were manually routed. The case was sanded and covered with carnauba wax.

  • Save to EEprom, Case

    danjovic07/25/2025 at 11:45 0 comments

    Brightness level is now saved to EPROM. Also cleaned up the logic.

    Planning to make a case using plywood and the dome of a LED lignt bulb

  • Brightness setup

    danjovic07/25/2025 at 04:45 0 comments

    Added a brightness setup mode. When in OFF state, a long press will enter the brightness setup mode, then every short press will increase the brightness levels up to overflow back to the minimum.  

    After some tests the increment was set so there are 5 different levels of brightness.

  • Short video of the prototype

    danjovic07/24/2025 at 00:21 0 comments

View all 5 project logs

Enjoy this project?

Share

Discussions

danjovic wrote 07/24/2025 at 02:22 point

The Domoporo is a magnificent idea! Occasionally my daytime is just like that, specially those full of never-ending meetings. 

  Are you sure? yes | no

Ken Yap wrote 07/24/2025 at 00:21 point

I have an idea to develop a Domoporo technique, 5 minutes work followed by 25 minutes rest, but I haven't made much headway in the time I have spent. Also I'm running out of beer and chips. 🤪 Unfortunately a search for the term shows that someone on Github has already taken it for their Pomodoro clone project.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates