Introduction: A Laundry Alarm for the Hearing Impaired and Everyone Else!

About: retired mechanical engineer

This Arduino based project was designed to solve a recurring problem for my hearing impaired wife. Our laundry room is located remotely from our living area.  If our laundry has finished washing and is not removed in time, it can sour or even get moldy.   If our laundry has finished drying and is not removed promptly, then severe wrinkling occurs.   My solution is to sense when the washer or dryer has turned off and then send a signal to a visual alarm inside our living space to alert my wife when the laundry is done.  This project can be used with any 110 VAC washer or dryer or other appliance that needs to be monitored.

Step 1: The Modules


My  solution consists of three physical modules:

1.The AC module provides 120 VAC to the washer and dryer and senses when either one is drawing current.  When the current stops, a signal is sent to the master module.  The AC module is a common 6 way receptacle that is modified for this project.

2.The Arduino based master module is located near the AC module in the laundry. It reads the current sensor inputs then decides when to turn the alarm in the slave module on or off.  It also contains a voltage regulator and driver for the slave module.

3. The remotely located slave module is a flashing strobe light located in the living space. Our experience is that a strobe light was much more noticeable and less disturbing than an audible

Step 2: Building the AC Module


CAUTION ! Never work on a live circuit.  Carefully route and insulate all wiring.

The AC module consists of a six way AC receptacle that has been modified with a Hall effect sensor mounted on two of the six available receptacles. Any current draw of more than 4 amps produces a 5VDC, 60 Hz square wave that can be read by the master module.  Cut a small break in the neutral lead of the two receptacle neutral wires that you want to use for the washer and dryer.  Cut a quarter inch iron bolt to about a half inch length.  Wrap  about 6 turns of #14 enameled copper wire around the bolt and solder the ends to each end of the break in the receptacle neutral.  Glue the hall switch with to the end of the bolt with the beveled side toward the bolt.  Solder the resistor between the outside leads of the hall switch.  See schematic and photo for details.  Make sure all wiring is separated and insulated properly.

The Hall switch also provides complete isolation from AC line voltages.

Step 3: Building the Master Module


Building this module will depend on what Arduino 328 based MCU you want to use.  I chose the Ardweeny because it was cheap and small and I had two on hand.  I mounted components on a perf board from my junk box.  I used hobby servo interconnect cables between modules.  The Ardweeny requires a 5VDC supply, other Arduinos may not. See  schematic and photo for details.

Step 4: Building the Slave Module


Building the slave module:
I used a 12 VDC automotive strobe light mounted in the remote slave module as an alarm inside the house.  You could use any combination of audio or visual alarms.  I also used a wired link between the master and slave modules, but this could also be an RF wireless or even an internet like.  I prefer to just keep it simple.  The strobe requires a 12 VDC power supply.  In my case, the master and slave are located on each side of a wall, so I used a common 12V wall wart  supply for the slave and stepped down the 12 volts with a 5 volt regulator for the Ardweeny.

Caution: strobe lights use high voltages so be careful handling them.

Step 5: Start Up and Operation


1. Plug in washer and dryer to the modified AC module.  Verify that they work normally.
2. Plug in the power supply to the Arduino master module and load the code.  The on board LED should blink at about one second intervals.
3. Attach the slave (alarm) module to the master module and power supply.
4. Connect the signal lines from the AC module hall switches to the master module. 
5. Turn on either washer or dryer for a few seconds or longer, then turn off.  The Arduino LED should now glow continuously and the alarm should operate.
6. Reset the switch on the master module.  The alarm will turn off and the Arduino LED should blink again and you are ready for the next cycle.
7. Note that the alarm triggers when either the washer or the dryer turns off and the Arduino must be reset manually (and hopefully the laundry is unloaded  ;-).  This assures that the alarm is not ignored!

Step 6: Arduino Code for Laundry Alarm


/*
laundry strobe alarm by Emile 'Butch' Alline
monitors turn off of either washer or dryer, then turns on strobe light and on board LED
Hardware is ardweeny ATmega 328, works with IDE 1.0 and earlier
*/
int loopDelay = 1000;       // loop delay between readings set by user
const int  LEDpin = 13;     // output pin for on board LED
const int  strobePin = 5;   // strobe trigger output pin
const int  dryerPin = 2;    // dryer hall switch pin
const int  washerPin = 3;   // washer hall switch pin
int dryerState = 0;         // current state of the dryer, set to zero=off
int washerState = 0;        // current state of the washer, set to zero=off
int lastDryerState = 0;     // previous state of the dryer, set to zero=off
int lastWasherState = 0;    // previous state of the washer, set to zero=off
int firstDryerRead = 0;     // first reading of dryer pin
int firstWasherRead = 0;    // first reading of washer pin
int secondDryerRead = 0;    // second reading of dryer pin
int secondWasherRead = 0;   // second reading of washer pin
int readDelay = 8320;       //the number of microseconds to delay between readings
// 8320 determined experimentally to yield best detection of 60 hz (~99.3% accurate)

void setup() {
  pinMode(LEDpin,OUTPUT);      // initialize LED pin as output for debug
  digitalWrite(LEDpin,LOW);    // set LED off
  pinMode(strobePin, OUTPUT);  // initialize the strobe pin as an output
  digitalWrite(strobePin,LOW); // set the strobe pin LOW (strobe off)
  pinMode(dryerPin, INPUT);    // initialize the dryer pin as an input from hall switch
  pinMode(washerPin, INPUT);   // initialize the washer pin as an input from hall switch
}
void loop()
{
  digitalWrite(LEDpin,HIGH); // flash LED to indicate loop is active
  delay(20); // value not critical
  digitalWrite(LEDpin,LOW);
 
  //first we see if there is 60 hz current on the dryer, if so then dryer state is on (=1)
  firstDryerRead = digitalRead(dryerPin);  //check status of dryer pin for hi part of 60 hz
  delayMicroseconds(readDelay);            // wait for possible next cycle
  secondDryerRead = digitalRead(dryerPin); //then check it again to avoid reading mains spikes

  if(firstDryerRead != secondDryerRead) {  //set the dryer state to on or off (!= means not equal)
    dryerState = 1; // readings are different so there must still be 60 hz on dryerPin
  }
  else {  // no 60 Hz so dryer must be off
    dryerState = 0; // steady state condition, no 60 hz current
  }
  if ((lastDryerState == 1) && (dryerState == 0)){ // 60 hz changed from on to off (&& means boolean AND)
    Serial.println(" dryer turned off ");          // notify user
    digitalWrite(strobePin,HIGH); // set strobe pin HIGH (strobe on),user will do reset to turn it off
    digitalWrite(LEDpin,HIGH);
    while (true)  // Job done, loop until a human arrives to reset
    {
    }
  }
  //end of dryer readings

  //check for 60 hz on washer, if so then washer state is on (=1)
  firstWasherRead = digitalRead(washerPin);  //check status of washer pin for hi part of 60 hz
  delayMicroseconds(readDelay);              // wait for possible next cycle
  secondWasherRead = digitalRead(washerPin); //then check it again to avoid reading mains spikes

  if(firstWasherRead!=secondWasherRead) {
    washerState = 1; // readings are different so there must be 60 hz on washerPin
  }
  else {   // no 60 Hz so dryer must be off
    washerState = 0; // steady state condition, no 60 hz
  }
  if ((lastWasherState == 1) && (washerState == 0)){ // 60 hz changed from on to off
    Serial.println(" washer turned off ");  // notify user
    digitalWrite(strobePin,HIGH); // set strobe pin HIGH (strobe on),user will do reset to turn it off
    digitalWrite(LEDpin,HIGH);
    while (true)  // Job done, just loop until a human arrives to reset
    {
    }
  }
  //end of washer readings
 
  lastDryerState = dryerState;   // save dryer state for comparison later
  lastWasherState = washerState; // save washer state for comparison later
  delay (loopDelay); // optional, not required
}

Step 7: The Schematic


The schematic is a Visio file.  I hope that I can insert it and that you can read it.   I also have a list of parts for my build of the modules, but I could not get it to load into this instructable.  If you have any questions, please contact me.  Good luck on your build of the laundry alarm.