SmartShower was inspired by a problem we, as college students, experience every day – deciding when each person gets to shower in the morning. Imagine six individuals living in a house, with only one shower. Who wants to wake up early, with the intention of showering, only to find out that the shower is already occupied? Time is limited in the morning, and there is nothing more annoying than cramming in a short shower before running to class, or even worse, missing the shower completely.

We created SmartShower to make scheduling hassle-free and mornings a little more enjoyable. In doing so, we can ensure people are mindful of the length of their showers and apply an internet-of-things solution to an everyday problem.

What it Does

SmartShower generates an optimal shower schedule based on the Google Calendars of people who live together. Users access the web application to…

  • authorize SmartShower to access their Google Calendar (via Google Calendar API)
  • configure preferences such as preferred shower time and length
  • set a desired shower start time prior to the first event of the day
  • view a shared calendar for all users

Using a raspberry pi microcontroller, we made SmartShower not just a web application but also and an internet-of-things device. With the SmartShower device users are…

  • informed about current shower status
  • given warning indicators regarding amount of time remaining in the shower (LED lights, buzzer sounds)
  • charged money for every minute past the scheduled shower end time

LED flashes and buzzer sounds serve as warning indicators for when a user has only one minute remaining. This use of behavioral cues encourages more efficient water usage. The Capital One Nessie API allows us to integrate monetary incentives into the project. Pressuring users to finish their showers within their scheduled time is a valuable feature, proven to be especially useful in water scarce areas.

How it was Built

The backend web application is written using a MySQL database. The website is run with flask framework and various python scripts. The scheduling algorithm is a greedy algorithm that handles collisions by equally reducing times of preferred shower times. The algorithm is able to handle multiple collisions during one time period and can calculate an optimal solution every time.

The raspberry-pi microcontroller runs on a Linux framework. The SmartShower IoT device leverages a python application, which interfaces with multiple LEDs and a sound buzzer. The raspberry-pi encompasses the Capital One Nessie API data, sources a timeline from the shared Google Calendar, and efficiently informs the user about real-time schedules.


We were able to create SmartShower as a solution to organizing an efficient shower schedule for college students. Our original expectations for SmartShower have been surpassed by utilizing an loT device, monetary incentives, and efficient calendar generation – allowing SmartShower to truly be effective when used for different purposes as well (ie. to conserve water).

Learning Experiences

  • using a Flash framework to build a website from scratch
  • working with the Google Calendar API
  • implementing the Capital One Nessie API
  • working with the MySQL database
  • programming raspberry-pi to serve as an loT device
Share this project: