Collector tilt optimizer

The textbook "tilt = latitude" rule maximises annual yield — which is the wrong objective when the collector array is over-sized for the heat demand.

This tool models hour-by-hour clear-sky irradiance through the year, caps daily collection at what the tank can absorb, and picks the tilt that minimises unmet demand. For an over-sized system, the answer comes out steeper than the textbook value — pushing more of the yield into shoulder months where it isn't wasted as bypass-dump.

Site

Defaults are the centre of Prague. Enter your own coordinates — positive latitude = north of the equator, positive longitude = east of Greenwich.

System

Collector efficiency: fraction of incident sunlight delivered as useful heat, averaged across a typical operating day. Conservative starting point: 0.5 for drainback flat-plate systems, higher for evacuated-tube.
Tank capacity: how much excess heat the thermal store can absorb in a day before it's full and the collector loop bypasses. Roughly 1.16 × tank-litres × usable-ΔT-°C / 1000 — e.g. 200 L at 60 °C usable ΔT ≈ 14 kWh.
System / fluid: our drainback systems pump collector water straight into the thermal store, so the only heat exchanger in the loop is the collector itself. The "water" is pure water dosed with the trace corrosion inhibitors described on the corrosion-inhibition page (sodium silicate + sodium sulfite, well under 0.1 % by mass — heat capacity is essentially that of pure water). Closed systems use a propylene-glycol antifreeze loop with an extra heat exchanger between the loop and the store — that HX typically costs 3-6 % at solar-thermal operating ΔTs, and the 40 % glycol mix itself carries roughly 6 % less heat per litre than pure water at solar-thermal temperatures (ρ·cp ≈ 3.9 vs 4.1 MJ/m³/K) plus another 2-4 % loss to higher viscosity reducing convective heat transfer. Combined, the closed glycol path consistently delivers 10-15 % less to the store than a like-for-like drainback array, so we apply a 12 % performance penalty when glycol is selected. Closed systems also have to dump heat through a bypass valve when the tank is full; drainback systems simply stop circulating, so the "Potential bypass" series below is a closed-system-only loss.

Demand profile

30%

Fraction of the annual demand that comes from space heating (winter-weighted) vs domestic hot water (constant year-round). Higher = the optimum tilt shifts steeper because more demand falls on short winter days.

Panel orientation

50°
180°

Collected kWh/yr
Delivered kWh/yr
Unmet kWh/yr
Solar fraction
Monthly energy (kWh) — delivered / potential bypass* / unmet

* Closed-system loss only. In a pressurised closed loop, heat above the tank's capacity is dumped via a bypass valve once the store is full. Drainback systems (such as ours) simply stop circulating — there is no bypass and no thermal dump. For a drainback install, treat "potential bypass" as a tank-sizing warning: it is roughly the amount of yield you would have to forfeit each year if you ran the same array as a closed system.

Daylight hours through the year — sunrise to sunset for the entered latitude
Tilt × azimuth — annual delivered (kWh) — green = best, red = worst. The white-bordered cell is the current slider position; the black-bordered cell is the swept optimum. Hover-equivalent: change the sliders to read its numbers in the summary above.

How it works

The sun-position math is the same simplified NOAA / Meeus solar-position algorithm our firmware uses to expose sunrise_unix, sunset_unix, and current altitude/azimuth on the live /api/health endpoint. The plane-of-array correction is the standard cosine-of-incidence on a tilted, azimuth-rotated panel; sun on the back face is clipped to zero.

A clear-sky DNI model (1366 W/m² · 0.7AM) gives a per-hour direct-beam estimate. 8760 samples per year, summed for the candidate (tilt, azimuth, area, efficiency), give an upper-bound annual yield. Daily collection above (demand + tank-store) is treated as dumped; daily collection below demand is the unmet shortfall.

The "optimal" tilt is the 0–90° sweep value that minimises annual unmet demand, not maximum yield — this is the key trick that makes the "tilt steeper for over-sized arrays" insight fall out naturally rather than being a hand-tuned heuristic. The tool also tells you how far the optimum sits from the classical tilt = lat rule, and why.

Assumptions to be aware of