Why a radiant floor does not regulate like a radiator
This page was translated automatically from Italian. Read the original
A radiator heats the air in a few minutes: close the valve and it stops. A radiant floor is a different beast. The water flows through pipes embedded in several centimeters of screed, and the screed acts as an accumulator: after the valve has closed, it continues to heat for an hour, and after it has reopened, it takes an hour to be felt. Regulating it like a radiator works, but poorly. This guide explains why, and how to regulate the ORFHAn valves using a time-based PID controller.
The on-off thermostat, and its flaw
The simplest way to regulate a room is through hysteresis: in winter, the valve opens when the temperature drops below the setpoint minus three tenths, and closes when it rises above the setpoint plus three tenths. Until version 0.19, ORFHAn worked this way, and this is how most controllers work.
With a radiant floor, the flaw lies in the nature of the system. When the room reaches the setpoint plus three tenths, the valve closes, but the screed is charged and continues to heat: the room temperature goes well beyond that. When it then drops below the threshold, the valve reopens, but an hour passes before the floor heats up again: the room temperature goes well below. The result is an oscillation much wider than the three tenths specified in the settings, and valves that work in bursts separated by hours.
The idea: deciding how much, not whether
A thermoelectric valve is either open or closed, nothing in between. But you can decide for what fraction of the time to keep it open: 30% on a cold day, 5% on a mild day. This number, from 0 to 1, is called effort in the project. The controller calculates the effort, and a second component, the modulator, opens and closes the valve to respect it. It is the same principle as chronothermostats specifically designed for radiant floor heating.
The effort is calculated by a PID, the most widely used controller in industry. The three letters represent three contributions:
- P, proportional: the further the room is from the setpoint, the more time the valve stays open. By default, 30% more for every degree missing.
- I, integral: it accumulates the error over time and finds on its own the effort needed at steady state. It is what brings the room exactly to the setpoint, where P alone would stop a little early. By default, it works slowly, over about four hours.
- D, derivative: reacts to the speed at which the temperature changes. Here it is turned off: with a probe reading to a tenth of a degree once a minute, it would mostly see measurement noise.
In simplified form, for a room in winter (this is not the project code, but the idea):
every 30 seconds:
error = setpoint − temperature
effort = Kp × error + integral
effort = limited between 0 and 1
if effort is not at the limit:
integral = integral + Kp × error × (30 s / Ti)
The last condition is the first of the precautions.
The precautions needed on a real system
A textbook PID, implemented as-is on a radiant floor, causes damage. The corrections we had to add are four.
- The integral does not charge when the valve is already fully open or fully closed. Otherwise, after a cold night, it accumulates a huge error that then results in overshooting the setpoint for hours. This is the problem known as windup.
- The controller works near the setpoint, within half a degree. When far away, for example the morning after the nighttime reduction or in a house found cold, it lets the P work and sees if the room reaches it on its own; the integral only kicks in if it doesn’t get closer for two hours.
- When the valve is not commanded by it, for example with fixed regulation or with a dead probe, the controller tracks what is happening. When it regains control, it does not cause sudden jumps.
- Upon power-up, it starts from the usual effort for that hour, if it knows it, instead of from zero.
The timed valve
A thermoelectric head takes two or three minutes to open. Opening it for thirty seconds heats nothing and wears it out. For this reason, the modulator never keeps the valve open, or closed, for less than five minutes. A small effort does not shorten the opening: it extends the pause.
At half effort, this results in one cycle every twenty minutes, i.e., three per hour: in the worst case, about seventy maneuvers per day per relay. The zones start offset, so that for the same effort, they do not all open in the same minute. Those switching from the old controller to this regulation will hear the relays clicking every few minutes: it is not a fault, it is the valve working on a timer.
The numbers, in simulation
The controller was tested on a PC across four simulated rooms, each with its own screed, delay, and heat loss, ranging from dry panels to heavy screed, plus one “nervous” room that does not exist, added specifically to test the margins. With the setpoint at 21 °C, at steady state:
| Simulated room | With hysteresis | With PID |
|---|---|---|
| traditional screed | between 20.3 and 21.8 °C | 21.0 °C |
| dry panels, light | between 20.2 and 22.0 °C | 21.0 °C |
| thick screed, well-insulated house | between 20.4 and 21.6 °C | between 20.95 and 21.05 °C |
Raising the setpoint by one degree, the rooms reach it without overshooting by more than four tenths. A sudden cold snap of four degrees all at once does not cause any room to lose more than eight or nine tenths. With a controller one-third stronger, the nervous room still holds; two-thirds stronger and it begins to oscillate. The stock value therefore leaves margin for a real house, which no simulation knows.
Nighttime, and the two-hour lead time
Lowering the temperature at night makes sense, but with a radiant floor, you have to act in advance. If the night lasts from 11 PM to 6 AM, ORFHAn’s automatic mode shifts the temperature two hours early at both ends, from 9 PM to 4 AM: by 11 PM, the room has already started to cool down, and by 6 AM, it is back where it needs to be.
The simulation also shows when it is not worth it. On a heavy screed, which loses only half a degree over eight hours of night, the regulator exceeds the setpoint by six tenths the next day to recover. In such a house, the nighttime reduction costs more than it saves.
Effort as information
Effort has a valuable side effect: it tells you how much heat each room needs, hour by hour. The north bedroom has its valve open 60% of the time, the sunlit living room 25%, and both more at six in the morning. The project tracks this trend for every room, in two-hour blocks, and uses it when a probe stops communicating.
The idea is simple: “usually at this time the bedroom is open 40% of the time; today the other rooms are working a quarter more than usual because it is colder; therefore the bedroom needs about 50%”. In the simulation, with the bedroom probe going silent just as the cold arrives outside, with the valve closed the room drops to 10 °C, repeating the usual effort it reaches 15.7 °C, and with the estimate it stays at 19.3 °C out of 19.5. In summer, however, without measurements, the valve simply closes: cooling a floor without anyone measuring the humidity leads to condensation.
What is proven
- Everything in this guide is proven on a PC, using simulations and automatic checks on the controller, automation, and effort estimation code.
- It has never been proven on a real system. The simulated rooms show that the mechanism does what it is supposed to do, not by how many tenths of a degree it will be off in a real house.
- The three controller parameters are changed in the firmware configuration, and from the board page, you can return to hysteresis at any time.
A piece of advice for anyone tuning a floor, with any controller: after a change, wait at least half a day before judging its effect, and do not make two changes at once, otherwise you won’t know which one worked. The controller code and the tests are in the ORFHAn repository.