Christmas 2020 was the first time we were not able to travel home to visit our family and friends. So my husband and I handmade these beautiful tea cozies and sent them abroad as gifts.
For fun, we also branded them up by putting stickers of my fashion brand, Art by Physicist, on them. As we piled them up on my studio desk and admired their look, my husband said why don't you sell them on your site? I wasn't sure if he was joking but he sounded pretty serious. I did recently start a lifestyle collection with the Perennials design. But then I said it wouldn't make much sense for Art by Physicist, if it didn't also have a technology-embedded version. Thus, the "smart" tea cozy idea was born. (Remember the years when IoT started, everything having any electronics embedded were called "smart"?)
I'm not a tea drinker but have a bit of empathy towards them :) Because the person next to me always complains to me about cafés that "don't know how to make tea": "They don't give you boiling water!" "They leave the tea in for too long.", etc. etc. I especially don't enjoy making tea because I consider its hassle far greater than the enjoyment of drinking tea. And when it is too hot, you can't drink it, but if you wait a bit longer, it gets too cold...
What functionalities can I add to a tea cozy that could be useful? I needed something sleek and with various sensors and displays already integrated. Ah! A BBC micro:bit. I have a v1 in backlog for a long time. Let me see what I can do with it. It's got a temperature sensor and a LED matrix display, and its microcontroller can count time - could all be useful and I don't really need other things on it. Let's try to program something!Writing the code
It's the first time I am using a micro:bit. I heard it is very user friendly and it is a great tool for kids to learn programming. The most common IDE to program it is the Microsoft MakeCode. Because I'm used to code-based interfaces, I held some prejudice against a block-based visual interface designed for kids. But I decided to give it a try, as there are so many existing examples already available on MakeCode. It turned out to be wonderful - with intuitive getting-started interactions. When I tweeted some sneak peeks about this project, there were friends who also recommended the MicroBlocks.fun. I haven't tried it out yet (since the programming interface isn't my focus as an experienced maker) but I'm putting it here in case kids and parents may want to compare the tools and choose one they prefer.
I found some existing code for making a stopwatch and using the temperature sensor. Then I modified it on MakeCode. I especially love the simulator that shows you how the board should behave before one uploads the code to the hardware. You can see in the screenshots below how I'm using the different buttons on the micro:Bit to control, start and stop the program. You can also download the.hex code from the attachment later.
The idea is that the micro:Bit can be used as a timer. Different tea needs to be steamed for different amounts of time. Imagine the tea drinker can set up the timer as they put the tea cozy on the tea pot. I needed a button to turn the program on, a button to turn it off, a button to set the time and a button to erase the erase/reset the time.
I defined button A to start the program:
Button B to stop the program when the time set is reached:
Button A+B pressed together to reset the time:
Oops! I ran out of button on the micro:bit v1! How should I set the time? Maybe the accelerometer that respond to a shake? But it is not as assuring as pressing a button.Hardware limitations
In addition to running out of buttons on a v1, I also had to consider how the tea drinker will be notified by the timer. Obviously there's the display. But a tea maker isn't going to actively watch the display while the tea is steaming. That kinda defeat the purpose, as a timer is meant to let the person move away to do other things and sets an alarm when time is up. Naturally, the alarm should be a sound. But v1 doesn't have a speaker.
It is the micro:bit v2 that has a buzzer. So I quickly ordered one from Pimoroni. I got a micro:bit Go kit which has the v2, micro-USB cable and a 2xAAA battery holder. It even included batteries! But I cannot find this kit on their website anymore so in the components section, I had to put in alternative vendors.
Now the micro:bit v2 also includes a touch-sensing logo to function like a button:
Every time the logo is touched, the timer adds a minute and displays it on the LEDs. For example, touching once sets 1 min, another touch sets 2 mins, another touch sets 3 mins, and so on. If you overshoot the number, just press A+B together to erase the setting and start again. Usually a tea takes 1-4 mins to steam so you won't need many touches to set the timer.
Here is the loop.
Pressing A starts the loop. The display will start showing a beating heart and the temperature. The timer starts the count down. It compares the time lapsed with the set time. Note that the time lapsed is measured in millisecond and the set time is in minutes so there needs to be a conversion. When the former is bigger than the latter, the buzzer is triggered. I used the "twinkle" sound that is available in the sound library. Then pressing B will stop the loop and display a smiley face :)Sewing the tea cozy
The tea cozy itself without electronics is very easy to make. Just measure the size of your tea pot by its height and distance between the nozzle and handle. Cut four pieces of fabrics that is roughly a semi-circle slightly larger than these dimensions.
We actually made a paper pattern so we could repeatedly produce. Sew the four pieces of fabrics together along the curve. Just make sure to lay them out with the correct sides together and put the tassel on between the correct layers. Add the cotton in between the outer layers. Seal the opening along the straight line. I used a serger to close the opening.
For my fashion brand, I made two sizes: Lotus tea cozy. I haven't decided whether to sell the "smart" version because of some problems I'll discuss later below.
The 2xAAA battery holder is really convenient as you want to add the electronics in the tea cozy without needing to make custom parts or do soldering. I basically just put the code on the board, attach the battery holder to the board, opened a slit on the tea cozy, used velcro to close the slit and threw in the whole micro:bit and battery holder into the tea cozy. Then it was ready to use.
Because the micro:bit is in the tea cozy, it will only be measuring the temperature surrounding the tea pot. It is not really useful for the tea drinker as it does not tell the exact temperature of the water. So the number is just for decoration. But if you are very particular and want to know the exact temperature in the pot, you may think of a calibration method. For example, adding a thermocouple to the micro:bit and throw the thermocouple directly into the water. Let the micro:bit display the temperature that the thermocouple measures. But this could make the wiring quite messy and wet the electronics.
Another idea is to use a thermometer in the water (and read it with the tea cozy on somehow). Measure the differentials between the water and the temperature measured by the micro:bit then offset the displayed temperature. These are some ideas for future iterations. But it also means I cannot make it for you as you have to custom calibrate the temperature for your particular tea pot.
As you've seen the programming was very easy and the timer code worked as a charm. But I've noticed the time measured by the micro:bit is not very accurate. The buzzer usually sounded earlier than the set time was reached. Pushing the "reset" button on the micro:bit helped. But it got worse and worse when the program was repeatedly ran. Then I had to push the reset again. If you are an expert on how this microcontroller measures time, let me know so I could try to improve the timer function.
Finally, micro:bit does not have a on/off switch, nor does the battery holder that came with the Go kit. So as soon as the battery is plugged in, the electronics is on. You have to turn it off by physically unplugging the battery holder. This can be resolved by using a battery holder that has a switch. The one from SparkFun linked in the component list, for example, will work.Bonus video