A system used to keep track of dishes in the sink
Living in a college house with six guys came with its fair share of challenges, not least of which was managing the ever-present mountain of dishes in the sink. The cycle was predictable: someone would leave a plate or pan in the sink, forget about it, and the pile would grow until we ran out of clean cookware. Frustrated but inspired, I decided to apply software to this all-too-common real-world problem.
This project evolved into a full-stack endeavor that even delved into hardware. My initial plan was simple: tape a webcam to the ceiling above the sink and connect it to my old MacBook running the software. However, after sharing the idea with a professor—who found it both amusing and intriguing—I decided to use a Raspberry Pi instead. Armed with a Raspberry Pi and a webcam, I got to work.
Although I had tinkered with a Raspberry Pi back in middle school, this project required me to relearn everything from scratch. I installed Ubuntu Server on the Raspberry Pi, set up SSH, and outlined my plan. The system would monitor the sink for movement and, when detected, start recording a video. Simultaneously, it would trigger timers for one, six, twelve, twenty-four, and forty-eight hours, taking snapshots of the sink at each interval. Most importantly, it would save the "before" and "after" frames to create a clear visual record. These photos and videos were stored locally on the Raspberry Pi within its file system. To organize everything, I implemented a SQLite database to log when new items were added.
The motion detection was one of the most exciting challenges. I had never used OpenCV before, making this my first foray into an open-source library. It was a transformative moment in my learning journey, showcasing the incredible power of libraries and packages. This realization completely changed how I approached coding. Using OpenCV, I defined regions of interest (ROIs) around the sink and stovetop. Each incoming frame was compared to the previous one, and significant differences were flagged as motion. This would initiate the video recording and timers. The recording ended after a period of stillness, ensuring only relevant footage was saved.
Next, I needed a way to display the collected photos and videos so my housemates could access them. This required me to learn about hosting websites locally. I chose Apache as my server and built a straightforward, mobile-optimized website for easy navigation. The site allowed users to scroll through the archive and view the media. For the front end, I used HTML, CSS, JavaScript, jQuery, and Bootstrap.
This project was my first purely fun personal venture. Unlike the Volleyball Stats app, which had a more serious tone, this project was an opportunity to experiment and enjoy the process. Along the way, I learned: the power and flexibility of open-source tools like OpenCV, the basics of hosting websites with Apache, anf how to design and build a system from the ground up.
Did it work? Absolutely—and perhaps too well! The group chat was soon flooded with screenshots of culprits, like Michael leaving a mountain of dishes in the sink at 2:30 AM, or the mysterious "fork in the garbage disposal" incident. Unfortunately, I overlooked one feature: a way to delete embarrassing photos of myself. I was as guilty as anyone The highlight, though, was capturing my buddy Alex extinguishing a small oven fire, immortalizing one of the most chaotic moments of our college experience.
This project taught me that I have the capability to turn my ideas into reality. It reinforced my love for problem-solving and solidified my belief that with the right tools and mindset, I can build anything I dream up.
Ubuntu Server
Python
Flask
OpenCV
SQLite
HTML
CSS
JavaScript