When we bought our flat, we found the heating had no thermostat (how on earth do people live without one? I'm not sure...). Since I had an Arduino handy, I thought I'd make one. I got a handful of Maxim 1-wire temperature sensors, a few meters of Cat-5 cable and set to work. Here's what I made:
It's got a real time clock (with battery backup), three 1-wire buses, a connection to a 5V mains relay (which is connected to the combi-boiler, and tells it to turn on and off). The Arduino was connected by USB to a PC, and provided a serial interface from which it was possible to setup timers, demand temperatures or the fall-back temperature. Under the covers, the Ardunio measured the temperature in each room in our flat, and worked out the average and used that to decide if the heating needed to come on or not. Since rooms like the kitchen are prone to temperature changes, so the averaging algorithm had 'weights' on each sensor so that it took slightly less notice of the kitchen than the bedroom.
Unfortunately, making things on breadboards isn't the most robust way to do things. After two years I found that it wasn't reliably reading all of the temperature sensors any more. I had a play about with it, but couldn't make it work reliably again. To resolve this problem, I figured I'd need to make this on a proper circuit and probably revamp some of the wiring to the sensors. All that clambering about in the loft wasn't especially appealing, so I took the difficult decision to retire it.
If you're wondering, I've replaced the homebrew with a Drayton Digistat +3RF (which is a wireless sort of thing). It's only got a single temperature sensor, but I've heard they're 'hackable' if you can listen into the wireless chatter between the temperature sensor and the base unit. So far it's kept us warm, but it's not quite as interesting as the old one.