Have you ever forgotten about a pot on the stove? No? You pay attention when you’re cooking? Well, I often forget that I was planning on making food because I’m working, and my water disappears.
But no more! Behold, the Boil Buddy! It’s a piezoelectric pot watcher that can send you a text when your water is boiling. It works just by clipping to the rim and sensing the vibrations of the pot, so nothing has to enter your water.
The sensor clip has an adjustment screw to fit onto a variety of pot sizes with different thicknesses. It’s also useful for adjusting tension on the sensor, which can be very finicky! It’s operating at the edge of its temperature range; the sensor is rated to 70 C, and the top edge of the pot reaches that.
The Boil Buddy uses a USB Wi-Fi dongle to connect to the internet and use Twilio to send text messages. It also receives power over USB, but uses a different port. I’ve been powering it with a USB wall charger.
The trickiest part of making the boil buddy was figuring out a good way to display the data. I first tried in python, but apparently the PocketBeagle can’t control my laptop display. Instead, I had to rig up serial communications into MATLAB via PuTTY that gives the beautiful real-time display below. It had a huge time delay at first, but then I learned that the longest step in the display update loop was reading the serial port. Instead of sending one signal at a time, I decided to send forty and lowered the sampling rate to 80 Hz, which resolved the lag.
Something I never figured out was this strange reliability issue with the ADC built into the PocketBeagle. Regardless if the sensor was at temperature or not, the system would just stop for no reason in the middle of gathering data and would freeze if you tried to run it again. The only solution was a reboot. I luckily got one good dataset: ‘boiltest2.csv’. To avoid risk of failure with the ADC, I made a simulated data acquisition loop out of boiltest2 and the program reads from that for now. The real data acquisition code works, but the hardware/firmware issues kept me from implementing.
Additionally, I had some trouble with the built-in statistics library in python. It refused to return means and standard deviations of my samples, triggering an AssertError without much context. I’m guessing it’s something to do with floating point precision meaning that two values don’t
line up? Again, not sure, so I ended up working around it like I did the ADC. I used my good dataset, calculated expected standard deviations in MATLAB, and then imported those so the python script could pretend to calculate them.
These workarounds were very effective in letting my code run, but it does somewhat defeat the purpose of the device; it’s basically a timer now when it keeps reading the same dataset over and over. To resolve the ADC issue, it might be good to look into an external ADC and interface through an I2C connection. And for statistics, there are probably other libraries out there that compute the standard deviation independently of the in-built method.
Overall, I’m decently satisfied with the outcome of my project. I proved the feasibility of detecting boiling through the pot vibration patterns and learned A LOT about data acquisition and display, wireless communication, and python. I’ll probably keep tinkering to see if I can solve those remaining issues over winter break. I’m glad I chose this project; all these skills will be highly transferable, especially for my senior design! I’m working on a human-sounding drum playing robot, so I’m sure having some experience with piezoelectric contact microphones will come in handy there.