To control my domestic solar hot water system, I built a custom controller was built using the Arduino Duemilanove.  It reads temperature inputs from the tank and roof sensors to drive a relay that turns the circulator pump on and off. Temperature readings are sent via serial port to a laptop which records and graphs the temperature data. The graphs and data are sent wirelessly to a web server, that displays the current temperatures and status using a Google Gadget.
I designed, built, and installed the controller for around $100. Here is a brief description of how to build your own DSC. This is by no means an exhaustive, step-by-step guide, and you will require knowledge of electrical wiring, soldering, programming, Linux, web servers, and more.
Temperature Sensors
A single strand of Cat5 cable forms a bus for a network of Dallas DS1820+ 1-wire temperature sensors (datasheet). The Cat5 cable is run from the controller (using RJ-45 connector), past the heat exchanger (for input, output, and tank sensors) and cold water inputs, then up onto the roof and into the temperature sensor well inside the solar collector. Temperature sensors can be added anywhere along the bus using telephone 3-Wire Butt Splice (blue) connectors. Be sure to crimp them tightly so that all the wires make solid contact. Using TIA/EIA-568-B wiring:
- Blue = DQ (pin 2)
- Blue/White = GND (pin 1)
- Orange = +5V (pin 3)
Solder a 6″ lead to each leg of the DS1820. Use higher-temperature wire for the roof sensor (125 C +). Wrap leg #2 in 1/8″ heat-shrink, then wrap the entire device (all three legs and part of the semiconductor) in 1/4″ heat-shrink.
The temperature sensor can be mounted to a conductive surface (pipe, side of a tank, etc.) using 3M Picture Hanging Strips, Exterior Mounting Tape, or plain old duct tape. They can also be inserted into metal knitting needles and sealed with epoxy to make probes.
Controller Hardware
Using the links below, you can order all the parts you need to build your own DSC, assuming you can read a schematic and solder (some surface mount parts). Don’t forget to add at least 2 (4 is better) Dallas 1-wire temperature sensors (DS-1820) to your parts order.
- schematic for the DSC controller (PDF)
- digikey-partslist (CSV) – includes Digikey Part Numbers required to populate the PCB. Other Digikey parts may be required – read on for a complete list.
- printed circuit board – order from Batch PCB
- Arduino Duemilanove – purchase online from SparkFun or Adafruit
The PCB is an Arduino shield that mates with the Duemilanove. You could also build the controller on a prototype board or using a prototype shield from SparkFun or Adafruit. As you can see from the schematic, the circuit is not that complicated, and most parts can be swapped or omitted, except for R1 (4K7) which is a required value for the 1-Wire bus.
The PCB is my design and can be used for non-commercial purposes, with no warranty. It’s been tested though and is the same board design I am currently using to run my solar hot water system. BatchPCB provides low-cost, small run, well made printed circuit boards. The link above should allow you to place your own order directly without any middlemen (ie. Me). I’ve used BatchPCB for many projects and have always been happy with the results.
The parts list has Digkey part numbers to all the components I used to populate the PCB. If you notice Digikey no longer stocks a part, or you’re wondering about compatibility with other part numbers, please let me know. Digikey has a reasonable shipping and handling fee, considering that you can place an order at noon today and have the parts on your desk by noon tomorrow.
A relay runs a 120V AC Grundfos UP26-99 circulator pump, which will draw at most 2.1A.  Make sure the relay can handle the current needed to run your pump (see datasheet), and if necessary choose another relay with the same footprint. The relay listed is rated for 12A@250VAC.
Wiring and Enclosure
Because this circuit uses 12VDC and 120V AC, ensure you mount the controller in an appropriate enclosure and take all the usual precautions when dealing with electricity.  Required parts:
- metal or plastic (easier to drill) enclosure – 4x4x6 leaves lots of room for wiring
- LED lenses (need part number)
- AC Hour Meter (optional)
- AC Toggle Switch
The controller can be wired directly, or fitted with an AC plug. The connection between the pump and the controller can also be made using AC plugs and sockets.
Firmware
Built with the Arduino environment and the Dallas Temperature Control Library. Download the sketch.
Logging
The system can be monitored using the USB/serial port of the Arduino. I use a bash script running on a linux laptop that is called from a cron job to read the state and temperatures via tty and insert them into a round robin database to create useful graphs. The bash script also outputs an XML file, which is used as the data source for the Solar Hot Water Google Gadget. Get the gadget and view the system status here.
Hello,
I have 6 solar panels on my roof in a closed loop solar system that heats my domestic hot water. This is done using two pumps and a heat exchanger. The reason I was searching and found your website is because my differential control has decided to pack it in and I need a new one.
I came across this site and the Arduino Duemilanove product and it caught my attention.
Is this product something I can use to not only tell my pumps when to turn on (differential controlling)and off, but it can also data log my system for viewing on a PC?
If so, how how much to purchase to accomplish this and how do I get started.
Looking forward to you response.
Cheers!
Karl
Obviously this is not a commercial product, and I only designed it for my own use, but it will control your pump and log data, as I am doing currently, and I’m happy to provide assistance to anyone wanting to build one on their own.
To build my dsc controller, you need an Arduino, my custom DSC shield and sketch (firmware), and a minimum of 2 Dallas 1-Wire temperature sensors, one on the roof and one on the tank. You will also need a proper enclosure and a 12VDC power source. The controller prints the temperatures of all sensors on the bus to the Arduino’s serial port every minute. By connecting the output to a computer, you can monitor, log, graph, even display system temperatures using my Google Gadget.
I have designed and produced a printed circuit board for the shield which you could purchase from BatchPCB (approx. $12, I think). I buy my Arduinos from Adafruit ($29) and all the other components from Digikey (approx. $30?). I’m mostly guessing – if you’re serious, let me know and I’ll give you a better cost estimate, but I’m quite certain I built mine for less than $100.
The only issue I see with using the DSC in your retro-fit is that your roof sensor is probably a thermistor with only 2 wires run from the pump to the roof. Depending on the distance, you can run a 1-Wire temperature sensor in parasitic mode with only 2 wires, but for my installation I found I needed three. Also, the relay used on the controller would have to handle the current drawn by your circulating pump.