Designing a less frustrating kitchen timer
A topic that has been bothering me for quite a while is kitchen timers. I've never found one that does quite what I want it to do. Of course, "what I want it to do" isn't easy to describe. There's just always something I don't like about a kitchen timer. The screen of my latest timer recently broke when dropped, so I decided to make this my next project.
Defining the problem
First, I needed to get my thoughts down on paper:
I identified 4 problem areas - setting the time, the alarm, placement of the timer and cleaning.
The problems I identified (with many but not all timers):
- Hour + minute often isn't granular enough at short timings - I often want to time X minutes and 30 seconds
- No way to decrease a value without going all the way up to 59 and back up from 0
- Changing the value is usually too slow - either you have to press+hold and wait for the number to increment, or mash the button. Neither are really satisfactory solutions for me.
- Let's face it, alarms are annoying. That's kind of the point - it gets your attention. When you've already acknowledged the beeping but you want to finish your current task before dealing with it, it's extra annoying! It would be nice if it could read your mind to see if it's been heard!
- I don't know how, but the timer is always too far away, wherever it was last left.
- I'm not a fan of leaving the timer on the counter - counter space is precious. I'd like to attach it to appliances or walls.
- My current timer has small cracks that will collect gunk nicely, and there's no way to clean it other than a light wipe - it's not waterproof. I'm sure there are timers that are better in this respect.
Using my phone for the timer doesn't really solve a lot of the issues. Depending on the app, it's easier to set the time, but the remaining issues still exist to different extents. The phone being in my pocket doesn't make it easy to stop the alarm quickly, especially with dirty hands, and the dirty hands mean I have to clean my phone!
It was time to sketch around each of the problem areas to come up with a few ideas for solutions. If I was making an actual product here I'd probably spend some more time on it, but for now I just want something that'll be work nicely for myself.
Here's a summary of my thoughts:
Setting: Firstly, I'd like to have an up and down button for each quantity - hours, minutes and seconds. An idea I've been mulling over is having a few preset buttons. Each press of the button would add that amount of time to the timer. You could set them to add a few common values to avoid button mashing. I can choose some sensible defaults but they should be adjustable by the user. I like the idea of a dial but I think it'd be difficult to keep clean. Another thing I'd like to try out is multiple timers. Occasionally a second one would be useful - it's rare for me to need more than that.
Alarm: This seems like a fairly easy fix to me. Unless the timer knows whether you're nearby, all it can do is be less annoying and hope you've heard it. There are times when you're out of the room and might miss it, so it should still have "reminder beeps". I think a good place to start would be a few beeps when it goes off, then a silent period, then more beeps if it's not reset. The exact timings can be adjusted as I go, to find something that backs off enough to not be annoying but still alerts you.
Placement: I like the idea of having magnets on the back of the timer and various changeable backs for different use cases. One could attach to a wall, another could just be a stand, another could clip onto the stove hood, etc.
Cleaning: A clear plastic front seems like a good idea to make it easily wipe-able. It'll have to be tested to see how much it affects the tactility. If I can't easily feel the press of a button it's not a very nice solution. Another option would be to have a front cover that's easily removable for cleaning in water, without the electronics. I quite like that.
I think there are two groups of controls that a timer needs. The first is to adjust the time, the second is to start, stop and reset the timer. For the latter, the usual way of having a start/stop button and a reset button is fine with me. The bit I have a problem with is the time setting.
Usually there are only two buttons - either "increase" and "decrease" or "hour" and "minute". For the former it's slow to add a whole hour, and for the latter it's slow to reduce the time. For those reasons it'd be nice to have both "increase" and "decrease" buttons for both hours and minutes.
Sometimes you want more resolution than just minutes - maybe you want a 2m 30s timer because you're very particular about your tea. It would be good to have seconds included on the timer. That's another pair of buttons, too, for increasing and decreasing.
Then we get onto the "preset" buttons. I think it makes sense for these to work by adding the set amount of time each time you press them. That means there's no ability to remove the time again if you press one too many times, but I'm hoping that's fairly rare. Only testing will tell. I'm not sure how many presets would be useful, and how many (if not all) should be user-settable. I can see a use for having a standard set with two customisable ones (e.g. "30s", "5m", "10m", "A", "B" where "A" and "B" are user-customisable). To begin with I think they should all be user settable.
It ends up being a lot of buttons! I think there's some simplification to be done here, but I'm going to try out the control scheme first. By using a prototype I can see what works and what doesn't.
The next step was to prototype the user interface and actually try out the timer in the kitchen! I didn't have enough buttons at the time so I rooted through my electronics box and found a Nextion display. It was originally bought years ago for my projects at university but I never ended up using it.
I eventually got it working and created a basic approximation of the timer's UI:
It's not pretty, but it has all the buttons I need for the single-timer version. The microcontroller built in can actually do almost all of what the timer needs (except for beeping a buzzer with a GPIO pin), but it was a pain to program in Nextion's weird language. I decided to use the Nextion as a simple display, and send the button presses to the Arduino over serial. The Arduino could in turn update the numbers on the display.
It was time for the first "kitchen test". I used the timer while cooking a soup that had a few different periods that needed timing. At the time of the test, this was the state of the project code.
I found a few things in this first test.
- Setting the time on this was much less awkward than the old timer, and I did use the presets.
- I did find that it was hard to remember what each preset button does. It would be nice if the ABCD buttons can be labelled by the user. That's possible to do on the display but I was intending to make them physical buttons. It's something to consider for future ideation!
- I had forgotten to make the alarm not annoying! It did the usual constant cycle of 4 beeps with a space between the cycles. What I had meant to do was to do 2-3 cycles and then have a longer break. Something to improve for the next prototype.
- I also found that in my echoey kitchen the beeps merged together. They needed to be more staccato.
It didn't take too long to fix the alarm issues I found in the test. I changed the beeps from being 100ms on, 50ms off to 50ms on, 100ms off. That seemed to make enough of a difference, at least for now. The buzzer I'm using takes some time to get started, so a different one might allow for shorter beeps that are just as loud. I also set it up to do 2 alarm cycles of 4 beeps each, and then wait 20 seconds before doing it again. Hopefully I find that less irritating!