A shower fan Arduino project.

Shofanduino uses an Arduino to measure the humidity in the bathroom and bypasses
a 3-way switch with relays to turn on the shower fan (240 Volts). Shofanduino
will autodetect when to switch on and off by keeping track of humidity data and
then automatically selecting tresholds.

The shower fan is normally controlled by a 3-way switch: slow, medium and high
speed. When the shower is on, the switch should be set to high to prevent mold
in the bathroom. Unfortunately, the switch is located in the kitchen (the fan also
sucks air from the kitchen and other parts of the house), not really convenient.

Obviously, this needed to be automated, which I did.

Future improvements:

  • Use a smaller Arduino (Teensy 2)
  • Insulate humidity sensor circuit against moisture…
  • Tidy up connections and cables

Using Teensy has the additional benefit that the Arduino doesn’t reset whenever you connect on the USB serial (which causes shofanduino to reset the thresholds, not what you want).

Please check out Shofanduino on github. Pictures and more explanations below.

Humidity sensor in the bathroom:

The humidity sensor gives me some problems (see also plots below), I might have to insulate it against moisture (ironic).

Arduino and relays on a board:

The black USB cable provides power and is used to get the information to plot the data below. The grey cable from the Arduino to the white box is used to switch the relays (in the white box). The frayed, badly connected UTP cable runs through the air ducts and is connected to the sensor (see top image). In the picture you can also see that the Shofanduino is basically between the normal plug and the normal outlet (they are Perilex by the way).

Example plot of humidity data (day):
You can see I took a shower slightly after 8:00 am. The rest of the day, sometimes you see a small peak in the humidity readings. I don’t know for sure what this is, but I think this is sensor noise or interference because of moisture on the circuit. I hope this will go away after I insulate the circuit.

Example plot of humidity data (week):
Here you see the data over one week. You can see the top reading (deviation) drop slowly over time and go up on November 5th. This deviation is basically the difference between the maximum reading and the average. It is used to automatically select the tresholds so you don’t have to configure anything, just plug it in. More detailed information can be found in the README of the github project.

Breadboard design:
Breadboard of shofanduino