Episode: 4075
Title: HPR4075: Making a Pomodoro Timer
Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr4075/hpr4075.mp3
Transcribed: 2025-10-25 19:17:49

---

This is Hacker Public Radio episode 4,075 for Friday the 15th of March 2024.
Today's show is entitled Making a Pomodoro Timer.
It is hosted by Norrist, and is about 20 minutes long.
It carries a clean flag.
The summary is Norrist uses the Pomodoro method to keep from getting fired.
Hello Hacker's.
I'm going to talk about making a Pomodoro Timer out of a circuit python express.
Talk about what it is and why I made it.
So I get distracted really easily when I'm supposed to be working in that was really
only made worse when a few years ago I started working at home.
That's been one of my biggest challenges with working from home is trying to manage
distractions.
So what will happen is if I'm trying to work on just kind of a single work dictated
task after 20-30 minutes of being sort of focused on one thing, my mind just starts drifting
and I start looking for anything just anything else that I can do or get distracted by.
So in order to keep my productivity up to a standard that is satisfactory for my employer,
I have to look for ways to make myself stay on task and it's kind of forcing myself
through it.
It works but it's not fun and I can stay on task but I don't really do great work.
So I decided that instead of fighting my natural urge to only work for 20 or 30 minutes
to sort of embrace it.
So instead of treating it as a limitation, use that and sort of build a method of working
around that and force myself to take short breaks.
So work for your period and take a short break for a period.
So the method I decided to try is called the Pomodoro method.
I have a link to the Wikipedia article about it but it sort of was a quick summary.
It was developed in the 80s by a developer named Francesco Cerrillo and he used a kitchen
timer to do it which is a really good way, honestly, to do it.
But it's just like I described, you work for an interval typically 25 or so minutes and
then you take short breaks.
Some people use it because it helps them work better and mostly I use it because it
helps them work better but also I can stay on task easier if I know there's a break
coming up.
So it improves my quality of work but also my mind can stay focused if I know in a finite
amount of time I'll let myself do something else.
So when I started kind of digging in and how I wanted to do the Pomodoro technique
and I've tried it a few times before, the hard thing about it is sticking to it.
So there's plenty of apps regardless of what kind of phone you have or desktop apps or
phone apps.
There's a lot of things out there and you can just use any timer or just fine.
But like I said, it's the hard part about it is the discipline it's to use it.
I wanted something on my desk that I could look at and it would actually kind of get my
attention and remind me that I was supposed to be doing this thing.
So I decided to make myself a timer using the circuit playground express.
So my, I don't know if it was my last episode or maybe two episodes ago I talked about using
a Raspberry Pi Pico to type some passwords for me kind of using the Pi Pico as a password
manager for websites that don't let you copy and paste.
And I mentioned that my first attempt at doing that was using this playground express and
I wanted to switch to a Pi because I wanted to do something else with the playground express
and the Pomodoro timer was something else that I wanted to use it for.
So just a quick refresher if you didn't listen to it or if you forgot the playground express
is a microcontroller it's made by the Adafruit company it's kind of a unique circular shape
you know instead of a rectangle or square like a lot of microcontrollers it's a circle
around the circle there's LEDs and then kind of in the middle it's kind of a whole bunch
of input devices it's got a switch and a couple of buttons and it can do temperature sensing
but like I said the main reason I wanted to use it is because it has 10 LEDs in a circle
and they're multicolor LEDs you can program that you can program the LEDs and which ones
are on or off and what color they'll be and it runs circuit to Python which has a ton
of libraries including libraries that make it really easy to use the pixels called neopixels
the neopixels on the circuit playground express. So the other thing I wanted to do while I was
working on this is about once a year or so I'll get a bug in my brain to try test driven
development again and I've done a few times I like doing it it's been official if you're
not in a crazy rush and it does slow if you you know overall if you're doing a giant project
I don't think test driven development will slow you down but if you're doing something you know
that's super quick that you can do in an hour test driven development probably may not be the
right thing to do if you're if you're you know totally focused on it's sort of a quick primer on
what test driven development is it's before you write any actual code to do you know what you're
want to do you write a test and you so you write a test you run the test it should fail
and then you write the simplest code that will get that test to pass and then once you're certain
that the test is passing and you can go back and refactor the code to make it better and then
while you're doing it while you're making it better you can keep running the test and make sure
the test continue to pass then when you when you get that done you you move on so you ride a
little chunk of code well you ride a test then you ride a little chunk of code that satisfies the
test you can fix the code up once once you got it done then you move on to the next piece so a few
advantages reasons that I like to do test driven development is it it kind of forces you to
write your code in small functions and that makes that always makes it easier when you come back
to the projects later and there's either something you need to change or you forgot how it works
if you can look at anytime you can look at small discrete sections of code at least for me I'll say
you but at least for me whenever I can look at small sections it's easier for me to put together
what the actual code what the code is doing it's harder to get lost in code that's in a small
separate chunks one little piece does one thing another advantage is that if you decide that you've
got a small section that needs to be rewritten or there's something you want to do or a buggy
fix it's easier to rewrite if you if you when it's chunked up your code is divided up into
discrete sections you won't if there's something you've got to fix you've only got to fix that
one little section so it makes it easier to test and it gives you confidence whenever you
are making changes to the code you know the whole time you're making changes you're running
your test suite and if you've got you know kind of a what's in your head as a major rewrite to do
or let's say you you know there's a function that you totally want to change how that function works
you know that if you wrote good tests it doesn't matter if you completely start from scratch and
start over and write this bit of code totally differently as long as the test pass you know the
application overall will work okay so I said I mentioned that it's going to be writing the code
for the pulmonary rotimer and circuit python in the way circuit python works is that you put a file
when you plug the board in the single board computer in it pops up like it's a usb thumb
drive and then you put a file on there on the circuit or on the micro controller called code
code.py and whenever the micro controller boots that's what it executes it looks for a file called
code.py and runs that file so a lot of the code that you write for a micro controller will only run
on that micro controller and what what I mean by that is if you've got code to turn an LED on
or LED off or check a temperature sensor or something like that that code is not going to work
on your laptop because your laptop doesn't have those hardware devices so what I wanted to do
when I was writing this is I wanted to put the smallest amount of code possible in code.py
and then write kind of a separate library that I could test on my laptop so I took
as much code as I could and put it in a separate file called palmadoro.py and then when I was writing
the code and testing the code I could do all that work on a laptop just kind of separate. This
way I didn't have to do I could develop without the sbc I could write some code test the code
without having to have the sbc right there. So if you look at code.py some stuff that we'll have
in there and links in the show notes by the way all this stuff is checked in to get out but I'll
definitely have this stuff in the show notes but in code.py like I said it's got the functions that
require the hardware to be there to run so the stuff in code.py I didn't necessarily write
test for but you know just some things that are actually in there's one there's a bunch of there's
some variables and constants to find at the top of the file including the break break minutes
and work minutes so remember the palmadoro technique you work for a period and take a break for
a period so you can set you can set those values I mentioned in the Wikipedia article it says 25
minutes and five minutes I've actually found that after I'm working for about 20 minutes I start
glancing around and trying to figure out how much time is left so I figured I may as well just
I just set my timer to 20 minutes because after after I'm working for 20 minutes if I'm
or if my brain is kind of clicking around looking for a break I may as well it's best just
stop then so I set my work period for 20 minutes break period for five minutes
and then also in the code.py this is where the code that's tracking the time
you know how long has it been since you started a work period or a break period
and then the way it knows how many LEDs to light up is it'll just take the how many minutes has
it has it been and then divide that by the number of LEDs and then that will give you how many
LEDs should be turned on then I'll talk in a second about how the timer actually works
so I was pretty impressed with the circuit python and the single board computers that they could
even keep up with time now they don't do time like our computer does you know they don't have a
battery in a clock or ntp or anything like that but they can they can count you know they do know
how much time has passed so when I coding counting time on the microcontrollers is a little bit
different than but it works and it's it's not too hard and you can see examples of how I do it
but a little bit about how the actual timer works and how how I use it
so like I said it's got circuit python express it's got 10 LEDs and two buttons that's primarily
what I'm using while I'm working or while it's counting down a work period I'll use I'll turn
all their LEDs white and then there'll be a green LED for every sort of work segment that I've
been doing so you know if I if I've got it set for 20 minutes and you know there's 10 LEDs
then every two minutes another LED will come on so it'll you know one you know be all white
with one green and then two green and three greens and if it's counting down correctly by the time it
gets to all the greens lit that's that's the end of your work period and then for bright time I do
something similar except I use blue instead of green so it'll you know I'm gonna start a break
we'll just you know turn all the LEDs white and then as the work as the break period progresses
it'll turn more and more LEDs blue like I said there's two buttons on the circuit playground express
so I've got one button you press and it starts a work period and the other button you press and it
will start a break period and when you when the periods are finished when the work period is finished
and the break period is finished I wanted it to get my attention in case I'm distracted
so it will it will blink a few times to let me know that a period has just finished
and then while it's idle instead of if it's not counting down actively counting down a work period
or a break period what I'll do is I'll turn all the LEDs off and the then the except for
the LED that's closest to the button to start work that will be lit green to remind me that
you know if I want to start work I'll press that button and the same for the button to start a
break period it will be the LED that's closest to that button will be lit blue and then anytime while
it's running if you're in the middle of a break period and you want to start work you can just
press the button it'll detect that and kind of abandon the break period and start a work period
so I'll have a few links at the bottom of the show notes I'll link to my get lab page where I'm
got this code written only to the circuit playground or circuit python page there was another
episode recently about circuit python and my answering computer lab temperatures I thought that
was very interesting if this is something you are even remotely interested in single board
computers and or python I'd encourage you to take a look I said it in the last episode I did
about passwords these raspberry poppecos are a whopping $4 so it doesn't take a lot of investment to
get started and you don't if you just want a blinking LED that's all you need if you want to you know
some microcontroller projects you might have to get headers and breadboards and stuff like that
but you can definitely get started with circuit python and raspberry poppeco so I think that's it
until I've got to talk about I hope you guys are excited about circuit python and microcontrollers
and I look forward to some feedback on the episode and I will see you guys next time
you have been listening to hacker public radio at hacker public radio does work today show was
contributed by a hbrlisnet like yourself if you ever thought of recording podcast and click on
our contribute link to find out how easy it leads hosting for hbr has been kindly provided by
monstros.com the internet archive and our sims.net unless otherwise stated today's show is released
under a creative commons attribution 4.0 international license
