Kitchen Timer That Texts You When It's Done

by tylon22 in Circuits > Clocks

927 Views, 24 Favorites, 0 Comments

Kitchen Timer That Texts You When It's Done

20240523_021836.jpg

Kitchen timers are useful, but not many people use physical kitchen timers anymore. I personally still like using them, because there's something about having a physical item that you can press that adds to the experience. An issue I had though, is that sometimes I would go to another room for whatever reason, and I would forget about my timer, and I would be too far away to hear it ring.

I wanted to create a solution, so I made a kitchen timer that would text me whenever the time is up.

Of course, I could also just set an alarm on my phone, but where's the fun in that?

Supplies

20240523_001054.jpg

Materials:

ESP32 Dev Module

OLED screen board

Double AA battery pack (4 batteries)

Switch

Two buttons

Acrylic 1/8"

Heated inserts

Screws


Tools:

Soldering Iron (Alternatively a breadboard can be used)

3D printer (Optional)

Laser cutter (Optional)


Software:

Arduino IDE

Fusion 360


The enclosure for the electronics was made with 3D printed plastic and laser cut acrylic, however the entire enclosure can definitely be made by getting creative with some cardboard.

Designing Approximations

000341.png
000342.png
000343.png
000344.png
000345.png

I began by opening up Fusion 360 to CAD up some simple approximations of each component that is going into the outer enclosure.

I created sketches based on the dimensions and extruded them to the correct thickness to get vague approximations of the parts I will use, and I made sure to be accurate with hole locations especially on the OLED screen, so that I can reference them later on.

Designing the Enclosure

000346.png
000347.png
000348.png
000349.png
000350.png
000351.png
000352.png
000353.png
000354.png
000355.png

After I modified the size of my enclosure to fit the parts, I began by adding holes for places where the parts would go. I added mounting holes for the OLED screen, and a place for the pins to go through the box. I then added holes for where the buttons would mount.

I knew that I wanted to front and top panel to be acrylic, as I wanted the electronics to be see through, and for the front to have a cover, so food/liquids won't make their way through when handling the enclosure with dirty hands.

I made a model of the front and top panels, then added holes for where I would add heat set inserts that I would later screw through to assemble the enclosure. To make the panels see through I went to the materials tab in Fusion 360 and set them to a clear plastic.

Lastly, I added a hole for the on/off switch.

To export the panels as DXFs, which I would need for laser cutting, I projected their geometry onto another sketch and exported them as DXFs as seen in the last picture.

I exported the enclosure as a STEP file for 3D printing as well.

Making the Enclosure

20240522_164541.jpg
20240522_164639.jpg
20240522_235615.jpg
20240523_000429.jpg
20240523_000631.jpg
20240523_000146.jpg
20240523_000420.jpg

I imported my file into my slicer to prepare it for 3D printing, and 3D printed it, and I also laser cut the panels for the enclosure. The process is usually different depending on the 3D printer/laser cutter, but the general process for 3D printing is to slice the model using a slicing software like Prusa Slicer, Bambu Slicer, or Cura, then use an SD card or WIFI to send it to your 3D printer. For laser cutting it is usually put the DXF file into a software like Corel Draw or Adobe Illustrator, set the line width to Hairline or .001, and print it to the laser cutter to vector cut.

I added heated inserts into enclosure by using a soldering iron to heat them in. They are better than putting screws directly into the plastic of 3D printed parts and are a good way of adding threads for 3D printed plastic parts. Usually, I set the heat of the soldering iron to 100 degrees Fahrenheit above the melting temperature of the plastic and hold the insert using pliers.

Electronics and Completing Assembly

Wiring.png
20240523_012659.jpg
20240523_013129.jpg
20240523_013617.jpg
20240523_014658.jpg
20240523_020635.jpg

Electronically I hooked everything up directly to the ESP32 rather than use a breadboard so that everything would more easily fit into the enclosure. I soldered together the ground pins of the buttons, then had them connected to the ESP32. I also soldered some jumper wires onto the power switch. I used jumper wires to connect the OLED screen to the pins of the ESP32 board.

I found it easiest to solder jumper wires onto the relevant item, put it onto the enclosure, then put the ESP32 inside the enclosure last and connect it to the jumpers.

I hot glued the buttons onto the enclosure, and hot glued the switch in, and used screws to fasten the OLED screen as well. I did not screw the panels in yet as I would need to have access to the board to program it.

Programming

000357.png
000358.png
000360.png
000362.png
000364.png
000363.png
1000121752.jpg
000368.png

If you have never used an ESP32 development board before, there are some things you have to set up, and the process can be found here

The first thing I did was figure out and test the buttons. I assigned them to pins 13 and 14 and has them as INPUT_PULLUP. Usually when you press a button, there are two states, HIGH and LOW. When you press it, it tells the microcontroller that it is HIGH many times, as it loops frequently. This causes issues, because if you wanted the microcontroller to text you, it would text you a bunch of times equal to how many times it loops through. I made it only tell the microcontroller when it has been pressed one time by only sending the message when it changes from LOW to HIGH.

I then messed with the OLED code to figure out how to make it work. It needs to be initialized in setup and then using display.setCursor() tells it where to print, and using display.println() makes it print, and using display.display() makes it actually show up on the screen. More details on OLED displays can be found here

To figure out how to make it send a text message to my phone, I used a WhatsApp bot called CallMeBot and I had my ESP32 board automatically connect to the Wi-Fi. The general process is to text the WhatsApp bot (+34 621 331 709) this message: "I allow callmebot to send me messages", then you will get an API key that you will have to program into the ESP32. The exact steps can be found here


TLDR: Setup your ESP32 with this link, download the code I've provided called timer.ino, obtain the api key by following the steps here, modify the parameters as seen in the last image, and upload your code to your board.

Downloads

Close Everything Up!

InstructablesTimerDemo
20240523_021821.jpg
20240523_021817.jpg
20240523_021750.jpg

I put the acrylic panels on, and after that I was done!

The left button resets the timer, while the right button increases the timer by one minute. After the timer has completed, I would get a text message after a couple of seconds.