Inspiration
The idea for UWash was born out of collective frustration. In the high-density residential environment of UTown, laundry is a gamble. We've all experienced "Laundry Roulette": carrying a heavy basket down flights of stairs only to find every machine occupied. While students are tech-savvy, our laundry rooms are stuck in the analog age. As such, we wanted to build a bridge between the physical vibration of a washing machine and the digital convenience of a smartphone.
Problem Statement
In residential halls, students frequently waste time checking whether washing machines are available or if their laundry has finished. This leads to unnecessary trips, machine congestion, and inefficient use of shared facilities, especially during peak hours.
Our Solution
UWash is a real-time laundry intelligence system that allows students to remotely monitor machine availability, receive instant notifications when their laundry is done, and optimize usage of shared laundry resources.
How It Works
UWash integrates IoT sensing, backend processing, and real-time user interfaces into a unified system: Sensing (Edge Layer): ESP32 microcontrollers paired with SW-420 vibration sensors detect machine activity. A rolling-window algorithm filters noise and identifies true wash cycles.
Data Processing (Cloud Layer):
Sensor data is sent to a Flask backend hosted on Railway, where machine states are processed and stored in a persistent SQLite database.
User Interaction (Interface Layer):
Students access real-time machine availability via a React web dashboard or subscribe to machines through a Telegram bot, receiving instant notifications when cycles complete.
How We Built It
Tech Stack
- Hardware: ESP32, SW-420 Vibration Sensor, C++
- Backend: Python, Flask, Railway, SQLite
- Frontend: React, Vercel
- Integration: Telegram Bot API (Async Polling)
System Architecture
We adopted a full-stack IoT approach. Our architecture is divided into three main layers:
The Edge: We used ESP32 microcontrollers paired with SW-420 high-sensitivity vibration sensors. To ensure accuracy, we implemented a rolling-window algorithm to distinguish between a "true" laundry cycle and someone simply bumping into the machine.
The Cloud: Our backend is a Python Flask API hosted on Railway. We chose Railway for its seamless GitHub integration and persistent Volumes, which allow our SQLite database to remain intact even during server redeployments.
The Interface: We built two entry points for students. A React-based Web Dashboard for a quick visual overview, and an Asynchronous Telegram Bot that allows users to "subscribe" to a machine and receive a push notification the second their clothes are ready.
Challenges We Faced
The biggest hurdle was signal noise. Initially, any small movement triggered a "Busy" status. We had to refine our logic to require a consistent vibration threshold over a set period, calibrating it to work across different machine brands.
Beyond hardware, we dealt with port conflicts on Railway - our Telegram webhook and Flask API both needed the same port. We solved this by switching the bot to polling mode, freeing the port for the API.
What We Learned
Beyond the code, we learned about the "Last Foot" of IoT—the difficulty of physically deploying sensors in a public space. We also gained deep experience in managing asynchronous Python processes, ensuring our Telegram Bot could handle multiple polling requests without blocking the API that receives sensor data.
Impact & Feasibility
Impact: We estimate a saving of 20 minutes per student per laundry cycle. In a house of 500 students, this scales to hundreds of hours of reclaimed productivity every month.
Feasibility: At a hardware cost of <$15 per unit, UWash is incredibly cheap to scale. Because it is non-invasive (no internal wiring required), it meets safety and housing regulations for immediate deployment in any UTown residence.
Log in or sign up for Devpost to join the conversation.