LED Sunrise Alarm Clock with Customizable Song Alarm using arduino
This winter my girlfriend had a lot of trouble waking up in the morning and seemed to be suffering from SAD (Seasonal Affective Disorder). I even notice how much harder it is to wake up in the winter since the sun hasn’t come up yet. Symptoms of severe SAD can include irritability, oversleeping but still being tired, not being able to get out of bed, depression, and even some physical problems such as joint pain and lowered resistance to infection. I had heard about sunrise alarms that simulated the sunrise and figured it could be a possible solution to her problem.
I remembered seeing an instructable (http://www.instructables.com/id/Blue-LED-dawn-simulator-for-Soleil-Sun-Alarm/) about modifying a sunrise alarm to provide blue light using LEDs since blue is supposed to be the good light to help out. I liked the idea but the way the microcontroller is used in this instructable intimidated me since I’ve had limited experience with programming one after the code is developed. It also did not solve the other concern of mine: spending $80 on an alarm clock and modifying it, not that my girlfriend isn’t worth it 😀
I first thought about developing a clock from scratch using a microcontroller. We built a binary counting clock in one of my college classes, so I was familiar with the logic. I later gave up on that idea since I wouldn’t be using the same programming language and I would take a lot of time to develope the code. I then had the idea to use a cheap digital alarm clock that could, hopefully, provide a voltage when the alarm went off. I could take this voltage and use it as a switch with a microcontroller. When the alarm went off and the voltage went high, the dimming process would begin. If the snooze button was hit, or the alarm was turned off, the voltage would go low and the dimming process would stop, turning the lights off. I researched this idea and found out that it was possible to use a voltage from a clock and use it with a microcontroller! A guy had completed a similar project that opened his blinds automatically in the morning (http://hackaday.com/2008/11/18/alarm-clock-automated-blinds/).
The ideas started flowing and all I had to do was pick a microcontroller to use. I saw an article on sparkfun.com that went through the process of building a circuit to run an ATMega168. I read carefully and decided that it seemed simple enough and that it was the microcontroller I wanted to use. Upon further research, I found this Arduino thing everyone has been using for their DIY projects. It used the ATMega168, was open source, and had numerous help forums and starting examples; perfect for the beginner. I decided to use it to program my ATMega168 and transplant it into a breakout board that contained the bare essentials for the ATMega168 to run. With the last piece of the puzzle in hand, I could start.
Quick Side Note: Before I start, I just want to say thanks to all of the sources I used. I tried to make sure I linked any reference I used within the instructable. The code is just manipulations of the examples included within the Arduino environment and a bit of my own so thanks to the people who coded those! Also, this is my first microcontroller project. I’m sure I didn’t do everything completely correct, such as adding filter caps to places and other various parts to my circuits. If you see something that can be improved, let me know! I’ll be sure to update or make notes of it. Enjoy!
Step 1: Probing The Clock and Alarm Output Circuit
Probing the Clock
This is the clock I chose. I got it at Walmart and it was cheap so if I wasn’t able to use it, I wouldn’t be too upset. It also has a 9v battery backup in case the power goes out. I later found out that the alarm sequence from the ATMega168 still goes off! So it will still wake you up if there is no power! When it’s running off of battery power the front display turns off and it switches to a different internal clock that is less accurate but still works fine. When power is reconnected the clock may have to be adjusted but the alarm settings will stay.
The clock comes apart fairly easily. There are four screws on the bottom and three screws that keep the button PCB board fastened to the top of the clock case. To take the top off and get better access to the LCD, you need to thread the 9v clip through the hole in the bottom half. The front LCD pops out and upon inspection, there were vary few parts. I found a transformer, a piezoelectric speaker for the alarm, some diodes for the rectifier circuit, some buttons for the inputs, and a clock display that seemed to have all of the clock circuitry underneath it. I found the ground and started probing away. BE CAREFUL WHILE DOING THIS ON YOUR CLOCK, THERE’S AN EXPOSED TRANSFORMER THAT WILL DELIVER A HEFTY SHOCK. I took note of the voltages on each pin when the alarm was off and when the alarm was on. I was hoping for a pin that provided a nice 5v logic voltage when the alarm was on and 0v when the alarm was off. I wasn’t that lucky but the voltage that went to the speaker provided a voltage that varied from 9.5v-12.5v. I figured I could use this. I also found a pin labeled VCC that provided a voltage that varied from 10v-12v. This comes into play later when building the power supply for the microcontroller.
Alarm Output Circuit
I soldered a wire to ground and one to the alarm pin and started working on a circuit to steady out the voltage. I figured I could use a 5v regulator but I only had an adjustable regulator laying around. I did some math and my values provided a voltage slightly below 5v. I tinkered a bit and swapped resisters until it provided the 5v I needed. I used a 470uF capacitor on the input to smooth out the voltage. With the capacitor, the voltage only varied from 10.5v-10v. Below is the schematic of the circuit I used to condition my alarm output and a picture of the parts together on a breadboard.
Step 2: Power Supply Circuit, LED Driver Circuit, and Wiring
Power Supply Circuit
If I were to hook the microcontroller straight up to the Vcc of the clock, I would blow it up (well not really, but render it useless). I needed to condition the voltage and bring it down to 5v. I used a simple regulator circuit that uses just two capacitors and a 5v regulator. I went to the schools lab and located a 5v regulator in the trash pile. I hooked up the circuit and tested it out. It provided a nice and steady 4.99v.
LED Driver Circuit
Since the ATMega168 can only deliver about 16mA of current to each of its digital outputs, a current regulator is needed to power the LEDs. I found this circuit on the Arduino help forums and it seems like a fairly common and simple circuit. To direct the light of the LEDs, I decided to use a reflector from a flashlight. The flashlight I bought had three holes for three LEDs. I decided to grind them bigger and put four in each hole, thus explaining the way the circuit is drawn.
Once I figured out I could successfully use the clock’s Vcc and the the alarm output, I decided to solder up some thin wires and thread them out through a hole in the side. I also had the idea to add a loop in my microcontroller program to play a song instead of the original alarm. I soldered two longer wires to the piezoelectric speaker and threaded those out the side as well. I used some wire clippers to cut out a small notch in the top half of the clock and screwed everything back together.
Step 3: Hooking up the ATMega168 and Building the Prototype
Hooking up the ATMega168
There are only a few pins that need to be connected for the ATMega168 to run. I found this pinout of the ATMega168 at http://www.moderndevice.com/Docs/RBBB_Instructions_05.pdf connections are as follows:
-Pin 1 to Vcc with a 10k resistor.
-Pin 7 and Pin 20 to Vcc
-Pin 8 and Pin 22 to Ground
-Pin 21 to Ground with a .1uF electrolytic capacitor
-Pin 4 (Digital pin 2) is connected to my alarm wire
-Pin 15 to NEGATIVE Lead of piezoelectric speaker
-Pin 16 to the input of the LED driver circuit
-16Mhz Crystal – One leg to Pin 9 the other leg to Pin 10
–11 Connections in all–
Note: I believe I could have hooked up some caps to the legs of the crystal but since my program does not need a highly accurate clock, I left it as is. I used the alarm’s input digital pin at random, any other digital pin should work. The piezoelectric speaker and LEDs must be connected to a Digital PWM Pin or they will not work. Also, I couldn’t find a good model in Eagle for the 28 pin model so I just MS painted it all together 😀 Sorry if it looks confusing. Ask questions if you need to! I made a block diagram as well to help with understanding where everything goes or comes from.
Building the Prototype
Alarm Output Circuit
-LM317T Adjustable Positive Voltage Regulator (You could use a 5v regulator, i just had this one)
-1k Ohm Resistor
-3.8k Ohm Resistor
-470uF Electrolytic Capacitor
-UA7805C 5v Regulator
-100uF Electrolytic Capacitor
-10uF Electrolytic Capacitor
LED Driver Circuit
-150 Ohm (You can experiment with lower or higher resistor values depending on your LEDs)
-1k Ohm Resistor
-28 Pin Socket (Optional but I reprogrammed my ATMega168 numerous times with my Arduino)
-.1uF Electrolytic Capacitor
-16 MHz Crystal
-10k Ohm Resistor
-Prototyping Perf Board
-Prototyping Board Legs and Screws
When I prototyped my circuit I built each section on a breadboard, tested it, and transferred it to the perf board. I started with the alarm output circuit and made sure it worked correctly. I then moved on to the power supply portion, then the LED driver, and finished with the microcontroller circuit. But, seeing as you don’t have to test the circuit and make sure the concepts work, since I’ve already done that, you can just build the whole circuit. Make sure you get the right voltages at the right places. 0v at the output of the alarm output circuit when the alarm is off and 5v when it’s on. 5v at the output of the power supply circuit. Don’t stick the ATMega168 in the socket just yet, it needs to be programmed.
I could have used a smaller perf board or cut mine down but I decided to leave it alone. It’s not extremely large. After the circuit has been prototyped, the construction of the LED bulb can start.
For more detail: LED Sunrise Alarm Clock with Customizable Song Alarm
JLCPCB – Prototype 10 PCBs for $2 (For Any Color)
China’s Largest PCB Prototype Enterprise, 600,000+ Customers & 10,000+ Online Orders Daily
How to Get PCB Cash Coupon from JLCPCB: https://bit.ly/2GMCH9w
This Post / Project can also be found using search terms:
- customizable song alarm clock
- sunrise alarm arduino