I recently bought an old house which came with a central duct system, an electric furnace and a heat pump.
The electric furnace, from what I gathered, had been installed in the early 80's and the heat pump was added in 2000.
I first changed the thermostat and installed an Ecobee 4, which was a nice upgrade from the old one :
but I was still unsatisfied by the way the whole system was wired :
- There was only one heat stage (W1), while I had 4x 5kW heat strips installed in the furnace (only 3 connected)
- The motor in the air handler was multi-speed (4 speeds) but only the high speed was connected
- There was no obvious upgrade path, the whole thing was controlled by big discrete relays (no PCB) and frankly the installation was a mess :
So I decided to go ahead with the design of an Arduino-based controller that would offer the kind of features I was looking for :
- Measurement of air temperature in the the supply and return plenums
- Multi-speed control of the air handler motor based on the measured temperature difference between the two plenums
- Addition of a W2 (2nd heating stage)
- Addition of a W3 (3rd heating stage, provision)
- Electrical current monitoring (4x heat strips + air handler fan)
- Real-time data reporting (when a computer is connected)
- Fault modes management and integration of a limp mode in case of partial failure of the system
- Visual indication of the system status (bi-color LED)
Because of the amount of input/output I needed:
8 digital ouptuts / 4 digital inputs / 7 analog inputs
I decided to base my design on the LEONARDO board (I like the fact that's its a bit more modern than the UNO).
HVAC systems use 24VAC signaling, I did not find any shield on the market that would be close to help me interface with that so I decided to design my own. I went ahead with a simple software (Fritzing) and designed everything from scratch :
- I kept the original 24VAC transformer that send supply voltage to the upstair thermostat, which send back 24VAC on either Y O/B, G, W1, W2 command lines which interface with the controller I designed.
I added two 10k flanged, thermistors to the supply and return plenums.
I ordered 5 Seeedstudio current transformers (4x 30A for the heat strips which are rated at 20A, and 1x 5A for the air handler fan).
- A bi-color LED (green / red) is operated by a single PWM output digital line and is visible from the side of the furnace for a quick assessment of the system status.
- 8 relays (7 mechanical, 1 solid-state) are controlled by transistors, mounted directly on the board, control the high current flow
The end-result is this shield (PCB):
Which, once assembled look like this :
The Arduino board goes under (you can see the outline on the bottom left side). The 4 relays for the heat strips (240V, 20A each) have quick-connect connectors on top, consequently no current for these circulate through the board.
The 3 NO/NC relays for the fan manage the speed selection (4 available speeds) and a solid-sate relay (not in the picture) disconnect / reconnect line voltage in between speed changes as to minimize the wear on the mechanical relays (motor current inrush).
Everything has been mounted on an aluminum plate with stand-offs, all main components of the system are fused on both side :
The software has been tested and debugged, using the the "UnoArduSim" simulator, which I highly recommend !
Before installing the system I fully tested its functionality with "dummy loads" and test jigs for emulating the control signals.
I waited for a warm day, as winter is already here in eastern Canada. Final installation had to work the first time around !
I took my time, removed the old, installed the new, and voila !
You can see the heat strips in the back (which comes with a thermal protection). You can see the current transformer as well.
I wish the cabling would have been a bit more neat, but with all the fuses, and the low flexibility of the wires (AWG 10), that's how it ended up.
Switched back the breaker ON and everything was fully operational !
I'm currently in the process of tinkering the software parameters, like the temperature thresholds for the fan speed on actual data from the system.
I decided to connect the heat pump control (Y line) on W3 (which could not be controlled by the ecobee anyway) in order to by-pass the temperature-based fan control in case the heat pump is active (it's better for efficiency). The implementation of the fault modes management and limp mode is not complete yet, but basically what I want to detect is failure of the fan or a heat strip (through the current monitoring).
If a heat strip fails, I want to fall back on a limp mode and use the other functionning heat strips.
If the blower fails, everything has to stop.
Here is a run-down of the main features of the software :
- Cyclical operation of the heat strips for "equal wear"
- Temperature-based fan speed control with hysteresis, overridden when the heat pump is activated (for efficiency).
- Running average RMS current evaluation by measuring 4 samples per 60 Hz cycle. continuous timing adjustment in the main loop for precise samples spacing
- All parameters are outputted every 2 sec on the serial port if a connection is detected
- All actions are timer-based, monitoring continuously run, and multiple processes can be concomitant
- Parameters evaluation (thermistor voltage to temperature conversion, and measured voltage from the current transformer to actual RMS current) is look-up table based to minimize floating points operations
- W1 activates one heat strips (5 kW), W2 activates the three other heat strips after fixed delays (15 min and 30 min)
- Proper management of the millis() rollover after 50 days
Here is an example of the monitored data :
What I manage to evaluate from the data :
My blower capacity at max speed is ~ 1250-1300 cfm
My heat pump has a pretty good efficiency : COP = 2.8 @ -1.5 ºC
but its capacity is a bit low (5.5 kW @ -1.5ºC), while it should be closer to 8 kW (3 tons derated for the lower temperature). I'm possibly a bit low on refrigerant.