A Modular Central Heating System Controller - Arduheat

Hi everyone,

For several years I have made plans to build and program my own controller for our central heating system and now we are on the brink of achieving it. In the end there should be a modular system that optimally controls the heating process and exposes its data and steering parameters to a website or an android app.

We have a central heating system at our home that uses thermal solar collectors and a condensing gas boiler as heat sources to heat up a hot water storage. Then the warm water and the rooms are heated by the system as needed. Each of the rooms has a temperature sensor and can be steered by a valve. In principle this should be true for about any central heating system. Other than that there are several temperature sensors, pumps and valves that monitor and manage the core of the central heating system (sources and storage). The number of rooms and the detailed setup of the core heating system will most definitely differ for different central heating systems.

The basis of our efforts is an Arduino Mega 2560. As even the Arduino Mega does not have enough analog input channels to read in the temperatures of all rooms, we are using a self designed shield that is carrying multiplexers. In order to take fully advantage of the resolution of the Arduino's ADCs we are employing a circuit with opamps (operation amplifiers). It stretches the fluctuation of the temperature sensor signals (2-3V) to the complete input range of the ADCs (0-5V).

The schemes of the circuits and the shield are modeled using fritzing and will be put online soon. Whereas the code of the project is hosted on github:


The current state of the project is that all the hardware interfaces are working and a very basic control for the warm water is implemented. Beware that the project is under heavy development and that it is not yet a full replacement for a heating system controller.

What do you think about the project and what are your ideas about necessary features for a heating system?

Cheers, Thomas

What temp sensors do you use?

This looks really interesting - I'm trying to do the same thing, but you are way,way ahead of me.

I'd like to know in addition to the temp sensors what other valves, pumps etc you'll be using.

For a commercial system I guess you'd have to use PT1000s which fit into the immersion wells in the solar collector and heat bank/hot water store. I failed with them and am using pipe and surface mounted 1Wire sensors instead, so would have to pump the solar every so often to see if it is warmer than the storage tank, but that's another story.

I'm aiming to develop a webpage set out like a P&ID / power station control room display - showing live temps, setpoints, valve positions, pumps etc, and be able to change settings. I am a long way off though...

Although if designed for an average domestic user, I guess just a nice simple GUI for info and settings on the web or smartphone - or maybe have a geek mode and a normal mode?

And depending on how far you go, I guess you would have limited user rights accounts - so you can give a guest staying at your house the app for their phone, to allow them change the settings for their room, but not the rest of the house.

Logging and displaying other inputs is also on my list - outside temp, a solar index of some sort, gas and electricity consumption relating to the heating system.

Are you planning some kind of LCD driven control also, in case of network failure?

Anyway, it looks very cool and looking forward to seeing more of your system.

I will be able to give you exact details about the temperature sensors on sunday evening, right now I don't have the datasheet upon me. What I can tell you though is, that the sensors are pipe mounted rtd s and have a resistance of 2 kOhm at 25 degree celsius. In order to measure the temperature, the sensors are installed in line with a 2kOhm resistor between 0 and 5 V and the voltage drop over the sensor is measured. Not necessary but a nice feature: A circuit with operational amplifiers is then used to stretch the voltage output to the input range of the arduino, in order to exploit the full resolution of the analog inputs. Why didn't the pt1000s work for you?

As of the rest of the pumps and valves and so on, they are all 20 years old, but I can give you the specification though on Sunday. The whole system was created by an enterprise formerly known as Sandler Solar and is still operational and working. At the time the system already shipped with a small lcd display and a nice scheme of a house with leds indicating which rooms were actively heating!

We are trying to create our own controller, because the enterprise/its successor is not selling our type of system anymore and after all those years it is probably a matter of time until something breaks that cant be easily fixed anymore.

In the first place, we want to be able to run the heating system headless with hardcoded setpoint temperatures. But in the end I want to have at least a web interface just like the one you are describing! It would also be interesting to maybe integrate the heating system into an open source home automation suite like http://fhem.de/fhem.html

As the project is kind of a hobby, it is progressing quite slowly, but steady. I have already written a significant amount of documentation and will try to upload it to the wiki on the github page when I got more time.

So let's keep in touch - and I wish you great success with your attempts to build your system!

Very interesting project! If you want take a look to another open source domotic software as another alternative. The link is freedomotic.com Bye

I had pt1000s hooked up on the bench, multiplexed and amplified etc, but I just couldn't get them calibrated properly or working anything like reliably. All due to my inability rather than anything else.

1Wire is so simple in comparison, but not a long term solution, so I will have to get the PTs working at some point in the future - so I will watch your system with interest!

The temperature sensors we are using are Infineon kty 16-6 ones. See also the datasheet: http://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CEAQFjAB&url=http%3A%2F%2Fwww.infineon.com%2Fdgdl%2Fkt_Kty_DS.pdf%3FfolderId%3Ddb3a30431689f4420116a096e1db033e%26fileId%3Ddb3a30431936bc4b01199f674c7e61fd%26location%3D.en.product.findProductTypeByName.html_dgdl_kt_Kty_DS.pdf&ei=MexoT8ehAYzO4QTIzuGICQ&usg=AFQjCNH3w8Irby0R0qkA1r6LN_dbNLjYXw&sig2=3C8E3POikzBpYeMtk5pX2Q

We have had the same issue with our tempsensors, not beeing able to calibrate them. Our problem was due to the fact that the internal resistance of the multiplexers is heavily depending on the voltage applied to the channels (nonlinear). The solution was then to supply the multiplexers with a higher supply voltage (15V instead of 5V), because the resistance is much more stable (constant) for those voltages (we saw it in the datasheet). In order to be able to switch the multiplexers we also needed to apply a ttl to cmos converter. Finally I have set up a program that calculates the temperatures under consideration of the amplification circuit (calculated), the multiplexer resistances (measured) and the characteristics of the temperature sensors (out of the datasheet) and ended up with quite good results (+-3 degrees celsius without calibration or further tweaking).

I will upload a description of the circuits and the links to the respective parts of the program when I have more time.

-> freedomotic looks very promising! I will put it on my agenda and have a closer look some time. ]:D

why dont use DS18B20 temperature sensor? They do not need any calibration, just a few single-conductor sensors.

I can strongly recommend DS18B20. At dx.com you get them with a stainless steel housing: http://dx.com/p/water-proof-ds18b20-temperature-probe-90cm-142889

I have had 8 of them in one line so far without any troubles...

BR, ar

I sometime see that this sensors perform missreading, have you seen this same problem? my data is stored in a database so every single piece of data is important. I have done some code testing to detect and avoid this wrong values. have you had same problem? solution?

I'd certainly consider the DS18B20, solves all the problems with the analogue inputs, and allows the addition of extra sensors with relative ease (a coding exercise rather than a hardware one)

I would definitely recommend the DS18B20 Temp sensors - i have a system very similar to what you describe but completely built using the PICAXE range of microprocessors. I have just undertaken to move this to the Arduino environment.

I have been using the DS18B20 Temp sensors for about 5 years now and they have been brilliant - i have had two failures (from poorly built waterproof housings that i made) out of 12 units in 5 years.

Their accuracy is outstanding. If you are worried about them - then deploy two in each location and sanity check the readings from both against each other and create a weighted average.


Hi Thomas,

Do you have any news about your project? You promised a schematic some time ago.

Best Regards