Mini-project: Heater Alarm Clock
My room is often cold in the morning, and that makes it hard for me to motivate myself to get out of bed. I decided to make a heater turn on in the morning before my alarm goes off, so that the room is nice and toasty when I need to get out of bed.
I actually started this project junior year of high school. The first version of the project used a servo motor to press the "on" button of the heater, and used the delay() function in the Arduino to turn on the heater at a programmed time (ex. 6:00 AM) and then wait almost 24 hours. I found this method became less accurate by about a minute each day, so that by the end of a week the heater might not be turning on early enough.
The second iteration of the project included a DS3231 clock module to keep track of the time. That worked pretty well, but there was no way to change the alarm time without uploading new code from the computer. So the third version of the project included a control panel and LCD screen. The control panel has 3 pushbuttons and 3 switches, allowing you to change the current time, change the alarm time, and turn the alarm on or off for that particular day. I stopped using this version when the heater died.
Now I'm on the fourth version of this project. I bought a brand-new space heater at Home Depot, and completely rewired the entire project. I'm using a RF remote-controlled outlet to turn the heater on/off, but if the RF outlet doesn't receive the signal then the Arduino will turn off a relay connected to the outlet. This double method of turning off the heater is far safer than previous versions of the project.
Features and Function
Set the time or alarm time on the heater
By pressing buttons on the control panel you can reprogram the time without uploading new code
Two methods of turning off the heater for safety
This heater should not stay on after the Arduino tells it to turn off.
Keeps the time during power loss
My clock module has a button battery in it so that it can keep the time even if it loses power.
RF transmitter module
Solid State relay (20 A)
Electrical outlet and enclosure
12V power supply
RF remote controlled outlet
DS3231 clock module
Wire. A lot of wires.
Hot glue gun (this is essential)
This project seemed a lot simpler in my head before I drew out where everything needed to be wired. So from left to right we have the normal wall outlet for power, then the Arduino-controlled outlet using a solid state relay (rated for 20A), then a RF outlet with a photoresistor on the LED light, then the Arduino Uno, then the space heater with control panel.
This definitely isn't the easiest way to accomplish the heater control - you could just use the Arduino controlled outlet to turn the heater on/off, and skip the RF outlet step entirely. I considered doing this, but I wanted an indicator of if the heater is on or off (the red light on the RF outlet), You could also use a servo motor to turn the dial that turns the heater, and measure the value of the potentiometer to see what position the dial is at. I decided not to do that because the last two space heaters I've used died, and this setup will work for any electric space heater. So if this heater dies all I have to do is move the setup to a new heater and it should be good to go, no matter if the heater has a button you push to turn it on or a dial.
I used a boost converter to bump the 5V from the Arduino up to 15V or so. The solid state relay needs "5V-24V DC" to trigger it, and the voltage drop over the 6 feet of wire on 5V made it too low of a voltage to reliably turn the solid-state relay on.
The original plan was to normally use the RF outlet to turn the heater on/off, and only disable the outlet using the relay if it sensed that the RF outlet didn't turn off. However, my cheap boost converter makes a high-pitched whine or buzz whenever it is on, so I just told the Arduino to always turn them both off.
A co-worker warned me of a leakage current with cheap solid state relays. He said they might leak 25mA of current which normally isn't much, but at 110V it could still be quite a shock. So if you do any modifications to the heater on the inside, make sure you completely unplug it first.
I highly recommend using hot glue to hold wires in place if there isn't going to be an enclosure for the setup. Most of my wires are glued in place and I can remove them if necessary, but the occasional bump of moving the heater shouldn't pull them out of place.
You can download the source code from this Google Drive folder: