Automation and control of heating

I designed this system for controlling and monitoring the heating of my country house, the house is a two family house of roughly 200 m2. Since the house is uninhabited basic heating for a really cold winter month runs at 3000 KWh. The house has a wood boiler, 16A three-phase electric heater, solar panels and accumulator heat tanks.

My automation consists of an embedded server, a control board in the boiler room, contactor for the heater, temperature sensors for indoor, outdoor, in- and outgoing solar panel and accumulator tank.

The source code for the AVR microcontrollers are written in Ansi C, the control programs on the server are written in perl and the web control pages in PHP.

The heater is controlled by setting high and low temperature triggers (based on indoor temperature). Currently I use 6°C and 12°C, which means that the electric heater turns on when the indoor temperature is below 6°C and turns off when it is above 12°C.

Main status page

Control page for scheduler and setting temperature triggers.

Picture of the solar panels

Main server

The base of the system is an 1.2 GHZ, 512 MB ARMv5 based Sheevaplug plug computer running Debian Linux. This is an embedded server running on only 5W.

Two DS18S20 onwire temperature sensors are connected to an Atmel AVR AT90USB162, a 8bit microcontroller with USB interface. The current version uses a AT90USB162 USB Plug development board. The prevoius hardware used a board which I designed myself and had manufactured at Olimex.

A Telldus Tellstick is connected for controlling indoor lamps and the circulation pump for the solar panels. A web-based scheduler controls all the relays.

The temperature measurements and scheduler for the wireless relays are stored in a MySQL database

Boiler room

Installation in the boiler room consists of an controller board, temperature sensors, three-phase contactor and manual override switches.

Control board

The control board in the boiler room is a AVR ATmega328p microcontroller with an ENJ28J60 Ethernet controller, the board is a development board bought from Tuxgraphics. It uses an open source TCP/IP stack with my own code and is connected to temperature sensors in the accumulator heat tank and in- and outgoing solar panels. There is also 5V/230V relay which controls the 3-phase contactor for the electric heater.

The firmware in the microcontroller operates as an embedded web server which the server communicates with.

Solar panel

This shows the in- and outgoing pipes for the solar panel with temperature sensors. The circulation pump is connected to a standard 433Mhz wireless relay controlled by the tellstick.

Source Code

Microcontroller firmware

Server programs

Plot generating scripts

Web pages

Web cgi for updating the database

Programs for recieving events from remote controls

MySQL database schema and source code generating

Crontab scheduler


Valid HTML 4.01 Strict (c) Daniel Vindevåg 2010-2014