Project tutorial
Shower Regulator

Shower Regulator © GPL3+

Learn how to make a device to limit your shower time!

  • 15 respects

Components and supplies

Ph abx00005 iso (1) bavevgguw1
Arduino 101
Normally Closed Solenoid Valve
Make sure it can withstand the temperature of the shower water; if you are using a metal one make sure it contains no lead. ALSO: Measure your own plumbing before buying
Fittings for Solenoid Valve
Make sure it can withstand the temperature of the shower water; if you are using a metal one make sure it contains no lead. ALSO: Measure your own plumbing before buying
12002 04
Breadboard (generic)
398 09
Adafruit RGB Backlight LCD - 16x2
Adafruit industries ada1536 image
11026 02
Jumper wires (generic)
Fairchild semiconductor fqu13n06ltu image 75px
Power MOSFET N-Channel
09939 01
Rotary potentiometer (generic)
Flip Switch
Battery Bank
Mfr 25fbf52 221r sml
Resistor 221 ohm
220 ohm will also work aswell
Fairchild semiconductor 1n4004. image
1N4007 – High Voltage, High Current Rated Diode
Plastic Container
Velcro Wall Strips
Cheap USB Cable

Necessary tools and machines

Hy gluegun
Hot glue gun (generic)
09507 01
Soldering iron (generic)

Apps and online services

About this project


It may not seem like it, but the shower is easily one of the most wasteful appliances in a home and expends great amounts of water and energy.

According to Home Water Works, the average flow rate of a shower is 2.1 Gallons (7.94L) per minute; this with an average shower time of 8.2 minutes results in 17.2 gallons (65.1L) used per shower or 51.6 gallons (195.3L) used in an average American household (3 people) per day. This makes it the third largest water user in a home.

The numbers are even more surprising if you look at the energy use. According to Skidmore College, the average shower uses 440 BTUs (0.13 kWh) to heat one gallon (3.78L) of water. This means that about 2.2 kWh are used in a single typical 8.2 minute shower and 6.6 kWh used per household per day! According to the US Department of Energy, this makes up 17% of total home electricity usage.

With the US EPA's estimate of 0.000703 metric tons (1.55 pounds; 0.7 kg) of CO2 per kWh, this results in 3.4 pounds (1.54kg) of CO2 per shower and 10.2 pounds per household.

However, the recommended shower time is only 5 minutes according to Green Lifestyle Changes - this cuts water use by 6.7 gallons (25.4L), power use by 871Wh (That's enough to power 174 CFL bulbs for an hour!), and CO2 emission by 1.35 pounds (0.6 kg) per shower. This is where the Shower Regulator for the Intel Earth Day Challenge comes in which would limit the shower time to 5 minutes or to whatever time the user chooses.

In one 365 day year, this would save 2,455.5 gallons (9,295.1L) of water (enough for a person to drink for about 13 years) and 317.9kWh or 492.7 pounds (223.5kg) of CO2 per person, resulting in 7,366.5 gallons (27,885.2L) of water, 953.7kWh of power, and 1,478.2 pounds (670.5kg) of CO2 saved per household.

How Does it Work?

1- The solenoid valve is closed when the device is powered off so no water can flow if the regulator is not running.

2- The valve opens when the device is powered on; the user can turn on the water now.

3- The regulator allows the water to warm-up for 20 seconds (is adjustable) indicated by 1 beep.

4- After warm-up, the regulator begins the shower timer for 5 minutes (is adjustable) indicated by 2 beeps.

5- The regulator will give 1 beep warnings 1 and 2 minutes before the shower is over.

6- Once the shower time is completed, the device will automatically close the valve, stopping the flow of water. The user can turn off the water and the regulator now. This is indicated by a continuous beep.


Note- make sure that the valve is the right size and can withstand the temperature of the shower water. Also make sure that the fittings and valve don't contain any hazardous substances like lead.

1- Strip 2 USB wires and solder them to the switch and step up (boost) converter (remember to adjust the converter to output a voltage between 6 and 12V). Refer to the pictures below.

2- Build the circuit using the schematics provided in the "Schematics" Section below.

3- Upload the code provided in the "Code" Section below to the regulator using the Arduino IDE.

4- Cut holes into the plastic container for the switch and wires for the solenoid valve.

5- Thread the solenoid valve wires through its hole and steal it with water-proof hot-glue. Then glue the switch into its hole. After this, glue the LCD screen onto the lid of the plastic container.

6- place the circuit into the container and close the lid. Make sure the switch and LCD are properly connected to the breadboard.

7- Attach the valve and its fittings between the water outlet and the shower head.

8- Stick the Velcro straps onto the back of the plastic container and attach it to a wall near the shower head.


Check out this video to see how it works!


//User settings:-----------------------
const float showerTime = 5; //In minutes
const int warmupTime = 20; //In seconds

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int stat = 0; //This keeps track of the status 

void setup() {
  // put your setup code here, to run once: 
  pinMode(13,OUTPUT); //Set pin 13 as output (For solenoid valve)
  pinMode(10,OUTPUT); //Set pin 10 as output (For piezo buzzer)

void loop() {
  // put your main code here, to run repeatedly:
  if(stat == 0){ //If the status is 0, begin warmup
    digitalWrite(13,HIGH); //Open solenoid valve
    tone(10,2000,1000); //Gives the warmup buzz
    for(int  i = warmupTime; i > 0; i--){
      lcd.print("Water Warmup:"); //Text for line 1
      lcd.print(String(i) + " seconds"); //Text for line 2
    stat++; //Update status
  if(stat == 1){ //If the status is 1, begin the shower timer
    tone(10,2000,1000); //Gives the shower buzz; warmup is over
    for(int i = showerTime * 60; i > 0; i--){
      if(i == 120){ //If there are 2 minutes left, give a warning buzz
      }else if(i == 60){ //If there is 1 minute left, give a second warning buzz
      lcd.print("Shower:"); //Text for line 1
      lcd.print(String(i) + " seconds"); //Text for line 2
    stat++; //Update status
  if(stat == 2){ //If the status is 2,stop the shower and notify user that it is over
    digitalWrite(13,LOW); //Close solvenoid valve
    tone(10,2000); //Gives buzz until it is shut off
    lcd.print("Shower Over"); //Text for line 1
    lcd.print("Have a Good Day!"); //Text for line 2
    lcd.print("Turn me off"); //Text for line 1
    lcd.print("Turn water off"); //Text for line 2


Schematics Image
Diagram bb jdxfotwnhx


Similar projects you might like

The Magnetic Field and RGB Tester

Project tutorial by Kutluhan Aktar

  • 18 respects

SMART CUBE: A New Way to Control Your Home

Project tutorial by Alberto Sartori

  • 33 respects

Arduino101 / tinyTILE BLE: Match-Making Sunglasses

Project tutorial by Kitty Yeung

  • 45 respects

Arduino 101 - Intel Curie Pattern Matching Dress

Project tutorial by Kitty Yeung

  • 59 respects

IoT for Coins

Project tutorial by Erik Moran

  • 49 respects

Automated Shower Boiler

Project tutorial by George Kartsonas

  • 11 respects
Add projectSign up / Login