Thursday, January 02, 2014

Hacking a Pellet Stove to Work with Nest


I live in a yurt heated with a pellet stove, specifically a Quadra-Fire Santa Fe. I've grown to have a serious dislike for pellet stoves because they're so fussy, require constant attention and baby sitting. I was excited to find that there are pellet stoves that can light themselves and are controlled with a regular old thermostat. That's why I bought the Santa Fe: freedom from having to turn the thing on and off.

Unfortunately, the reality is not so simple because of this switch:


Even though the stove lights itself, I still have to select High, Medium or Low manually. I can't just set it on high and leave it alone, it has to be constantly managed based on the the outdoor temperature. If it is too warm, having the stove on high means that it cycles on and off frequently. That translates into inefficient pellet burning and a premature accumulation of ash and “clinkers”. If it is set too low, then it doesn't keep up with the changing temperatures. The switch ends up having to be changed several times per day as the conditions change.

So the automation offered by the thermostat really isn't a complete solution. There are are so many manual adjustments that must be made, the thermostat doesn't really help much.

If I open the control box of this pellet stove, I can see that the high/medium/low switch is just a standard SPDT center off switch. In otherwords, given poles A, B and C, high is when AB are connected, low is when BC are connected and medium is when there is no connection at all between the wires. I could easily do that with a relay.

Then I was introduced to the Nest thermostat and its ability to handle three stage heat. If I could fool the Nest into thinking that this pellet stove was a three stage furnace, I could get Nest to run the pellet stove in a far more automated manner than I have been able to achieve.

In my dissection of the pellet stove, I see that the high/medium/low switch has three wires: Yellow, Orange and Blue. Three stage heat for a thermostat is a three wire job, too: W1, W2, W3. I need a way to translate the three wires of the thermostat into the three wires of the pellet speed control.

However, before I begin this project I have several goals in mind:

  1. automate the selection of pellet stove feed (high/medium/low)
  2. no matter what changes happen to the stove, there must be a single switch to restore it back to its original dumb manual operating mode.
  3. any additions to the stove must be completely electrically isolated from both the thermostat and the pellet stove.
  4. no error state can cause damaging behavior to any other component
  5. don't burn the yurt down

The first thing to do is start with a logic table. Given a set of inputs, what are the outputs that I want? This defines the premise of the project:

  • W1, W2, W3 are the three control wires coming in from the thermostat
  • PSW is the original pellet stove thermostat white wire input.
  • Bl is the pellet stove internal blue wire – engergized means run the stove on low
  • Or is the pellet stove internal orange wire – energized means run the stove on high


InputOutput
W1W2W3PSWBlOr
0000XX
0010XX
0100XX
0110XX
100110
1011XX
110100
111101
PSW = W1
Bl = ~W2~W3
Or = W3
  • “0” in this table means voltage is off
  • “1” means voltage is on or high
  • “X” means I don't care. While I have three input lines, not all of the possible combinations can happen. So I don't care what the output is for the undefined input states.

From this table, I can see that PSW follows the same state as W1. Since I want electrical isolation, I will use Relay 1 to translate the Nest first heat stage into the “call signal” that will start and stop the pellet stove.

Bl gets power only when W2 and W3 are both off. I assign Relay2 to W2 and Relay3 to W3. Bl gets power from the pellet stove's internal Yellow wire. I can feed that first into the Relay3 switch 1 and then into Relay2 switch 1. When either of those relays is energized, power will be interrupted to Bl and Bl will be in the “off” state.

Or should get power only when W3 has power. Or gets its power also from the pellet stove internal Yellow wire. Since it is already going into Relay3 switch 1, I can just assign it to the other leg of the switch. This also ensures that Bl and Or can never be on at the same time.

This translates into this schematic:



In this schematic, R1, R2, and R3 are relays 1, 2 and 3 respectively that pass the signal from W1, W2 and W3 to the pellet stove.

The "manual bypass switch" is my failsafe.  Flipping this switch into the position shown reverts the effects of my internal changes to the pellet stove.  The stove goes back to start/stop controlled by the thermostat, and the power level controlled by my index finger in conjunction with that infernal high/medium/low switch.
 
In turn, my implementation of the schematic looks like this:



This project is in progress.On the first test of the system, the Nest  recognized the system as a three stage heat source, but did not run it correctly. It started heating with Stage 1, but then jumped to Stage 3 without first passing through Stage 2.  I lost a lot of time speculating as to why it would do that.

Here's the Nest starting the heating.  The indoor temperature was 70℉ and the goal was 72℉.  The outdoor temperature was 39℉:



Here's what Nest had commanded fifteen minutes later.  The indoor temperature was now 68℉.  We'd lost ground trying to heat on Level 1.  Nest then skipped directly to Level 3. 



It never seemed to want to try using Stage 2.  In my research, I'd noticed that sometimes Level 3 head is called "Emergency Heat".  Perhaps the Nest had recognized that it was losing ground and it took drastic action.  Drastic action was the only thing it ever did.  Perhaps the the air temperature in a yurt is just too volatile for the Nest to understand and it panics.  All heating in a yurt is an emergency.

Unfortunately, that behavior was pretty degenerate as it was little different than running with a normal single stage thermostat.  However, since the Nest was in "learning mode", I decided to give it a chance to prove itself.  I'd give it a week to learn what to do.

Meanwhile, I'd keep hacking.

Here's a gallery of photos of the modifications to the stove:


Eight Days Later :

After a little more than a week of running the stove poorly, I got frustrated.  I had studied and studied my schematic.  I checked the circuits with a voltmeter, an ammeter and a divining rod.  It was all correct, yet it just didn't work right.

I started to plan a new phase for this project: a finite stage machine constructed with 5V TTL logic.  Why not mix some 1970s tech into my 1950s electromechanical invention and twenty-first century thermostat.  I got excited about the project and starting logic diagrams when I was distracted by a sound.  It was the sound of the pellet stove running on Level 2.  

The last time I had heard that sound was when I last ran the stove manually.  I watched carefully for 15 minutes and saw it progress through the stages correctly.  I got out a video camera so I could record several hours of activity and then review it.

Lo and behold, it was working perfectly.  Suddenly, the nest was saying, "I grok this furnace, I know what to do".  Just like the Nest manual says, waiting a week before judging its behavior will yield rewards.  I'm impressed.  I'm excited.

I'm disappointed that the TTLFSM project is cancelled.  What other problem in my life could I apply TTL logic to?