Introduction: Minimalist Pomodoro Timer

About: Soldering and making circuits and devices since I can remember.

The Pomodoro Technique is a time management method consisting of several work intervals with brief periods of rest time between them, a longer rest period, and the cycle gets repeated. Having such a simple logic behind it, I thought this deserved an equally simple device to implement it. The main project picture is misleading as it involves an old PCB that I built for something else but had a compatible layout which I repurposed for prototyping this.

Step 1: Materials Required

For ease of assembly, I used the through-hole version of the components.

Electronic components

  • Attiny25/45/85
  • CR2032 coin battery holder and battery
  • PN2222a transistor or equivalent
  • 14 x 7.5 mm buzzer
  • 10 ohms resistor
  • 90-degree tactile push button (not on the picture)
  • 90-degree slider switch (not on the picture)

Software tools

  • Arduino IDE

Tools

  • Arduino UNO or equivalent to use as a programmer
  • Jumper cables
  • Soldering iron
  • A 3D printer (optional)

Step 2: Preparation

You must configure two things in the Arduino IDE for compiling the project.

First, you must install the support for the ATtiny25/45/85 boards. It is installed by opening Preferences in the Arduino IDE and going to the Additional Boards Manager URL's section. The URL for the ATtiny support package is:

https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

After you restart the IDE, the ATtiny boards will appear as selectable.

The second thing that you must do is to install the Adafruit_SleepyDog library. Go to Sketch, Include Library, Manage Libraries to search for it. Make sure you install version 1.4.0 or newer as previous versions do not support the Attiny family.

Now you are ready to compile the attached code.

Step 3: About the Code

The code is configured for a routine of four intervals of 25 minutes working, with three rest periods of 5 minutes between them. The fourth working period is followed by a longer rest interval of 20 minutes. This is configured between lines 13 to 17 of the code.

The device notifies about the start of the intervals by beeping through a buzzer. The first table explains the meaning of the different beeping sequences.

These sequences are described between lines 120 and 168.

If you think you have missed the alarm, there is also a button whose purpose is to beep to describe what you are supposed to be doing. The second table describes the beeps.

On line number 5 there is the option to use the Tone function included on the Arduino core for generating tones instead of beeps to notify the intervals. As the comment explains, this is disabled because of the memory limitations of the ATtiny25 which is the microcontroller used for the development. Uncommenting line 5 will change to the tones functionality. An example tone sequence has already been included in the code on line 26.

Step 4: Compile and Upload

Once you are satisfied with the code, it is time to compile and upload it. I will show how to do this using an Arduino UNO but feel free to use other methods.

The Arduino must be programmed to act as a programmer. This is done by using the sketch in File, Examples, ArduinoISP, ArduinoISP.

After the UNO has been programmed, it is the ATtiny's turn. First, wire the Arduino UNO and ATtiny chip together according to the provided diagram. After that, return to the sketch I provided in the previous step and configure the ATtiny board as a target. It is important to select one of the internal clocks as the circuit does not include an external crystal. If you just installed the support for ATtiny boards, the 1Mhz crystal will be selected by default along with the ATtiny25. Change it to replicate your target configuration. After selecting the chip and crystal, the fuses on the chip must be programmed. This is accomplished by choosing the Burn Bootloader option in the Tools menu.

After then the programming of the fuses succeeds, you can upload the sketch.

Step 5: The Circuit

The circuit is pretty simple, a buzzer connected through a transistor to pin 5 of the microcontroller and a normally open push button connected between the ground plane and pin 6 of the microcontroller. As of the publishing of this instructable, the server is not allowing me to upload the zip with the Gerber files and the PCB design so I am instead leaving a link to download it. Also, I have attached the schematic as a pdf.

You can download it here

Step 6: The Case (optional)

If you use my PCB design and want an enclosure for it, I have also designed a case you can 3D print. It is split into 3 pieces to make it easier to print and should fit the circuit just fine. Here I have included the STL files. Feel free to contact me if you require further clarification or if you require additional files like the original file in FreeCad.

Microcontroller Contest

Participated in the
Microcontroller Contest