How to Fit LED Kitchen Lights With Fade Effect




In this instructable, I will describe my project to replace my under the cabinet kitchen lights with LEDs.  I couldn't resist adding a microcontroller as well.

The original lights were flourescent and quite badly fitted.  They made a lot of buzzing noise and the bulbs didn't seem to last very long.  I got fed up with them and decided that replacing them with LEDs was the way to go.  My budget was small so I didn't want to buy expensive designer lights.

To add interest and a bit of practicality, I decided to add a fade-up effect when the lights switch on and have a half-bright mode for those special occasions where dimmer lighting is required.

Step 1: LEDs

After experimenting with some cheap LED strips meant for accent lighting on cars, I did some 'proper' research and settled on the flexible strips of SMD 5050 LEDs.  This is an excellent page describing the 5050's vs the 3528 type: .

You want 5050 LEDs, preferably 3 to each 5cm / 60 per Meter, waterproof (they are covered in a flexible clear plastic and with a adhesive backing.

I got a 5M strip plus power supply from a seller on eBay.  Total cost was UKP 50.00.  

The LED strips can be cut every 5cm (or 3 LEDs) and are very bright.  5M of LEDs consumes approx 3A (36W at 12V).  This is less than the 4 flourescent strips they are replacing.

Step 2: Fader

When the lights were switched on, I wanted a gentle fade up to full brightness.  This would provide a bit of interest and be a contrast to the buzzing, flickering startup of the flourescent lights.

Pulse Width Modulation or PWM is the simplest way to fade LEDs and MOSFETs are the simplest way to rapidly switch large(ish) currents.  By combining a MOSFET with a microcontroller, I had the most flexible way of controlling the fade.  

I used an Arduino to test the concept and my test rig is shown in the photo.  I got the circuit idea from here:  I only used 1 channel (White) instead of 3 (RGB).

Using this rig, I was able to develop the fader software easily.  It is described in the next step.

Step 3: Software

The requirements for the software were:

When power is first applied, fade the LEDs from off to full brightness.
If power is switched OFF before LEDs get to full brightness, then turned back ON, fade the LEDs from off to half brightness.

I used the rig shown to test the software and got the operation as I wanted it.  A few useful things to note:

The brightness of the LEDs under PWM is non-linear.  This means that the fade reaches a brightness level very quickly that then seems to only slowly get to full brightness.  The simple approach to this is to divide the fade into two sections, fade slowly in the first section and then quicker in the last section.  I expect there are more complex algorithms for this and I may try them someday.  In the meantime, this simple approach works well enough for my kitchen.

I used the built-in EEPROM memory to remember the state of the LEDs. Although I am writing to the same location, over and over, the EEPROM cell will outlast the installation by many years.

Included in the software file is the final application as it is working now and one of my first test apps, the video of which is shown below.

Test of fade up and down:

Step 4: Building the Controller

I had enough parts lying around to build the controller so I didn't have to dedicate a whole Arduino to the project.  I've included the schematic and describe the circuit below.  I made the circuit on breadboard and wired everything together on the reverse side.  The MOSFET tend to get warm so I used an old heatsink I removed from a dead piece of kit to help keep it cool.  I mounted the whole thing on a bit of bent metal and hot glued it into this plastic box left over from another project.  The whole thing could be a lot smaller.  I could have used a smaller processor but I already had the atmega168. 

Circuit description

This is a 'minimal Arduino' with a 5V regulated power supply derived from the 12V used to drive the LEDs.  The regulator is bog standard 7805.  All the ATMega168 needs is power, a reset line held high via a resistor and the connections to the ISP programming pins.  I added those because I did not want to socket the processor and have to remove it to re-program it.  I added the white LED for convenience - I always like to have a 'heartbeat' to show me that the processor is running my code correctly.  I fitted the LED to 'pin 13' so it is arduino compatible (I can run 'blink' to test).

There is a pull down resistor on the MOSFET gate so the LEDs won't inadvertently come on during power cycling.

The power supply and controller box are mounted below the cabinets along with the LEDs.

Step 5: Preparing the Strips

I measured the lengths required under the cabinets and cut the strips to size.  I soldered a red wire to the +12V contact and a black one to the GND contact.  On the strips I used, these were marked R G and B.  It turns out that these strips are also used for 3 colour LEDs and these are the individual connections to the colours.  On these white strips, each LED package actually contains 3 separate LEDs so each of the RGB connections needs to be connected to GND.  This was the hardest part - persuading the solder to bridge the contacts.

Step 6: Fitting

The wiring arrangement in my kitchen was very simple.  A cable carrying switched mains connected to the first flourescent light and the circuit was daisy chained to the other fittings.  I connected the mains to the power supply.  This provided the 12V needed to drive the LEDs via the fading circuit.  I then used the remaining cable to supply the rest of the strips.

If you don't have this arrangement, it is much easier to lay wire capable of handling a few amps at 12V than the thick mains cable.

I cleaned the bottom of the cabinets with detergent followed by white spirit and fixed the pre-cut and wired strips.  I used two strips per cabinet and wired the soldered leads to terminal blocks that I fitted to the cabinet with screws. 

After connecting the controller to the power supply and all the LEDs to the controller, the job was complete.

After using the lights for a while, some of the adhesive started to pull away.  The weight of the wire was pulling the strip off.  I fixed that with some staples and they have stayed in place since.

Step 7: Enjoy

I really like my new silent, bright and economical kitchen lights.  here they are working!

You see them go to full brightness, then off.  Then on, off, and on again so they go to half brightness.  

Runner Up in the
Microcontroller Contest



  • Classroom Science Contest

    Classroom Science Contest
  • Backyard Contest

    Backyard Contest
  • Paint Challenge

    Paint Challenge

62 Discussions


3 years ago

Hi am am super new to coding I was wondering if there is there anyway to ad a motion sensor to this code?


4 years ago

Exactly the instructable I was looking for, thank you. Connecting all three channels together vastly simplifies the design, but how nice is the colour? I got a simple set from a hardware store, and what they call "white" we all find has a horrible blue tone to it. I expect the different colour LEDs don't output the same amount of light, and/or our eyes don't register them equally.

1 reply

Reply 4 years ago

Yes, you can get different 'colour temperature' LEDs. You want warm white to more closely match the look of incandescent lamps. My cool white LEDs don't suit everyone but give a crisper more clinical light for close work, cutting, preparation etc.


4 years ago on Step 6

Very attractive set-up & fully functional. Nice Job! I have a question ? Is there any

formula / chart to indicate how many "leds" will light - on varying voltages ? Like

how many using a 5 volt USB cable ?


4 years ago on Introduction

How do you have the cabling going across the sink and cooker? To power all three sets of lights?

1 reply

Reply 4 years ago on Introduction

The previous lighting was mains and there is mains cable running between the two sections. I used that - it now carries the 12V.


8 years ago on Step 5

If the RGB is hooked up to separate leds It seems like you could use that for fading by starting the R then having a delay before starting the G than a delay before the B that will add more of a fading effect.

3 replies

The RGB channels on these LEDs are actually the different colors of Red, Green and Blue. By tying them together, you get each color to illuminate at it's full brightness to produce the White color. By applying the voltages to the different channels, the illuminated color would change dramatically as the modulated voltage came up to full power.


Reply 8 years ago on Introduction

Yes, that is a good idea. I would like to have done that but the existing wiring only allowed one channel. Perhaps with a controller on each set of LEDs, I could achieve this. Too expensive (in time) at the moment though.


Reply 8 years ago on Introduction

I was not sure if you could have programmed the chip to drive 3 mofsets individually. Alternatively you might be able to use a zener diode (do not think that will work with PWM) or something that will allow the first mofset to turn on once the volts hits the knee it allows the second one to turn on and does the same with the third.


7 years ago on Step 2

In your testing environment with the segment of 3 LEDs would 5 volt be sufficient to power all? I realize the strip is rated for 12 volts, but just wondering.

3 replies

Reply 7 years ago on Introduction

you can use 9volts and it will work fine. I have blue strips like the ones used here and they run on a 9volt battery with more than adequate brightness


Reply 4 years ago on Introduction

You are correct here. I have done some testing with white LED strips and have found that they work fine with adequate brightness at 9 volts even though rated for 12 volts.


Reply 7 years ago on Step 2

Hi, thanks for the interest. It may be sufficient but if the LEDs come on at all, they certainly won't be very bright.


5 years ago on Introduction

Very awesome setup - I think I might try and play around with this, maybe use a tiny arduino or digispark so I don't have to build my own. Any chance you (or someone) could expand on step four? I'm not really understanding how the power is hooked up. When the power comes in from the brick, so you have it set up as a 12V rail and then just connect everything to that? Sorry, I'm pretty new at this.


5 years ago on Step 7

Hi, is there any way that the LED strip fade out as well?
I want my leds to rurn on slowly and turn of slowly.



6 years ago on Step 5

RGB Strips are actually for creating any colored light you want. It works on the same principal as the individual pixels in your computer monitor. In each pixel there is a red, green, and blue part of the pixel that are individually controlled to output different strengths (Up to 255 different levels of strength) of each color in order to make practically any (16 million different) color in the visible spectrum. In order to do this on the RGB strips all you'd do is set up a separate PWM signal to each of the channels (R, G, and B are the different channels of the led) and change the duty cycle to change the brightness of each. In order to design a color you can use a color picker on a computer. The colors from the color picker are generally written in hex, with the red channel being the first 2 digits, green, the next 2, and blue the last 2. So #FF0000 would be full red, #00FF00 would be green, and #888888 (half duty cycle on all channels) would be grey (on the computer) or a dimmer white on the leds.

tl;dr: Bleh, that went into a whole long rant. RGB leds are for creating any color you want. Not just white, red, green, or blue.

1 reply

Reply 6 years ago on Step 5

Correction #7F7F7F would be half duty cycle/grey/Half dimmed. Side note: There are bussed ic chips for powering/controlling leds with PWM called led drivers. TI makes a large selection of these.


6 years ago on Introduction

Great Instructible Esterill...I'm trying to do something similar.

Quick question, any idea why this MOSFET wouldn't work in this scenario...

These are ones they stock at the local 'Shack, and it seemed capable, but some of the specs I don't really understand. Any thoughts?

I'm using a 12V strip, just like you...powered by an old 'Xbox HD-DVD' power brick, on a regular Arduino, programmed to Pin 9.