Introduction: Balance to the Furnace
In this instructable I describe a simple arduino-based hack to help balance the temperature in your home! The idea is to trick your system's fan to come on extra, even when there isn't any heating or cooling. What this does is help mix the air between all the rooms, so that even the rooms which don't get as much air are eventually brought into equilibrium with the rest of the house. This technique will not help houses with baseboard or radiant heat, only those with a blower unit.
Many blower units are packaged together with a furnace or air conditioner, depending on your latitude. Somewhere inside you can bet there is a controlling circuit, with several terminals designed to be wired out to a thermostat. The key idea of this instructable is to find the terminal which will turn on the blower when a control voltage signal is applied, and use an arduino and a few other electronic components to automatically apply this signal for ten minutes every hour. The blower unit is designed to be controlled in this manner; the Arduino circuit is just a homemade thermostat if you like and won't risk any damage to your HVAC equipment. That said, you may wish to hide this from your landlord or inspector and install it in a concealed manner to avoid suspicion!
Its also worth mentioning that you may be able to find a thermostat that comes with the capability to independently control the fan. You'll also need to run the wire for controlling the fan to the thermostat, unless your house had an unusually thorough contractor. Since I am a renter without access to my attic, running control wiring is not an option, but if you're up for buying a pricy thermostat and running wires through your walls, that's an alternative to this instructable.
Step 1: Materials
I proudly assembled this project entirely out of things I had lying around, some of which are slightly overkill for the job but work nonetheless:
- Sparkfun's Redboard Arduino
- 250 VAC Relay, 5 VDC coil
- 2N2222 NPN transistor
- 1/4 Watt Resistors: 1k, 47, 47.
- Various Broadboard wires from a kit
- Vector Breadboard
- Soldering Iron, Solder
- Wall Adapter anywhere from 7-15VDC
- Lightbulb to Wall Socket Adapter
- Wire Tape
Your blower unit will likely use 24V AC control signals. Switching these via digital logic will require a relay. Driving a relay directly from the Arduino could overload its digital outputs, but a transistor can be used in between, so that the Arduino drives the transistor which drives the relay. A few resistors are needed to limit the transistor properly. All this needs to be soldered onto something- I had a chunk of vector breadboard lying around. You'll have to get power to the Arduino. There's definitely DC rectified from 24VAC available on your Furnace's control board, but I didn't want to mess with that board and the DC would have to be converted down somehow so I powered my Arduino with a wall adapter connected to a light socket that was available in my apartment's HVAC closet. A cleaner but more advanced approach might be to transform and rectify the AC yourself.
Step 2: Inside the Furnace
Begin by ensuring nothing will try to turn on while you are busy. Many homes have a shut-off switch, usually in a with a red colored switch cover. You can also just use your thermostat to make sure the unit won't turn on.
Find the part of your unit that has exposed circuitry, and look for screw terminals with labels like "R", "G", "W", "Y", and so on. You can also just follow your existing thermostat wiring. These designate industry standardized wire colorations for thermostat control wiring.
Connect a wire to "G" for green, and a second wire to "R" which should be the source wire for 24VAC. You can confirm this with a voltmeter, although you may need to defeat a cover interlock with your hand to do so. Guide the two wires to the outside of your unit by the same path your thermostat wires take to come in.
Step 3: On the Breadboard
Solder the two wires you guided out of the furnace to the appropriate terminals on the relay. Solder one of the coil pins to the collector of the NPN transistor. Solder a 1k to the base of the transistor, and solder the emitter to a ground rail. The Arduino will only be putting 5mA or so through the 1k, well below its 40mA max per channel.
Now solder two 47 Ohm resistors in parallel between the other coil pin of the relay and the supply rail. My relay has a 5V, 100mA coil, and I powered my Arduino with 7V, which will also power the breadboard. The two resistors are about 20 Ohm in parallel, so they burn an extra 2V so as to provide the relay it's specified coil current/voltage/power. Note that even if I had a single 20 Ohm resistor available, it would be a bad choice because it would be at 2V * 100mA = 200mW, too close for my taste to the 1/4W power limit.
I drew up the circuit in Autodesk Circuit, check it out! I also added screen shots in case this doesn't work for any reason.
Step 4: On the Arduino
Connect one digital output to the base of the transistor via the 1k you already soldered. Sometimes a 10k can be sufficient to drive a transistor, but a 1k will allow more current into the junction to better support the somewhat large 100mA current it will develop. (or I'm just using an old or over-soldered transistor, but it wouldn't pull the relay on until I switched down from 10k to 1k). With a 1k on the base, your Arduino is supplying (5V - 0.7V)/(1k) = 4.3mA, well below the 25mA or so that I think Arduino channels are able to source. The 0.7 I subtract there is equal to the "diode drop" that will develop in the transistor.
Connect the VIN pin of your Arduino to the breadboard supply rail, and the GND pin to the ground rail. The idea here is that the relay coil is NOT driven through the Arduino's ATMega chip, but directly by your plug-in power supply, which is passed through to the VIN pin. Even the ATMega's +5V power pin is designed for 100mA max, and I wouldn't want to ask the chip to deliver its max in normal operation.
Step 5: Regarding Mounting
Its probably a good idea to find a piece of wood or plastic and screw things down, but I didn't feel like it. I just dangled the arduino and the breadboard from the somewhat rigid thermostat control cabling in the closet outside my furnace. Yep, you heard me right. There is a micro-controller and a breadboard hanging in mid air in my closet!
I did find it useful to use wire tape to fix the breadboard to the arduino. Eventually I hope to run the fan control wire out to my thermostat and connect the Arduino there in a more legitimate way.
Step 6: Programming
I programmed my Arduino to turn on the relay for the first ten minutes of every hour. So far this season, it has had the desired effect of keeping the house in better equilibrium. The code is just a modification of the simplest Arduino code one can find- the blink code for making the LED blink. Doing things this way is also convenient because you can know what time it is without your phone. It does seem to need tweaking though- see the note I wrote in the header of the code.
You may wish to program your Arduino to turn on the fan for extra time but only when the heat is already coming on. I hope to add this functionality in the future. It would be possible to apply the AC voltage that would come from the thermostat to the Arduino with the help of a diode, a capacitor, and a voltage divider to act as a rudimentary half wave rectifier to make the AC look like a digital input to the Arduino. Another possibility would be to only use a voltage divider and apply the AC directly to the Arduino's analog input pins.
If you want to copy my code, message me. I can't find a good way to put it in here. Or you can quit being lazy and practice typing for two whole milliseconds. Or you may be able to get it through the Autodesk Circuits links a few steps back. Thanks, hope you had fun!