an Attiny85 Twist-to-Set Kitchen Timer




I like the old fashioned twist-to-set kitchen timers. It's so user friendly, but are not very helpful when it calls to time like 30 seconds for brewing some tea or coffer. On the other hand, I really don't feel like to press some buttons a number of times to set a digital kitchen timer. As a result, I often end up not using my digital timer and get very over brewed coffee and tea.

Anyway, I didn't find product of this kind in stores in Taiwan, so I started to design one my own. (Although I later found some twist-to-set kitchen timers on ebay.)

Since I don't quite favor coin batteries, my kitchen timer uses rechargeable AAA batteries instead. Although it leaves my less space to fit in all parts.

The beeping sound is not so loud, which works for me (would not annoy anyone nearby), but I have no clue if there is an easy way to increase the output of the buzzer. Anyway, feel free to improve this design if you can.

Step 1: Print All Mechanical Parts

All 3D files and the sketch are uploaded in

For the top cover, you need to print either Top.stl or Top-m.stl. Top-m is with extra markings as shown in the picture above. The markings gives a rough idea the position of 10sec,20sec...1min and 10, 20, 30 min. I separated the pushbutton.stl from the top.stl so that it will be easier to print. Some acetone or glue will be needed to attach the pushbutton.stl on.

Step 2: Collecting Electronic Parts

You'll need:

  • 4-pin female connectors with wires x 3 (optional)
  • Battery contacts x 1set (AAAx2) --- You can salvage this from broken toys or use paper clips instead
  • 5 mm Optical Switches --- I salvage these from an old inkjet printer as picture shown, but any with same dimensions should do the trick. Say, RPI-579N1E/GP1S53VJ000F/EE-SX1081.
  • 9mm diameter Buzzer
  • TM1637 LED Display Module
  • Printed Circuit Tactical Switch 6*6*5 mm SPST --- 6*6*4.5 will also do the trick since we'll hold it in place with a glue gun
  • Attiny85-20PU x 1
  • 0.1u ceramic capacitor x 1
  • 100 ohm resister x 1
  • 10k ohm resister x 3
  • 220 ohm resister x 1

  • 2N3904 x 2
  • screw x 3 --- the screws I have are 2.5mm in diameter, 7.5mm in length, with a 2mm thick, 5mm diameter hat. Screws of similar sizes will do.

Step 3: The Optional 4-Pin Female Connectors With Wires

These can be very handy connecting Attiny85 and the LED module.

Step 4: Put Components in Places Before Connecting Wires

There's little space inside this kitchen timer. Better use more flexible wires and measure the length needed before soldering. Wires connecting the top parts and bottoms parts should be a little longer for the ease of final assembly. The wires will be held in place with a glue gun later. Some insulating tape or the glue from the glue gun can be used to insulate some exposed wire ends.

Step 5: Build the Circuit

Please connect all electronic parts according to the circuit schematic. The result could look like a mess as shown in the above picture.

Step 6: Upload Sketch and Set the Fuse

This part is a little bit tricky. Since Attiny85 does not have enough I/O, we'll have to use RESET pin as well. Therefore, we will have to enable the "Disable RESET" fuse after the sketch is uploaded before use. Please upload the sketch with the Attiny85, 1 MHz (internal) profile. The tone() function seems to be problematic with 8 MHz profile.

For the fuse work, I followed the instructions in below page:

In the fuse calculator, for below 2 options:

Check Reset Disabled (Enable PB5 as i/o pin); [RSTDISBL=0]
Uncheck Divide clock by 8 internally; [CKDIV8=0]

Now set the fuse with Avrdude, and it's almost done.

Step 7: Final Assembly

Please refer to the picture in Step 1.

  1. Assemble the bottom parts first. Put the battery contacts and optical switches in place. Fix some loose wires with your glue gun.
  2. Put the encoder disk and outer rim together. (The side with 6 little bumps goes into the outer rim)
  3. Fit the rim assembly into the bottom assembly. This may require to tilt the optical switches a little bit.
  4. You can test the unit now if you like.
  5. Assemble the top parts, fix wires with some glue, then try to fit the top cover into the unit. Fasten the screws.

Step 8: Other Prototypes

I made some other prototypes before this one. One with mechanical rotary switch (from a mouse wheel) is cool, since it requires no button pushing to turn the unit on. One step closer to the UI of old fashioned twist-to-set timer. The problems are: 1st, the gear is difficult to make with most personal 3D printers. and 2nd, it is beyond the spec of the rotary switch. I tried to filter the noises with HW and SW, and it's not so reliable.

Also, I tried to use only 1 AAA rechargeable battery with a buck converter.

However, it is difficult to cut the power waste on the buck converter when system is off (sleep mode). Had to give it up.



    • Tape Contest

      Tape Contest
    • Arduino Contest 2019

      Arduino Contest 2019
    • Trash to Treasure

      Trash to Treasure

    9 Discussions


    8 months ago

    Please make the same with arduino nano or uno. Its very complicated to edit for us.


    8 months ago

    Wow. Very nice. I will try it. Tha ks for share. Can i use rotary encoder insted of optical switch ?


    1 year ago

    I would like to try making this. Can you please provide some more details on the Optical Switches. I am not familiar with these and I don't understand how they sense the turning of the dial. They also look expensive.


    Tip 1 year ago

    The schematic is not displaying properly, so I upload a jpg format here.