Introduction: Home Thermostat With Arduino and Big LCD

Replacing a standard thermostat (SIEMENS-RAA30 16GR) with a self made, arduino-based, big LCD screen is a fun project.

DISCLAIMER: Mains power is used in both controlling the furnace and for arduino power so please do not proceed if you are not comfortable working with mains power. I assume no responsibility if you hurt yourself or others while making this project.

The main features of the thermostat are:

  1. Big LCD (20x4 chars, blue background, white chars
  2. Controlled by a single knob (a pushable encoder)
  3. Leds for thermostat closed and furnace burning.
  4. Suspend mode (for night).
  5. Extensible (will add summer mode for boiler and wifi/EasyIOT connectivity)

Code available on github for anyone to download/experiment/fork here:

Step 1: Start With an Arduino

I used a seeeduino lotus which is arduino compatible but with the added benefit of the grove interface in one board.

(link :

The grove interface is a four-wire interface for many components found usually on seeedstudio. I happened to have lots of components lying around using the grove interface so I just went with that.

The project can also be done with normal arduino, nanos etc. It is just a matter of choice. The program does not use any board specific code.

You will also need to create an insulation for the board to be sure that the pins will not touch anything else when we stuff them all in the box

Step 2: Components Used

The main "attraction" of the thermostat is the screen. You can find more specs here:

The temperature sensor is a cheap DHT22. You can find that almost everywhere. Best place is ebay as you can get lots much cheaper.

From the seeedstudio shop i got a buzzer and a relay for mains.

I also got two 220-5v converters. One is used to power the arduino and the other one is used to provide signal from the furnace (of course you need to adjust for your own part of the world. E.g. US people should get a 110-5v).

Need two leds as well. No biggie there, these will be connected directly to the pins. (I know they need a resistor but was too bored to calculate it and just plugged them. The orange one glows yellow but seems to work normally).

Step 3: Rotary Encoder

The rotary encoder is again from seeedstudio. It is a grove-wired one.

The problem with grove is that they have two cables for data. But since the encoder is also a push button, we need three wires.

As you will see in the photos, I cut loose the two legs from the push switch and with a pull-down resistor, I connected them separately. So the grove interface only carries the rotation and the patch is only for the push.

Step 4: Casing

Any plastic container will do. Try to avoid metallic ones. If mains contacts the metallic box, you are toast.

Cut a hole for the LCD and another for the rotary encoder.

Paint to taste.

For securing on the wall, I used L joints where I soldered nuts on them. Screwed them on the wall to fit in the inside of the box and added screws from outside (see pic)

In such cases you do not use a soldering iron. Use a blowtorch and let it get VERY hot. The solder becomes fluid for quite a while so you get to adjust the nut too. (use pliers!!!)

Step 5: Putting It All in the Box

You can secure the components as you like in the box. Remember that you need to insulate exposed pins as they may short-circuit . I wrapped the relay and the 220-5v converters with lots of tape and glued them pins-down.

Use a tongue depressor or hard cardboard piece to place underneath pointy pins as they can easily go through the tape.

Step 6: Connecting...

The original thermostat had a three-wire connection. It is color-coded (and someone used yellow wire for the signal which is 220v.. NIIIIICE).

I followed the pattern so I can have an easy way to connect the wires when the time comes to actually connect the thermostat.

Step 7: Usage:

Pushing the button goes through three different screens.

you go from one screen to the other by pushing the button (and the beeper beeps)

The first one is the main screen which displays the temperature and humidity that DHT reports and the target temperature we want. Moreover it reports whether the furnace is burning or not. At the bottom right there is an OK or Er notification. This is the result of reading the DHT. If some error is reported, the display says Er.

The second screen is to set the desired temperature.
The third screen is to set the thermostat in sleep mode. You set the hours to suspend and it will not start until those hours have passed (we live in a rather warm environment and the temperature does not drop too much at night).

I must probably add a minimum temperature below which the thermostat will start so as not to freeze during the night :0

Pushing again the button from the third screen, brings us back to the main screen.

Brave the Elements Contest

Participated in the
Brave the Elements Contest

Arduino All The Things! Contest

Participated in the
Arduino All The Things! Contest