Things used in this project

Hardware components:
Ardgen 101
Arduino 101 & Genuino 101
×1
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
×1
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
×1
12002 04
Breadboard (generic)
×1
398 09
Adafruit RGB Backlight LCD - 16x2
×1
Adafruit industries ada1536 image
Buzzer
×1
11026 02
Jumper wires (generic)
×1
Fairchild semiconductor fqu13n06ltu image 75px
Power MOSFET N-Channel
×1
09939 01
Rotary potentiometer (generic)
×1
Flip Switch
×1
Battery Bank
×1
Mfr 25fbf52 221r sml
Resistor 221 ohm
220 ohm will also work aswell
×2
Fairchild semiconductor 1n4004. image
1N4007 – High Voltage, High Current Rated Diode
×1
Plastic Container
×1
Velcro Wall Strips
×2
Cheap USB Cable
×2
Software apps and online services:
Ide web
Arduino IDE
Hand tools and fabrication machines:
Hy gluegun
Hot glue gun (generic)
09507 01
Soldering iron (generic)

Schematics

Schematics Image
Diagram bb jdxfotwnhx
Schematics
diagram_F3mdu8tMGy.fzz

Code

CodeC/C++
//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: 
  lcd.begin(16,2); 
  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.clear();
      lcd.setCursor(0,0);
      lcd.print("Water Warmup:"); //Text for line 1
      lcd.setCursor(0,1);
      lcd.print(String(i) + " seconds"); //Text for line 2
      delay(1000);
    }
    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
    delay(1500);
    tone(10,2000,1000);
    for(int i = showerTime * 60; i > 0; i--){
      if(i == 120){ //If there are 2 minutes left, give a warning buzz
        tone(10,2000,1000); 
      }else if(i == 60){ //If there is 1 minute left, give a second warning buzz
        tone(10,2000,1000);
      }
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Shower:"); //Text for line 1
      lcd.setCursor(0,1);
      lcd.print(String(i) + " seconds"); //Text for line 2
      delay(1000);
    }
    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.clear();
    lcd.setCursor(0,0);
    lcd.print("Shower Over"); //Text for line 1
    lcd.setCursor(0,1);
    lcd.print("Have a Good Day!"); //Text for line 2
    delay(2000);
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Turn me off"); //Text for line 1
    lcd.setCursor(0,1);
    lcd.print("Turn water off"); //Text for line 2
    delay(5000);  
  }
}

Credits

47d84b8ba1750e4c7f93e7712b90fb4a
Ryan Chan
1 project • 20 followers
I'm a student at Scranton Preparatory School that likes turtles. I also like robots.
Contact

Replications

Did you replicate this project? Share it!

I made one

Love this project? Think it could be improved? Tell us what you think!

Give feedback

Comments

Sign up / LoginProjectsPlatformsTopicsContestsLiveAppsBetaBlog