Pressure-less solar collector controller prototype

It’s been over three months since the solar collector was installed. I decided to build a controller by myself. And it turned out that it stayed in the prototype stage. So I put it into the enclosure and left it like is. So far, it works fine – water is hot every day, so I have nothing more to expect. I did not capture enough pictures of the build, but I think I will share what I have.


In the forum thread, you probably saw what type of system I was building. As I mentioned, the solar collector is cheaply made in China and is pressureless. They usually come with a unique controller which takes care of the refilling tank, ensuring protection from water freezing and other individual scheduled routines. A pressureless collector usually is first filled with water which heats, and then it is used (mixed with cold). The initial test shows that when the collector is in direct sun, it boils what leads to heater elements’ calcification. Overall lifetime reduces and so efficiency.

So my solution was to build hot water circulation into another boiler tank installed and used as the main hot water supply. The circular pump forces hot water to flow and heat secondary boiler water. This gives two benefits – water in the collector never boils, and we solve water pressure.

Once the piping is done, the next step was to build the controller. As I mentioned, it is a makeshift prototype. The base is made on Arduino Duemilanove with an LCD keypad shield. It solves a user interface problem. The controller measures two temperature values using DS18B20 – one from the solar collector and one from the boiler. If the solar collector water temperature is higher than the secondary boiler, then the pump is turned. So the heat is carried in but not out.
Another issue that had to be solved was keeping collector water at some level. It can hold up to 100 liters of water. So I built a simple three-level water sensor. It’s three conductive rings on an isolating tube.

A simple transistor key circuit helps to get logical values to Arduino digital inputs.

To reduce corrosion of sensor electrodes, Arduino turns on the power supply only for a short period of time – while reading is done.

The whole water level sensor signal conditioning circuit along with temperature sensors:

According to sensor readings, if there is insufficient water in the tank, Arduino opens the water valve with a relay’s help. The water flows until the preset level is reached and shuts the valve.

The solar collector is also equipped with an electric water heater. It can probably be used to heat water when there is no sun, and more practical use of it prevents water from freezing in wintertime. So, controller, I included this feature in the controller.

Arduino code is quite messy, but I left it as I sense it works for now. I included a menu system where various parameters can be set:

  • Water level to be filled – fewer water heats faster, but also has less thermal mass;
  • The temperature difference between collector and boiler. Since some heat is lost in pipes, a more significant difference like 4ºC makes more sense.
  • Pump turn level when water is too hot on collector – if the temp is reached above 70ºC, a pump is turned on even if boiler water is the same or hotter. This prevents unintentional boiling.
  • There are winter and summertime selects. In winter, all functions are shut – only the heater element turns on when water is near freezing.
  • Also, you can select the temperature offset value for both sensors. There is a measuring error during sensor placing and contact.
  • Other parameters: LCD back-light, test functions, etc.

All settings are stored in AVR EEPROM memory, so they are preserved even on power losses. The Arduino code is here [solar_controller_1] if you would like to look closer at it. Anyway, if you have any questions, don’t hesitate to ask in comments or forum.

Leave a Reply