The problem started when I installed a solar water heater on my house. New water heaters are fitted with mixer valves so that the water coming out is never greater than 50 degrees C. This is fine for the bathroom, which is directly under the tank of the passive heater, but the problem that came to light was the kitchen hot water.
I had relocated the kitchen to a neighbouring room and it was now further away from the tank. With the mixer valve it meant that the hot water was only tepid by the time it reached the kitchen tap and it took four litres of water to get there.
This was unacceptable and I needed a way to have hot water on tap in the kitchen.
The solution had to be solar powered. I had been given a number of old solar hot water panels by friends and the plumber had given me a small, 50 litre, tank so I already had the major components. I needed to make an awning over the north-west facing kitchen window anyway so I made sure I could place the panel on it.
I was reluctant to place the tank above the panel so I decided to make a split system, with the tank on the ground outside under the kitchen tap. This means I had to construct an active control system.
In a passive system the tank is above the panel. As the water heats up in the panel it naturally convects up into the tank and cooler water travels from the bottom of the tank into the bottom of the panel.
If the tank is below the panel the temperatures of the water in the tank and panel need to be monitored and the water actively pumped when the panel is hotter than the tank. This requires temperature sensors, and a pump.
I originally built a controller using an Ocean Controls PIXEL controller based on the PICAXE microcontroller. It worked perfectly for a year before I got the urge to add a Bluetooth display with an Arduino controller. The advantage of making my own controller is that I only need to add the components that I need.

Figure 1 The original PICAXE controller. Note the three thermister inputs bottom-right, the pump and valve outputs on right, and the power input bottom-left.
To this end I constructed the circuit system on Veroboard. I used an Arduino Nano as the controller, a DC-DC converter to shift the 12V of the supply down to 5V for the micro, a Bluetooth module for sending data to the display, and two DC solid state relays to switch the 12V pump and 12V solenoid valve.

Figure 2 The Arduino controller. The bluetooth unit is at the top-left, the Arduino Nano at top, the voltage converter below it, and two solid state relays at bottom-right.
The three-way solenoid valve is important for two reasons. The first is that when the valve is off it prevents the tank from thermo-siphoning all the hot water up into the cool panel at night. The second is that it improves the efficiency of the system by only opening when the hot water from the panel reaches the valve after the pumping starts. By knowing the temperature of the tank and the valve the valve is only ever opened to let hot water into the tank when that water is hotter than the tank.
This can be explained with a couple of figures.

Figure 3 Pump is off and the valve is off. Hot water cannot siphon up into the panel from the tank.

Figure 4 Pump is on and the valve is off. Hot water cycles down to the tank but the valve directs the cold water back up to the panel.

Figure 5 Pump is on and the valve is on. Hot water is directed into the tank and the colder water at the bottom of the tank goes back to the panel.

Figure 6 The thermisters are encapsulated in a stainless steel tube with some thermal oil to facilitate heat transfer. The probes are about 150mm long.

Figure 7 The complete system showing the tank, controller, switched mode power supply, pump, valve, and pipes.

Figure 8 The solar panel on the awning, that shades the kitchen window, and the tank below it.
The temperature display is so that I can see how hot the water is in the tank as well as monitor how the system is working. The display uses an Arduino Nano controller with a Bluetooth module for accepting input. The display is two 8 character seven segment displays from Deal Extreme which gives me a 16 character display. Numbers display fine but text can be a bit fudged.
The Bluetooth module is set up as a slave. Once it is paired with the master on the controller it is just a serial link so data can be sent both ways. I use this to send button presses on the display as commands to the controller. This determines what information the controller will send back.

Figure 9 The temperature display unit enclosed in a clear perspex box.
The display unit is designed to sit on the kitchen window shelf and so has to have a certain amount of water proofing. This was my first attempt at box construction using Perspex and so has a few lessons in it. I drew up the box panels and had them laser cut at work. This is really good for making odd shaped holes for the power and USB and the round holes for the screws in the right place. However, the finish was not perfect in this case. Also, the cut was not square to the edge which made gluing it up problematic. Superglue is not a gap filler.
Next time I will cut the Perspex sheet on the table saw to get square edges. I will also leave just a little more space around the components. It is a tight fit!
The display in the picture shows the state of the state machine in the first digit. The next three numbers are the temperatures, in Celsius, of the Panel, the Tank, and the Valve.
I also programmed into the display to flash the LEDs in a different pattern for each state. At this point it is all programming and the task is lightweight so one can go to town!
So how well does the system work? The display works a treat. The Bluetooth is good for about 5 metres. Since the display is on the kitchen window sill near the hot tap it is only about 2 metres and through a window. It is a low bandwidth requirement so I have left it at the default 9,600 baud.
In summer the water gets stinking hot. I stop the system when the temperature of the tank gets to 70 degrees. The panel easily gets to over 80 degrees. On hot days the whole system can get hot so that it is not cold water going back to the panel. At this point I have a watchdog timer built into the code so that the pump will stop after a couple of minutes and go into a wait state for five minutes.
Obviously, when there is no sun there is no hot water. The tank is too small and, if I were to do it again, I would invest in a larger tank with a larger thermal inertia. But then I would need another panel to keep the larger tank up to temperature.
I only use the hot water in the evening to do the dishes and most days it is perfectly adequate, even through winter. It does not have a booster. If I don’t have hot water I boil a jug for the dishes.
Make sure you get HC-05 bluetooth modules. These can be configured as masters.

The modules from DealExtreme are HC-06 modules that are slave only.
These are attached to a carrier board that does the 3.3V to 5V conversion and break out the serial lines.

For setting up the Bluetooth module the following component will allow you to connect the module to a serial port and directly communicate to it via a serial terminal.
http://www.dealextreme.com/p/rs232-serial-port-express-card-adapter-blue-black-silver-101467

The following are some useful links that can help with setting up the Bluetooth modules:
http://elasticsheep.com/2011/05/serial-bluetooth-module-slave-test/
http://wiki.openpilot.org/display/Doc/Serial+Bluetooth+Telemetry
The thermister can be obtained from SeeedStudio:
http://www.seeedstudio.com/wiki/index.php?title=Temperature_sensor_with_steel_head
http://www.seeedstudio.com/depot/temperature-sensor-with-steel-head-p-78.html?cPath=144_147

The code to interpret the thermister is found in the Arduino playground:
http://arduino.cc/playground/ComponentLib/Thermistor
http://arduino.cc/playground/ComponentLib/Thermistor2
An adjustable DC-DC step down transformer can be obtained from:
http://www.ebay.com/itm/ws/eBayISAPI.dll?ViewItem&item=200580758324#ht_3284wt_975

The processor is an Aduino Nano which can be obtained from:
http://www.dealextreme.com/p/arduino-nano-v3-0-81877

The LED display can also be obtained from DealExtreme:
http://www.dealextreme.com/p/8x-digital-tube-8x-key-8x-double-color-led-module-81873

The pump is a 5W brushless water circulation pump found on eBay:

The three way valve is an SMC VX3324-03-6D1-B which is the 12V DC model.
http://www.smcpneumatics.com/VX3324-03-3DZ-B.html
If you have any comments about this site or my projects you can write to me at psobey at IEEE dot org.