It’s not a complicated concept. It’s not even terribly difficult to implement. It’s just that I really don’t understand why no one produces a product like this…

I have a heated shop and a heated garage. I also live in a fairly cold climate. I don’t want to keep my garage or shop up to working temperature if I’m not actively working, but I do want to keep them at some reasonable temperature (above freezing) in the winter. I’d like to keep these areas at something like 50-55°F when unoccupied, and then heating them to 68-70°F when I’m working. I have been doing this by using standard mechanical thermostats and the process of sliding the setpoint back and forth is somewhat imprecise.

If only someone made a “dual setpoint thermostat”… I tried to find one on several occasions, but had no luck. Sure, they make smart thermostats that know when you’re physically in the space, thermostats that connect to your WiFi, thermostats that learn your habits, but nothing as simple as a thermostat with two set points. It looked like if “someone” was going to make a dual setpoint thermostat, that “someone” was going to have to be me.


It didn’t need to be complicated. I wanted to hit one button to implement my “working temp” and have another button to invoke my “away” temp. I also needed to be able to adjust and fine tune each of the two setpoints independently. The setpoints and current operating mode (work/away) should also survive a power outage and automatically be reinstated when power returns. Each of my two thermostats would only need to control a single wall-mounted gas shop heater so a single relay contact would be perfect. This had all the attributes of a simple Arduino-based project. So off we go!

The dual setpoint thermostat uses off the shelf components whenever possible and the enclosure will be 3D printed.

We are going to use the Sparkfun RedBoard as the Arduino compatible microcontroller for this project. The specific choice of microcontroller board is not critical. However, be aware that the holes in the left side of the 3D printed enclosure are specifically designed to work with the RedBoard. If you choose to use some other Uno compatible board, you will likely have to redesign the left side panel. The rest of the RedBoard footprint matches the Uno dimensions so it’s likely that the rest of the enclosure will be just fine with any Uno clone.

Also, I chose the relay for this project because it was available from the supplier I was using for many of the other parts. While this project could be built with different relay breakout boards, be aware that if you choose to use a different relay, you will likely have to modify the enclosure design to fit a different footprint.



How It Works

The thermostat was specifically designed so it would not need to be disassembled to mount, program, or attach the heating circuit wires. It’s also quite possible to program the thermostat (or any Arduino compatible microcontroller) without having to bring your computer or laptop next to the device. IOGEAR makes a very nice Wireless 4-Port USB Sharing Station (GUWIP204) which can be used to remotely program the device anywhere you have Wifi coverage. Once the device driver is installed, your computer will think that the remote USB ports on the GUWIP204 are actually local to your computer. Take the Wifi USB Hub to the location where your thermostat is, plug the USB cable from the thermostat into the Wifi USB Hub, power the hub, and program the device remotely.

The thermostat display will tell you which temperature setting is currently active in the upper left (T1 or T2). Right below that information it will display the actual setpoint value. In the lower-right of the display you will see the actual temperature and the relative humidity (since the sensor provides it as well). In the event that heating is actually required, you will also see an asterisk in the lower middle of the display indicating that the relay is closed. The actual temperature and humidity is updated every 2½ seconds. The display will automatically illuminate for 60 seconds after any button is pressed.