A Sunrise and Sunset Lamp With LEDs




About: I like to explore new things and try out stuff. At the moment I'm in to electronics, BLE and LEDs.

You know it, in the winter time it is hard to get up, because it is dark outside and your body just won’t wake up in the middle of the night. So you can buy an alarm-clock that wakes you up with light. These devices are not as expensive as few years ago, but most of them look really ugly.
On the other hand, most of the time it is also dark when you come home from work. So the great sunset is also gone. Wintertime seems sad, isn't it?

But not for the readers of this instructable. It explains you how to build a combined sunrise and sunset-lamp from a picaxe microcontroller, some LEDs and a few other parts.

The LEDs might cost you 5-10 Euros depending on the quality and the other parts should not make more than 20 Euros. So with less than 30 Euros you can build something really helpful and nice.
And this instructable will not only explain you how to rebuild this, but also show you how to modify it to your individual preferences.

Step 1: Things We Need

You need these things:

o       12V or 24V power-supply
o       1 Picaxe 18M (or any other microcontroller) from http://www.rev-ed.co.uk/picaxe/
o       A socket for a 3.5mm phone-jack, or any other connection from the serial-port to the microcontroller to program the picaxe
o       1 pushbutton and 1 toggle-switch, or 2 pushbuttons
o       1 IC7805 with capacitors, this converts us the 12V or 24V to the 5V we need to operate the microcontroller
o       1 IC ULN2803A, This is a Darlington Transistor Array for the direct use on TTL-Level outputs. Alternatively use 8 single Darlington-Transistors with suitable resistors but it also works with the standard BC547-transistors.
o       1 High-Power FET like the IRF520, or some other Power-Darlington-transistor like the BD649
o       A whole bunch of LEDs, different colors like red, yellow, white, warmwhite, blue and ultraviolet. Read step 4 for further informations.
o       1 10k&-potentiometer, preferable with a long knob
o       1 300&- potentiometer for testing purposes
o       Some resistors, some cables, a board to build the circuit and of course a soldering-iron
o       A measuring tool for currents would also be handy, but is not absolutely necessary
Depending on the power-source you use you might need additional connectors and a housing for the LEDs. I used an acrylic board which I fixed to the housing of the Power-supply.

In older computer-mouses with D-Sub-connectors you might find a good substitute for the phone-jack cable used to program the picaxe.

Picaxes and a lot of other useful stuff might be bought here:

For the rest just check out your local dealer.

Step 2: The Circuit-layout

The ULN2803A is a darlington-array, consisting of 8 individual darlington-drivers with suitable resistors on the input-side so that you could directly connect the output from the microcontroller to the input of the UNL2803A. If the input gets a high level (5V) from the microcontroller, then the output will be connected to GND. This means that a high on the input will light up the respective LED-strip. Each channel might be used with a current up to 500mA.

Standard ultrabright 5mm LEDs normally use 25-30mA per strip and even eight of them will stress the FET only with 200-250mA, so your far away from any critical points. You might even think about using high power 5W LEDs for the wakeup light. They usually use 350mA at 12V and might also be driven by this array.

The pushbutton "S1" is the reset-button for the microcontroller.

The switch "S2" is the selector of sunset or dawn. You could also replace it by a pushbutton and activate sunset by an interrupt in the software.

The potentiometer R11 acts as a selector for speed. We use the picaxes ADC ability to read out the position of the potentiometer and use this value as the timescale.

The picture shows the first board that I built with 7 individual transistors (BC547C) and the resistors to drive them. I didn't have the ULN2803 at the time I build the circuit, and now I'm missing some other parts. So I decided to show you the original layout, but also provide the layout with the new driver-array.

Step 3: What Is Sunset Looking Like?

When you observe a real sunset you might recognize that the colour of the light is changing over time. From a bright white when sun is still over the horizon it changes to a bright yellow then to a medium orange then to a dark red and after that a low blueish white glow, then there is darkness.

The sunset will be the most difficult part of the device because you watch it with full consciousness and little mistakes are quite annoying. Sunrise is principally the same program reversed but as you are still asleep when the sunrise starts, we don't have to worry too much about colours. And starting your sunset when laying down, you might not want to start out with bright sunshine but in the morning it is important to get the most out of the LEDs. So it is convenient to have different sequences for sunrise and sunset, but you are free to test anything you like of course!

But these differences in the programs, might lead us to a different selection of LEDs for both programms.

Step 4: Selecting the LEDs and Calculating the Resistors

Selecting the LEDs is the creative part of this instructable. So the following text is just a suggestions from me to you. Feel free to vary and change them, I will tell you how to do this.

It is difficult to smoothly switch a strip on or off with LEDs of a complete new colour. So my recommendation is that each strip contains LEDs of all colours but in changing quantities.
If we imagine the sunset reversed the first strip would contain a lot of red LEDs and maybe one white, a blue and a UV one. So let's say 5 red ones, 2 yellow, 1 warm white and 1 UV.  If you like you might replace one of the red or yellow LEDs by an orange one (Strip 2 in the schematic)
The next brighter strip would then have a few red ones substituted by yellow ones. Let's say 2 red, 5 yellow and 2 warm white (strip 3 in schematic)
In the next strips a few more red ones will be substituted by yellow ones or even white ones. Let's say 1 red, 1 yellow, 4 warm white and 1 blue. (strip 4 in schematic)
The next strip might consist of 3 cold white, 2 warm white and 1 blue LED. (strip 5)

This would be four strips for sunset so far. For Sunrise we could use the leftover three strips with mainly cold white and blue LEDs. If you connect the 7th and the 8th input together you could also use 4 strips for sunrise, or give sunset a fifth strip, just as you like.

You might have noticed that the strips containing red LEDs have more LEDs per strip than the pure white ones. This is caused by the difference in minimum voltage for red and white LEDs.

As the LEDs are really bright and even dimming them down to 1% is quite a lot, I calculated strip 1 with 3 reds, 2 yellow and a warmwhite LED to have only 5mA of current. This makes this strip not as bright as the other ones and therefore suitable for the last hint of sunset. But I should have given this strip an UV-LED too, for the last glance.

How to calculate the LEDs and the resistors:

The LEDs need a certain voltage to operate and even the darlington-array uses 0.7V per channel for its own purpose, so to calculate the resistor is very simple. The FET practically doesn't cause any voltage loss for our purposes. Let’s say we operate at 24V from the power supply. From this voltage we subtract all the nominal voltages for the LEDs and 0.7V for the array. What is left must be used by the resistor at the given current.

Lets look at an example:
first strip: 5 red, 2 yellow, 1 warm white and 1 uv LED.
One red LED takes 2.1V, so five of them take 10.5V.
One yellow LED also takes 2.1V, so two of them take 4.2V.
The white LED takes 3.6V, the UV LED takes 3.3V and the array 0.7V.
This makes 24V -10.5V - 4.2V - 3.6V - 3.3V - 0.7V = 1.7V which must be used by some resistor.
You surely know Ohm's law: R = U/I. So a resistor that uses 1.7V at 25mA has a value of 1.7V/0.025A = 68 Ohm which is available at electronic stores.
To calculate the power used by the resistor just calculate P = U*I, this means P = 1.7V * 0.025A = 0.0425 W. So a small 0.25W resistor is enough for this purpose. If you use higher currents or want to burn more volt in the resistor you might have to use a bigger one!

That’s the reason why you could only operate 6 high voltage consuming white LEDs on 24V.
But not all LEDs are really the same, there might be big differences in the voltage loss from LED to LED. So we use the second potentiometer (300 ?) and a current-meter to adjust the current of each strip to the desired level (25mA) in the final circuit. Then we measure the value of the resistor and this should give us something around the calculated value.
If the result is something in between two types then choose the next higher value if you want the strip to be a little darker or the next lower value for the strip to be a bit brighter.

I installed the LEDs in an acrylic glass board which I fixed to the power-source-housing. Acrylic glass can easily be drilled and bend if heated to around 100°C in the oven. As you can see on the pictures I also added the sunrise – sunset selection switch to this display. The potentiometer and the reset-button are on the circuit-board.

Step 5: Adjusting the Software

The picaxes are very easy programmable by some basic dialect from the vendor. The Editor and the software are free of charge. Of course one might also program this in assembler for blank PICs or for the Atmel AVRs, but this was one of my first projects after I tested the picaxes. In the meantime I work on a better version with several PWMs on an AVR.

The picaxes are very good for beginners because the requirements to the hardware are very simple and the basic-language is easy to learn. With less than 30€ you can start to explore the wonderful world of microcontrollers. The disadvantage of this cheap chip (18M) is the limited RAM.
If you chose other features or connect the picaxe different you might have to adjust the program. But surely you will have to make adjustments to the transitions between the individuals strips.

As you can see in the listing the variable w6 (a word-variable) acts as a counter – variable and as the parameter for the PWM. With the chosen PWM-frequency of 4kHz the values for 1% to 99% duty-time are 10 to 990 respectively. With the calculations in the loop we get a nearly exponential decrease or increase of LED-brightness. This is the optimal when you control LEDs with PWM. When switching on or off one strip, this is compensated by the software by changing the value of the PWM.

For example let's look at the sunset. Initially the outputs 0,  4 and 5 are switched high, that means the respective strips are switched on via the ULN2803A. Then the loop reduced brightness until the variable in w6 is smaller than 700. At this point pin0 is switched low and pin2 is switched high. The new value of w6 is set to 900.
This means that the lamp with strips 0, 4 and 5 at PWM-level 700 is nearly as bright as the lamp with strips 2, 4 and 5 at PWM-level 800. To find out these values you have to test around and try some different values. Try to stay somewhere in the middle, because when you dim down the lamp in the first loop too much, you can not make much in the second loop. This will reduce the colour-change-effect.

To adjust the PWM-settings I used a subroutine that also uses the value of w5 to pause the program. At this point the speed comes in the game. Only during start-up the potentiometer is checked and the value is stored in w5. The number of steps in each loop of the program are fixed, but by changing the value of w5 from 750 to around 5100, the pause in each step changes from 0.75s to 5s.

The number of steps in each loop might also be adjusted by changing the fraction for the exponential de- or increase. But make sure not to use to small fractions, because the variable w6 is always a whole number! If you would use 99/100 as a fraction and apply that to a value of 10, that would give you 9.99 in decimals but again 10 in integers. Also keep in mind that w6 might not exceed 65325!

To speed up testing, try to comment out the line with w5 = 5*w5, this will speed up the program by a factor of 5! :-)

Step 6: Installation in the Bedroom

I placed my sunset-lamp on a small cupboard on one side of the room so that the light shines to the ceiling. By a timer clock I power up the lamp 20 minutes before the alarm rings. The lamp then automatically starts the sunrise program and slowly wakes me up.
In the evening, I activate the sleep-timer-function of the timer clock and power up the lamp with the sunset switch on. After the program has started I immediately switch back to sunrise, for the next morning. Then I enjoy my personal sunset and soon fall asleep.

Step 7: Modifications

When replacing the toggle-switch by a pushbutton you must switch to the sunset-part by activating some interrupt in the program.

To change the supply-voltage you must recalculate the individual LED strips and the resistors, because with 12V you could only drive 3 white LEDs and you need a different resistor too. A workaround would be to use constant current sources, but these might cost you some bucks and use another few tens of a volt for regulation. 

With 24V you could drive a lot of LEDs in one strip, to control the same amount of LEDs with 12V supply, the LEDs must be separated in two strips which are used parallel. Each of these two strips needs its own resistor and the accumulated current through this channel has more than doubled. So you see, that it makes no sense to drive all LEDs by 5V, which would be convenient, but the current would rise to an unhealthy level and the amount of resistors needed would also skyrocket.

To use high power LEDs with the ULN2803 driver you could combine two channels for a better thermal management. Just connect two inputs together on one microcontroller-pin and two outputs on one high power LED-strip. And keep in mind, that some high power LED spots come with their own constant-current circuit and might not be dimmed by PWM in the power-line! 

In this setup all parts are far away from any limits. If you push the things to the edge you might get thermal problems with the FET or the darlington array.
And of course never use 230V AC or 110V AC to drive this circuit!!!

My next step beyond this instructable is to wire up an microcontroller with three hardware PWMs to control a high power RGB-Spot.

So have fun and enjoy the privilege of your individual sunset and sunrise.



    • Classroom Science Contest

      Classroom Science Contest
    • Growing Beyond Earth Maker Contest

      Growing Beyond Earth Maker Contest
    • Backyard Contest

      Backyard Contest

    28 Discussions


    7 years ago on Introduction

    Wanted to make this for 2 years... not really sure why I never got around to it! Going to have a crack at it soon, though. I've ordered some LEDs, new Picaxe, etc. I have both 5v and 3v3 FDTI cables - any suggestions on which would work best to program Picaxe?

    Has anyone make a PCB for this? I'm being lazy here, of course!

    2 replies

    Reply 7 years ago on Introduction

    I guess you have to try which cable works best.
    And congratulations that you finally started with Picaxe. They are really easy to learn and good for a start.

    Good Luck!


    Reply 5 years ago on Introduction

    So, after another 2 years - yes, I am embarrassed! - I have built and circuit and programmed the Picaxe. I needed to make a few changes to the Picaxe as the one I bought is a 18M2.

    Alas. I'm not winning! If, for example, I turn on pins B.0 and B.2 and do NOT use the PWM, so set B.3 high to switch the FET, everything works well. If, with exactly the same set up and code, but use the PWM and don't set B.3 high, the LEDs connected to B.0 and B.2 turn on at full brightness, and all the other LEDs start off, but increase in brightness with each step of the PWM routine.

    I will point out here that I haven't built the LED grid yet, I am testing with one LED connected to each output of the ULN2803.

    I have tried numerous things to sort this out, changing the FET for an NPN transistor; swapping the ULN2803 for a different one; adding the pull down resistor to the PWM pin as recommended by the Picaxe (this seemed to stop the LEDs flicking on at power up); adding a pull-up resistor to the GND pin of the ULN2803 (incase the FET was leaving the pin floating); removing the capacitors, thinking there might have been a residual capacitance effect. (I am using a 20V laptop PSU, so I'm pretty confident the supply is clean).

    I have gone through my circuit and your schematic very carefully, and can't see any errors, and I have gone through my stripboard to make sure there are no bridged tracks, dry joints, etc.

    I'm a touch stuck here! Any suggestions?




    7 years ago on Introduction

    I love this concept! Cool idea, I have added it to the hamster cage (list in my head of future project ideas with no logical order), filed under awesome ideas....inspiring.


    8 years ago on Introduction

    Hi everyone,
    I need help..I wanted to know that if I wanted to use this for the entire roof of my roof (10X10sq ft) how many leds are required and where do place the various colors.
    And is there a way that I could connect it to a electric watch and it could simulate it for me when ever I wanted to on the press of a button ??



    8 years ago on Introduction

    Im making a wake up light for my final engineering project and and unable to find useful information :(
    Can anyone help me with the circuit for the wake up light, please.


    9 years ago on Step 2

    Wow, step two went by pretty fast. 


    9 years ago on Introduction

     I love this idea. I have made a sunrise simulator hooked up to two UV lamps for my three exotic birds. You'd be surprized how much happier they are to welcome the day when its being properly simulated.

    Your project here is perfect for people as it naturally adusts your vision to match whats going on outside. if you could integrate a stronger UV source, it would help your body adjust even better. This idea is great for both people and animals that are sensitive to sunrise/sunset.

    Im going to try this as soon as i can collect parts. I also think it would look excellent if it were modfied to point the leds upward and enclose in a simple, thin, 3d rectangular frame with panels made of a heavy rice paper, or a thin opaque white plastic.

    Awesome stuff.


    9 years ago on Introduction

    I have some problems finding the components in the U.S. , can anybody help me?


    9 years ago on Introduction

     I was wondering if this was projected on white cloth how the other side would fare. if you could find out and let me know it would be a big help. i have a dream of putting a large landscape painting in front of this as one of my walls. Thank you for inspiring this.

    1 reply

    Reply 9 years ago on Introduction

    It just points to a white wall.
    But a big painting is also a good idea.
    Lately I saw something like this, that was a silhouette  of a city in front of a RGB-LED. This also gave a nice effect.


    Reply 9 years ago on Introduction

    No Problem! 
    The *.sch file contains the circuit diagram and can be opened with the "Eagle Layout Editor" from Cadsoft.  They offer a free version of their product which might be downloaded from their website
    But you could also use the jpgs of the circuit diagramm, they are prints of the eagle software.  


    Reply 9 years ago on Introduction

    Daylight savings becomes more of a pain when you're working from first light until dark, and have to travel over an hour each way, to and from work, makes for a restless week for the first week after the Fall time change...


    Reply 9 years ago on Introduction

    No kidding.  I only see sunlight on the weekends these days!


    Reply 9 years ago on Introduction

    You would be a happier person if you concentrated on changing what you can change and just get over what you can't change.  (Like get up and go to work an hour earlier so you can get off an hour earlier.)

    Unless, that is, you enjoy being a sourpuss.  If that's the case, then carry on. 


    9 years ago on Introduction

    I was wondering if there was any particular reason you chose to use a lot of little LEDs instead of one or two large RGB LEDs.