Minimalist Pomodoro Timer

by kosme in Circuits > Arduino

756 Views, 6 Favorites, 0 Comments

Minimalist Pomodoro Timer

pomodoro.jpg
render.png

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.

Materials Required

components.jpg

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)

Preparation

arduino1.png
arduino2.png
arduino3.png
arduino4.png
arduino5.png

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.

About the Code

arduino6.png
table1.png
table2.png

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.

Downloads

Compile and Upload

arduinoISP.png
program.jpg
arduino7.png

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.

The Circuit

tomato.png

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

The Case (optional)

full1.jpeg
case.jpeg
full2.jpeg
open.jpeg
exploded.jpeg

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.