tophee / FTXcontrol-Shield

An Arduino shield for controlling the FläktWoods RDKR ventilation unit
MIT License
1 stars 0 forks source link

Controlling the rotor #1

Open JonETJakobsson opened 2 years ago

JonETJakobsson commented 2 years ago

One issue with the Rdkr that I'm having is that the heat exchanger (rotor) gets stopped when the outdoor temperature gets close to the set inlet temperature. This is all fine on cold days, but on hot days this means that the outdoor air gets ventilated directly in without cooling it first using the exhlust air.

I would like to start the rotor manually (using the arduino) when the outdoor temp differs more than say two degrees from the set indoor temperature.

Did you find a way to control the rotor when hacking your Rdkr?

tophee commented 2 years ago

First of all, thank you for confirming my hypothesis that even though this is an extremely niche and nerdy project, someone eventually will find some use in me posting it on GitHub. :-)

As for your question: In my setup, your problem with the hot summer air heating up the house is solved in a different way, namely by turning off the ventilation (= away mode) when it's warmer outside than inside. I think that is the better solution (which can even be achieved manually by pressing the button on those few days) because even if the rotor would cool down the outside air somewhat, the incoming air would still be warmer than the inside air, thus still bringing heat into the house.

But your question about controlling the rotor reminds me of something I've had on my to-do list for a while now: I also want to control the rotor, but not so that the Arduino turns it on when the RDKR wants it off (which is difficult to achieve) but so that the Arduino turns it off in certain scenarios where the RDKR wants it on (which is rather easy to achieve).

The problem that I intend to solve is the following: currently, on hot days, my Arduino works so that once the outside temperature drops X degrees below the inside temperature, it sets the ventilation to high. So basically, it blows in the cool air at night in preparation for the next hot day. The problem is that if the outside temperature at night falls below the 15 degrees or so, the RDKR turns on the rotor because the incoming air is colder than the set minimum (I think the default setting might be 17 degrees, but I set it to the lowest possible, which I think was 15).

So, the RDKR works against cooling down the house precisely when this could be done quite effectively thanks to the cold night air. To fix that, I want the Arduino to keep the rotor off after a hot day, even if the RDKR wants to turn it on. To achieve that, I'd simply add a relay to cut the power going to the rotor. Normally, the relay would be on, but if the Arduino turns it off, the RDKR can do whatever it wants, but the rotor will remain off. :)

While cutting a circuit is obviously rather easy to achieve, I would't quite dare to add an additional circuit that could power the rotor when the RDKR has turned it off.

JonETJakobsson commented 2 years ago

Always glad when people have been thinking about these things, and posting it on github is a sane thing to do, and highly appreciated =)

When I set the inlet and outlet fan speeds to the minimum (potentiometer as low as possible), they are still spinning, so putting the unit in away mode will still pump some heat in during the day (that's why I pulled the plug today as it is 32°C). Running the rotor during this low setting could decrease the energy loss from the AC with 85% and would still provide some ventilation.

Did you manage to fully stop the fans via the door swc or will it only cycle though the modes? Will keeping the connection closed shut down the fan (would expect a door switch to do this to keep fingers safe)

Cooling the house during night sound like an interesting idea. I would be careful going to low in temperature however to not get condensation on the ducts. I my house the inlet ducts are not insulated inside the house. If you could control the rotor however (properly by changing the speed) you could slow the rotor down enough to get around 15-16 degrees on the inlet air and speed it up during the colder parts of the night to keep the inlet air above the condensation point. Using your temperature and humidity sensors I guess you could calculate the condensation temperature. This could cool your house safely.

I'll keep you updated if I managed to control the rotor somehow!

tophee commented 2 years ago

The ventilation in away mode is extremely slow so that I consider the heat transfer on that setting negligible. I also think its a good idea to have a minimum degree of ventilation even during the hot days. I have not installed the CO2 meter yet, but guess that the inside air quality deteriorates somewhat on those hot days even with the ventilation in away mode. So I never considered turning the ventilation off completely.

I have also not touched the fan speeds at all as I believe it is a rather complicated process requiring special tools to measure to set these correctly (so that the pressure difference between inside and outside is correct).

I just looked at the measurements over the past two days and decided that tonight I will also pull the plug. But not the plug for the RDKR, only for the rotor. I want it to remain off the whole night, cause look at how it's preventing the cold night air from coming in:

image

Well, actually not last night, it was too warm, so the rotor remained off, but the night before (between about 3 and 5).

Okay, I admit that those two hours probably wouldn't have made a big difference (and the week before, it was similar short periods where the rotor kicked in). I guess that's why that project of adding rotor control to the Arduino shield hasn't been a high priority for me...

Thanks for pointing out the risk of condensation. I didn't think of that. I think that explains why the manufacturer wont allow you to set the minimum incoming air temperature lower than 15 degrees even during summer. 25 degree air with 55% RH has a dew point of 15 degrees...

I like the idea of controlling the rotor speed to nevertheless maximize the use of the cold night air, but I think the effort of accomplishing that is probably to high (I believe by default, the rotor always runs at the same speed, so there'd be quite some extra hardware needed). Curious to see what solution you might come up with.

I'll test "rotor off" manually for a couple of days (electric pre-heater turned off as well, of course), to see if it makes any measurable difference. I'll probably have to wait until August, though, since the remaining nights in July I forecast to no colder than 15 degrees...

JonETJakobsson commented 2 years ago

So nice with temperature logging! Will have to implement that even if I cannot control the rotor.

The efficiency of that heat exchange is quite good when the rotor is running. Having that always on would provide quite the temperature inertia.

I'll keep you updated on the progress

fragande commented 4 months ago

I realize this thread is almost two years old at this point, but I just wanted to ask if either of you made any further progress on this. I was really surprised to find this on GitHub of all places 😄 Massive respect for taking the time to document it. I'm currently messing with the successor to the RDKR: the RDKS, which seems to be very similar but has a couple of extra features.

I'm having the same issue with heat regeneration in summer always triggering when outside temperature drops below 15°C. Last summer it nearly killed me and I had nights with 26-27°C supply air coming out of the air ducts indoors ... I had to cut power to the FTX unit at night because not even setting fan speed to lowest helped.

Not having a variable speed heat exchanger rotor really, really sucks.

To achieve that, I'd simply add a relay to cut the power going to the rotor. Normally, the relay would be on, but if the Arduino turns it off, the RDKR can do whatever it wants, but the rotor will remain off. :)

I was also thinking of going this route but the issue is that the control board expects a tacho signal from the rotor when it's activated. Did the RDKR not have this? If there is no tacho signal the unit will try to power cycle the rotor 5 times, then the whole unit shuts down and a rotor alarm is triggered.

I was thinking that you could maybe spoof the tacho signal using an ESP32 and set up a HomeAssistant automation to activate it whenever outside temperature drops below 15°C. Then manual control of the rotor using a 230V relay should be possible. That would mean analyzing the tacho signal somehow would be needed though.

Another (very crude) idea I had to control the rotor indirectly would be to get another thermocouple, use that instead of the current outside temperature thermocouple and route it outside of the unit in room temperature. Then simply attach it to a peltier module and use that to "set" the temperature below 15°C when needed to activate the rotor. With some insulation it shouldn't be horribly inefficient to achieve. The 15°C limit really only works as a on/off switch anyway to there's no need for accuracy, it just needs to be lower than 15.

tophee commented 4 months ago

@fragande I have not worked on this. At this point, I'm not sure whether controlling the rotor programmatically is worth the effort. During hot periods, when I want to make sure that the rotor doesn't bring any heat back into the house, I manually disconnect the rotor entirely.

I'm glad I haven't tried implementing my idea, because I'm it would probably have taken me a long time to figure out that the control board expects a tacho signal. Thanks for letting me know!

But then again, wait, since the unit still works when I manually pull the plug for the rotor, there may not be any tacho signal in the RDKR. It's not mentioned in the manual either. O, maybe I'm lucky to have the older model.

It's weird that FläktWoods doesn't seem to be bothered by the heat problem. Even if those hot days are still few in Sweden, you would think that the unit would be constructed to at least not make the heat problem worse...

I was thinking that you could maybe spoof the tacho signal using an ESP32 and set up a HomeAssistant automation to activate it whenever outside temperature drops below 15°C.

I'm not sure I would want to make the unit depend on another system (apart from the Arduino). So, for me that would have to be done on the Arduino (or maybe on the additional ESP32, but not on HomeAssistant. Spoofing the signal also requires additional knowledge about what kind of signal the board expects.

Your second solution sounds kinda fun precisely because it is such a crude workaround. Setting the temperature via a peltier module wouldn't have occurred to me. I have no idea how much energy that would use, but it would have to be extremely low for me to consider it viable. So maybe spoofing the signal is the cleaner (but probably still cumbersome) way to go.

Let me know about any experiments you might engage in.

fragande commented 4 months ago

@tophee If you can disconnect the rotor manually it must mean that the older RDKR hasn't got the same tacho signal monitoring. In the RDKS this sets off an alarm and shuts the unit down after 5 retries.

It's weird that FläktWoods doesn't seem to be bothered by the heat problem. Even if those hot days are still few in Sweden, you would think that the unit would be constructed to at least not make the heat problem worse...

I agree. The only explanation for this hard coded 15°C limit I can think of is the condensation risk. I get that it's a low cost unit, but I can't help but wonder if having a variable speed rotor motor would increase the price by that much.

I'm not sure I would want to make the unit depend on another system (apart from the Arduino). So, for me that would have to be done on the Arduino (or maybe on the additional ESP32, but not on HomeAssistant. Spoofing the signal also requires additional knowledge about what kind of signal the board expects.

It's new territory for me, but I've ordered a basic oscilloscope to analyze the signal. Hopefully it's easy to replicate with something like the ESP32 DAC or PWM output. If it would fail at any point the FTX unit would just shut down so operation isn't critical. I could easily monitor this with something like a smart power plug with energy monitoring as the unit is connected to a normal wall socket.

When I think about it an easier approach might be to just output a spoofed signal all the time, but I don't know how the controller board will react if it receives a tacho signal when the motor is supposed to be off. It might not matter.

Your second solution sounds kinda fun precisely because it is such a crude workaround. Setting the temperature via a peltier module wouldn't have occurred to me. I have no idea how much energy that would use, but it would have to be extremely low for me to consider it viable. So maybe spoofing the signal is the cleaner (but probably still cumbersome) way to go.

Yeah spoofing the tacho signal is definitely the cleaner solution. Peltier would be a last resort.

In my case I'd either have to run my portable AC in cooling mode (with FTX + heat regeneration on at night when <15°C outside) or dehumidifier mode (with FTX off) to control humidity together with some fans to create some air circulation, so in comparison to that the peltier power consumption would probably be negligible.

This is just me rambling about my RDKS unit though, sorry 😄 Ideally there should be an option to retrofit these units with variable speed rotor motors, that would solve all issues.

tophee commented 4 months ago

It actually makes sense that they added the tacho signal monitoring. When the belt for our rotor became loose some years ago, the only reason I noticed that the heat exchange wasn’t working anymore was that I happened to check the energy consumption via a smart plug and noticed it was way too high (because the heater kept going on to bring the incoming air temperature up). In the RDKS this would have triggered the alarm right away. - I don’t want to know how many RDKR owners have a defect rotor belt and don’t know about it…

And, yes, 15° to prevent condensation also makes sense in general but I don’t see how a couple of hours of lower temperatures per day after a hot day would cause problems, especially when the ventilation runs at high speed, as it does in my case when its hotter than 25° inside.

JonETJakobsson commented 3 months ago

I'm hoping that it would be possible to "spoof" the inlet air temp signal to fool the system that it actually is colder then 15C, when the inlet air goes above a set temperature. In that case, when we get 25C+, the rotor starts exchange the heat and we keep the cold air in the house. My rotor draws 14 watts, so to not run it to save energy (I quess that is the reason, because we have no condensation issues running the rotor when it is hot outside) feels short sighed, as the AC draws allot more to compensate.

How would you go about spoofing the signal?

fragande commented 3 months ago

It actually makes sense that they added the tacho signal monitoring. When the belt for our rotor became loose some years ago, the only reason I noticed that the heat exchange wasn’t working anymore was that I happened to check the energy consumption via a smart plug and noticed it was way too high (because the heater kept going on to bring the incoming air temperature up). In the RDKS this would have triggered the alarm right away. - I don’t want to know how many RDKR owners have a defect rotor belt and don’t know about it…

And, yes, 15° to prevent condensation also makes sense in general but I don’t see how a couple of hours of lower temperatures per day after a hot day would cause problems, especially when the ventilation runs at high speed, as it does in my case when its hotter than 25° inside.

I agree, the tacho signal monitoring makes a lot of sense but it sure is a a PIA when trying to disable/control the rotor.

I'm hoping that it would be possible to "spoof" the inlet air temp signal to fool the system that it actually is colder then 15C, when the inlet air goes above a set temperature. In that case, when we get 25C+, the rotor starts exchange the heat and we keep the cold air in the house. My rotor draws 14 watts, so to not run it to save energy (I quess that is the reason, because we have no condensation issues running the rotor when it is hot outside) feels short sighed, as the AC draws allot more to compensate.

How would you go about spoofing the signal?

I'm not sure about the RDKR but on my RDKS unit with ISYteq Touch 3.5 control panel there is a setting for "cooling recovery", i.e. running the heat exchanger if outlet air temp is x °C below inlet air temp. This works well during the day, but at night when outside temp drops below 15°C it will still start recovering heat instead.

As for spoofing the inlet air temp signal I don't know, intercepting and modifying the values from the thermocouples seems quite complicated. I'm not sure how you would tackle things like probe calibration for example. In my case I'm only looking to spoof the tacho signal from the rotor to be able to cut the power to the rotor when I want. The only idea I had for "spoofing" the thermocouples was the peltier route as I described above.

JonETJakobsson commented 3 months ago

I will check what type of temperature sensor the Rdkr is using. I should be able to lower the resistance using a paralell resistor. This might be enough to fool the Rdkr that the outside air is 20-15c lower than the real value. Maybe this parallel resistor can be connected using a transistor controlled by an arduino so to only fool the system when the outside temp is high.

tophee commented 3 months ago

RDKS unit with ISYteq Touch 3.5 control panel there is a setting for "cooling recovery", i.e. running the heat exchanger if outlet air temp is x °C below inlet air temp. This works well during the day, but at night when outside temp drops below 15°C it will still start recovering heat instead.

Oh, wow, so they did actually start thinking about that. Strange, though, that they didn't consider the night-time recovery scenario. The only way I can understand that is that it's, once again, about condensation risk. If those vent ducts are colder than dew point of the surrounding air, water will accumulate wherever those ducts are. You could, of course, monitor the dew point and adjust the threshold dynamically, but since we don't have measurements from the air outside the ducts (and in our case that would have to be measured in the attic as well as inside the house), there is no point , really, and I can see why they chose a fixed value.

@fragande Does it make a noticable/measurable difference to have the heat exchanger on during hot days? I guess it depends on how cold the inside of the house is. If the house is already heated up from previous hot days, there is not much coolness no cool down the incoming air...

I became a bit jealous when I read about that new feature in the RDKS, but as I think more about it, I realize that even though the incoming air is cooled down, it will still be warmer than the inside air. So the house is still being heated up, just slower. I don't know how much better that is than setting the ventilation to "away" mode, i.e. minimal air exchange. It is better in terms of air quality (bringing in fresh air), obviously, but in terms of temperature regulation, I'm not sure. What do you think?

I will check what type of temperature sensor the Rdkr is using.

I'm pretty sure it's a DS18B20.

Maybe this parallel resistor can be connected using a transistor controlled by an arduino so to only fool the system when the outside temp is high.

That sounds like an excellent hack!

Or you could use a potentiometer and control that with the Arduino!

@JonETJakobsson If you make any progress on this little project, please share. I think that might also work as an alternative to spoofing the tacho signal in the RDKS (i.e. instead of tricking RDKS into believing that the rotor is still on when you turned it off, you trick it into turning it off).

Manipulating the temperature sensor means, however, that we also have to handle the condensation risk, somehow. Just to keep that in mind.

tophee commented 3 months ago

It's one of those hot days today, so I did a little test to see what happens when the rotor is plugged in or not. CleanShot 2024-05-25 at 14 57 23@2x

If I remember correctly, the first vertical blue line, indicates when I plugged the rotor back in (had it off for a couple of weeks now). In order to get some airflow going, I had to manually set the ventilation to high (because my FTXcontrol wants it on low), so that's what the second line indicates. The the third one is when I disconnected the rotor again, and the third when I turned the ventilation back to low.

Note the following when reading the graph:

What I learn from this

One caveat, though: if we force the rotor on by lowering the reported temperature below 15°C, this will most likely trigger the heater to go on to heat the incoming air. So the heater needs to be disconnected.

JonETJakobsson commented 3 months ago

I'm pretty sure it's a DS18B20.

When I search for this sensor it seem to be a digital temperature sensor. Maybe I'm getting products using this thermistor as a component?

I measured the resistance of the outside air thermistor and the inlet air thermistor. They were both at 10kOhm @ 22C. I then used a bag of frozen vegetables to cool the probe to -7C and the resistance change to 32kOhm. This a coefficient of change of -0.75kOhm/C.

To fool the circuit I would need to set the resistance to around:

10kOhm + (15C-22C) * -0,75 = 15,25kOhm.

I found a MOSFET which I could control pretty good around 1-100kOhm using 1,9V to 2,3V on the gate. I'm hoping a can do a "man in the middle" and read the true values from the thermistor and then control the resistance that the KDKR gets using the MOSFET.So I then supply the correct values when the temperature is lower than 23C and around 15C (which gets the rotor to spinn) when the true value is higher than 23C.

Will post some results when I've gotten time to try this. Looking forward to it, was a long time ago I played around with microcontrollers =)

JonETJakobsson commented 3 months ago

One caveat, though: if we force the rotor on by lowering the reported temperature below 15°C, this will most likely trigger the heater to go on to heat the incoming air. So the heater needs to be disconnected.

That is true! good point! My unit does not have any heaters so did not think of this.

JonETJakobsson commented 3 months ago

I thought I would send an update of how it is going.

My initial idea of using a MOSFET was scraped, as I would like my circuit to be galvanically isolated from the RDKR board. So, I started to use an optocoupler (phototransistor type which I had at home). However, I was unable to get any stable resistor values over the phototransistor.

Currently I'm experimenting with a homemade Vactrol (LED + a light sensitive resistor (LSR)). This setup is ideal, as it would provide a stable resistor value, like the thermistor the RDKR expects. Just putting the LSR next to the LED in a dark enclosure (as all DIY tutorials suggest) does not provide fine enough tuning at the 5-30kOhm range, as this is in the very beginning of the LED turning on. I would rather have the LED at least 20% intensity before hitting 50kOhms. I'm experimenting with 3d printing out a holder in white PETG to disperse the light more and set the LSR at a specified distance. As LED lights change their internal resistance a lot depending on temperature, I cannot be sure I will get the light intensity I am expecting from a given PWM signal. So, I'm designing the Vactrol to have two LSR at symmetrical positions around the LED. In this way I can measure the resistans of LSR1 and adjust the LED PWM to hit my target resistance, and hopefully get a more correct resistans on LSR2 (connected to the RDKR).

To prevent condensation on the inlet air ducts during evening/nights, I was planning to measure the temperature and humidity in one of the wettest rooms (laundry room) and calculate the dew point continuously. This could then be set as a limit (+ a safety margin) to start the exchange rotor. This routine would only be active if the indoor temperature is above a set temperatur (like 23C).

This design might very well change as I've already lost some hair to these finicky resistance values...

tophee commented 3 months ago

@JonETJakobsson Before you get lost in trying to set the resistor value automatically, have you verified (perhaps with a trim potentiometer or simply a fixed value resistor) that you can indeed control the rotor that way proof of concept, basically)?

JonETJakobsson commented 3 months ago

@tophee No I have not. Give me a sec =)

Good News! It works like a charm! At 10kOhm (around 22C) the rotor received 0 current. adding 4.6kOhm in series corresponding to around 16C instantly started to rotor. 😅

JonETJakobsson commented 3 months ago

I have run the mod on the RDKR for two days now, and it does work. However, I noticed that when the rotor started running when the fresh air was above 23C, the return air was even hotter (around 25-26C). This is because the house was already heated up from previous weeks of remarkably hot temperatures. Furthermore, the return air is taken from the ceiling.

I have ordered some DHT22 modules that can measure temperature and humidity. I plan to measure all 4 ducts so I can measure efficiency etc, but more importantly, I want to know the return air temperature so that I can make better judgements calls of when to start the rotor.

I will start a repository with the scematics and code later on and post a link here =)

tophee commented 3 months ago

Cool! So, you are saying that you can indeed control the rotor by manipulating the temperature reading of the RDKR via a resistor?

JonETJakobsson commented 2 months ago

Yes @tophee, that work indeed. I had to solve the issue of reliably setting the resistance by having one led and two photoresistors. one as output and the other as a reference. I make a calibration sweep so that I know the relationship between the two resistors. The DHT22 sensors really improved the decision making in the code. I made the whole setup into a MQTT device that is automatically discovered by homeassistant, so it is easy to log all data and to visualize it. image

I will make a repository when I have time with the full documentation and code. So glad it is working now as it was quite hot in Uppsala this week.

tophee commented 2 months ago

Cool! It looks like there is a significant (relative) cooling effect during the day. The ultimate question would be whether the total amount of heat energy brought into the house with your setup is less than with mine, i.e. with the rotor simply turned off all day and the ventilation on low during the day.

Of course, if you’d also set ventilation to low, you’d minimize the heat transfer, but I’d see the benefit of your solution in the fact that inside air quality will not suffer, so the question is how much heat is being transferred.

I don’t have the time right now to find the right formula to solve this puzzle, but the RDKR can do between 20 and 65 l/s (I’m not sure whether the low setting will reduce airflow to less than 20 l/s but I would assume 10 l/s or even less. According to the measurement report from when it was installed, it runs at 45 l/s…

tophee commented 2 months ago

OK, couldn't stop myself from looking this up. I haven't verified this yet, but it looks like the amount of energy container in a given volume of air at 25 degrees compared to to the same volume at 30 degrees is very small, much smaller than the factor 4 that would be needed to outperform the reduction of the air volume to a quarter...