Shower Saver

Made by Kami Chin

Make your daily shower experience more pleasant with this shower saver. This device will alert you when your shower is at your preferred temperature and provide a visual indication of the time/water usage of your shower.

Created: January 25th, 2018



Taking a shower is a part of our daily routine, yet it can definitely be unsatisfying sometimes. On cold winter days you dread getting in the shower out of fear that the water won't be hot enough. How can you make sure you're not wasting too much water in your shower?

My project is a device that can be placed in the shower to: 

1) send an alert to your phone when the water has reached your preferred temperature, and

2) give visual cues on the device to let you know how much time and water your shower has used so far to remind you to be environmentally conscious and efficient with your own time.



This device is dedicated to my roommates who leave the shower running for longer than necessary before getting in, just to avoid encountering cold water and wasting a lot of water in the process. This project is inspired by EvaDrop ( and the Moen Smart Shower ( 



  • Particle Photon
  • 10K Ohm thermistor
  • 10K Ohm resistor
  • 4 IR LEDs
  • 4 1K Ohm resistors
  • A lot of female/male extension jumper wires


  1. Wired up the breadboard with a resistor and the thermistor as shown in the schematic below.
  2. Tested that the thermistor worked by publishing the temperature readings to the Particle cloud every few seconds. Manipulated temperature by dipping the thermistor head in cold water or squeezing it between my fingers.
  3. Added LEDs to the circuit to act as visual indicators to when the ideal temperature was reached, and as indicators to how much time has passed. 
  4. Created an applet on IFTTT to send me an SMS message whenever the event "Temperature" was "Ready," ie the shower is at the right temperature. 
  5. Used extension cords to isolate the thermistor from the breadboard so that when mounted in the shower, the circuit would stay dry. The thermistor connection to the jumper wires were wrapped in electrical tape and fastened with a rubber band and scotch tape to the shower head in a position such that the thermistor would touch the water. 


I was ultimately pleased with the functionality of the device I created. I was worried that water would damage the circuit if I placed the entire breadboard near the shower head with the thermistor, so I just used extension cords to isolate the thermistor from the breadboard. If I were to continue with this project, I would like to make some sort of casing for the circuit so that the entire device could be inside the shower stall for ease of visibility and access. 



This product monitors the shower temperature while you are waiting for it to be hot enough to shower in. The interface is relatively simple. The blue LED lights up when the thermistor detects the user's ideal temperature. At this same time of reaching the ideal temperature, the IFTTT applet is triggered and sends a notification to my phone via SMS. The green, yellow, and red LEDs serve as subtle indicators of how long the shower has been, in intervals of 3 minutes: From 0 to 3 minutes, the green one will be illuminated, from 3 to 6 minutes, the yellow one will light up, and from 6 minutes onwards the red light will be on. 

A video of it in action:



I got starter code and circuit inspiration for temperature logging via the thermistor from this project:

#include <math.h>
const int PULLUP_RES = 10000; // in Ohm( 20kOm )
const double BETA = 3950; // in K for Semitec 104 GTA-2
const double THERMISTOR_RES = 10000; // in Ohm
const double THERMISTOR_NOM_TEMP = 25; // Celsius, C

int greenLED = D0;
int yellowLED = D1;
int redLED = D2;
int blueLED = D6;
int start = Time.minute();

void setup()
  pinMode(greenLED, OUTPUT);
  pinMode(redLED, OUTPUT);
  pinMode(yellowLED, OUTPUT);
  pinMode(blueLED, OUTPUT);
  digitalWrite(greenLED, LOW);
  digitalWrite(yellowLED, LOW);
  digitalWrite(redLED, LOW);
  digitalWrite(blueLED, LOW);
void loop()
void thermister_temp(int aval) {
  double R, T;
  R = (double) PULLUP_RES / ( (4095 / (double) aval ) - 1 );

  T = 1 / ( ( 1 / (THERMISTOR_NOM_TEMP + 273.15 )) + ( ( 1 / BETA) * log ( R / THERMISTOR_RES ) ) );

  T -= 273.15; // converting to C from K

 // return degrees C
 //Particle.publish("Temperature", String(T) + " °C");
   if (38 <= T && T <= 43) { //Celsius temperatures
     Particle.publish("Temperature", "Ready");
     digitalWrite(blueLED, HIGH);
     digitalWrite(blueLED, LOW);

   if (start <= Time.minute() && Time.minute() <= start + 3) {
     digitalWrite(greenLED, HIGH); }
   if (start+3 < Time.minute() && Time.minute() <= start + 6){
     digitalWrite(greenLED, LOW);
     digitalWrite(yellowLED, HIGH); }
   if (start + 6 < Time.minute()){
     digitalWrite(yellowLED, LOW);
     digitalWrite(redLED, HIGH); }
Click to Expand
Share this Project


49313 Designing for the Internet of Things (Undergrad)

· 22 members

A hands-on introductory course exploring the Internet of Things and connected product experiences.


Make your daily shower experience more pleasant with this shower saver. This device will alert you when your shower is at your preferred temperature and provide a visual indication of the time/water usage of your shower.