LED NeoPixel Motion Sensor Stair Lighting




Intro: LED NeoPixel Motion Sensor Stair Lighting

Hello Everyone!

This is my first Instructable so please bare with me. Any comments and suggestions will be greatly appreciated! I wanted to share my project in the hopes it can simplify your research, planning, design and execution. Like with any project, it's always a good idea to research anything and everything about the subject matter in order to grasp the different technologies available and challenges you might face. There are many solutions to each idea, and some work better or worse depending on your skill and knowledge level. I hope I can share in this instructable something that's helpful to you, and wish you luck on your build!

If you are reading this, you are probably planning on adding some "flair" to your staircase. I was in your shoes and it may be overwhelming with the different options people use to add lights to stairs. My design uses an Arduino micro-controller, motion sensors, which serve as the brains of the build, WS2812B LED strips to light up the stairs and a 5V 60A switching power supply to provide the juice for the system.

There are different types of micro-controllers that can be used, Raspberry Pi or Arduino to name the two most common. I decided to go with Arduino since it already has the Neopixel library, which makes coding significantly easier. Coding level/experience should be considered in this step. Arduino is very easy to pick up since it is just a modified version of C and there is a huge community available to assist you with any coding questions or issues you may run into. There is a lot of support from the Adafruit community as well. Throughout this instructable I will post links to websites that may be helpful during this build. There are many different lighting options that can be used, for example, an LED light strip, LED lights, Neopixels (which is just fancy for WS2812B LEDS) and many others. I decided to go with WS2812B LED strips because I wanted the flexibility of controlling each individual pixel. This makes the design more versatile in the long run. I planned on making various sequences for different holidays and using WS2812B I can make any LED any color I want, which I thought is pretty cool! So the first step is to decide which type of lighting solution to use and exactly what you want your stair lights to do!

The power supply was sized according to a few simple calculations required by the load of the LED pixels. It is always a good idea to slightly oversize your components and use the worst case scenario in your calculations, to ensure that you don't starve or over stress components - which could lead to failures and premature wear of your electronic components. In addition, incorrect component sizing can lead to excessive heat, which can melt wires and cause a fire. Don't be afraid to ask questions before implementation if you are unsure of anything at all. Improper design can result in injury and/or waste of resources. In the end, a DIY solution is ultimately a way to have cool and unique things without having to pay a fortune for it, but it's got to be done right and safely.

*CAUTION: There is always a risk of personal injury and equipment damage when handling and dealing with electronics. You are expected to follow all usage instructions for tools and equipment required for this build. I am not responsible or liable for any injury or damage as a result of following this instructable. Please proceed at your own risk. Never work with live wires. Always remember to disconnect power from the source when connecting/soldering wires. (Remember: just because a power supply is turned off that it can still malfunction and run current through the wires, which can kill you!) Good Luck!

This sums up the overall idea of the project and covers some of the major components used in this build. I will try my best to outline the design and build process step by step and with as much detail possible. However, I'm sure I might miss something - and that's what the comments section is for. If you find this instructable useful, please share, rate and/or comment. I will greatly appreciate the support and will do my best to answer questions you may have, if I have the answer. If not, others on this website, more knowledgeable than me, are welcome to assist as well.

This is a video of ,my build in action!

Step 1: Materials

Below are a few expectations and goals I set going into this project, which also factored into my parts selection:

  1. Low budget
  2. Impressive yet functional final product
  3. Power efficient
  4. Minimal modification to stairs (to protect structural integrity of the staircase)

Below is a list of the major parts used in this project. They are fairly inexpensive and, with a simple google search and some shopping around, you can find them without investing a fortune. If you're a frequent DIYer you may have some of these components laying around.

  1. 1x Arduino Uno (e-bay)
  2. 2x PIR motion sensors (e-bay)
  3. 10M of WS2812B LED Light strip (length depends on how you want to space it out. Every staircase is different!) (e-bay)
  4. 5V 60A Switching power supply (e-bay)
  5. 100ft of 18AWG data wire (green) (e-bay)
  6. 100ft of 18AWG power wire (red, black) (e-bay)
  7. Extension cable or a standard power cord for a computer (old parts)
  8. Soldering iron + solder wire, etc. (previously bought)
  9. Shrink wrap (e-bay)
  10. Mounting tape (big box store)
  11. Clear silicone (big box store)

I may be missing a few materials but it's things like jumper wires for testing, electrical tape, etc.

Hint: E-bay has a great selection of electronic parts and most of the parts for this build were ordered from e-bay. Some argue that e-bay sells junk stuff and china stuff is garbage. But the truth of it is, it depends on what you are looking for. All this stuff is made in China anyway and shipped to the US and marked up like crazy. So if you have the time to wait for shipping (usually 2-3 weeks), I would highly suggest going that route to save you a decent amount of money!

Step 2: Design and Testing

I started designing my build by determining the number of pixels I wanted and how I wanted it to look. I had some standard LED RGB strips laying around so I experimented with those and determined I wanted 35 pixels on each step. Testing showed me the amount of light dispersion I liked. The number of pixels will be different for each setup. The width of my stairs is a little shy of the standard 3'.

Once I determined the number of pixels, I ordered the light strips. This was by far the most expensive part of the entire build. WS2812B is a fairly new technology; if you wish, you can go with the cheaper alternative of one-color LED strip or an RGB strip. However, with a simple RGB strip, the entire strip will be of the same color. Also, if you use a different strip, your code will need to be modified and will not work with my code. In addition to the color options, using a WS2812B LED strip had the benefit of having only 1 output on the arduino.

Originally, I planned to use the regular strips, which would have required me to use 16 outputs on the arduino (1 for each step) since I wanted the lights to light up step by step up or down depending on which motion sensor was tripped. However, on the arduino UNO, there are only 6 PWM outputs and the arduino MEGA has only 14 PWM outputs. So this was one of the major limiting factors of why I chose the WS2812B LED strips instead of the traditional RGB light strip. The other limiting factor was if I wanted to utilize all 3 colors on each of the 16 strips, that would mean 16*3 = 48 channels/outputs would be needed. Keep this in mind while designing your build. There are other controllers available which support this many channels, but in the end, it would cost more than just going with the WS2812B LED strip.

Learning NeoPixel

You should have done all the research about WS2812B LEDs if you intend to use them. But while you wait for your parts to ship, it's a good idea to touch up on using these LED strips. I will use NeoPixel interchangeably with WS2812B LEDs since they are the same thing.

Since I've never used WS2812B LEDs before, I needed to get familiar with the NeoPixel library. You will need to download the library for Adafruit and import it into the Arduino coding software. Below are two useful links to get you started with using NeoPixels. (I will assume you are somewhat familiar with Arduino and know how to import libraries and make sketches. If not, please reference other instructables or youtube videos on this process).

NeoPixel Library

Learn about NeoPixel Library

The above links contain very thorough description of how to use, code and power NeoPixels. They also include a test sequences, which I initially used to test the strand of LED to ensure there are no bad pixels. This is highly recommended so you can exchange the product if there are some bad pixels. Or you can simply cut them out and re-solder to required length.

There are also numerous projects people have done with NeoPixels in the past which are interesting to reference.

Attached program, named "test2," is a test program that just runs through same different loops. I used it to learn the different capabilities of the LED strip and familiarize myself with some of the coding. I believe this program was downloaded from the Adafruit website. I do not take credit for the code.

Once I was familiar with how NeoPixels worked, I found an instructable that was very helpful and similar to a build I was planning. I will link his instructable because I think it is also a good reference to use while you plan your build. The author goes a bit more in-depth, and I would like to thank him for taking the time to post it. I found it very helpful, and was able to adapt his code.

I assume you have some knowledge of arduinos and wiring so to keep this shorter, I skip some of the obvious details. Also, as I mentioned before, each build is unique so it's not as straightforward as just copying this instructable. It also depends on what type of parts you use, so I expect you do some research into what components you are using.

Instructable Link. His name is Simon Jowett.

Small Scale Testing

Okay, let's get to small scale bench testing. Once I received the light strips, I cut them into 35 pixel lengths. Another benefit of WS2812B LED light strips is that they can be cut every pixel and still function properly instead of every 3 LEDs with the traditional LED strips. I used one of the 35 pixel lengths to test some different kinds of effects and scaled down the entire design to utilize only 35 pixels. So in theory, I had 6 stairs with 5 pixels on each step.

So I wanted the individual strips of light on each step to light up in the order tin which he motion detector is tripped. Review the schematic attached in this step to see the set-up of the overall build. I'm using two PIR sensors that detect if the person is walking up or down the stairs. An LDR is a Light-Dependent Resistor, also known as a photoresistor. This resistor changes values based on how much light is exposed over the resistor. Currently, the sensor is not attached, but I plan on adding it soon to save on operation cost. Currently, the setup is working 24/7. (Side-note: I've made some basic calculations and while it works 24/7 it costs around $11 annually). You can learn more about how to add an LDR to the arduino using other instructables or follow this example. In short, you connect the LDR to an analog port on the arduino so you can use "analogRead()" command in your code to see the value of the resistor.

I'll briefly explain why I chose the loop back method when connecting the lights instead of just daisy chaining them. (you might understand better when you see the code further in this report and I will also elaborate on this topic) Daisy chaining the LEDs will result in a ZIG-ZAG LED matrix.

So if I want to run a basic for loop to power up all the LEDs from start to finish, the code will look something like this:

for(uint16_t n = 0; n < strip.numPixels(); n++)


strip.setPixelColor(n , strip.Color(255,255,255));


So this code basically sets the color of each LED starting at LED 0 to the color full brightness white (255,255,255) and it continues doing this while increasing the counter until it reaches the last LED (n < strip.numPixels() ).

Note, to apply this code in the daisy chain situation, the LED strip will first light up from right to left, then at then next step left to right and so on until it reaches the last LED. So if you can picture this in your head, it will not light up the LEDs starting from the same side on each step. The LEDs light up in a Zig-Zag motion. This is why I highly recommend using a little extra wire to wire up the strips according to my diagram. This will simplify coding significantly!

Step 3: The Code

I used and modified the code written by Simon Jowett.

There are some functions in the code that are not used, but I left them in case I would like to use them later. When I have more time, I will be adding to this code to run different light sequences for different holidays. Ultimately, I would like to write an app so I could change the sequence from my phone without having to upload new code every time I want to run a different sequence. This is why it is important to think of the flexibility in the design phase so you can be prepared for whatever you want to do without having to rebuild and change your LED strips.

If you have any questions about the code, feel free to leave a comment below and I will do my best to answer since I didn't do the best job at commenting it.

Step 4: The Build

The build will be unique with every staircase. I had to remove the drywall covering the underside of the stairs to route the wires. I drilled a small hole on either side of the staircase on each stair. This allowed me to route the power and data cables so they are hidden. While wiring, be sure to test each stair and your progress to limit the amount of debugging/troubleshooting if a problem is identified after completion. I used heat shrink on all the strips to give it a clean and professional look. Reference the previous step for the wiring diagram to see how I wired each strip. There are a total of 15 strips and each strip has 35 LEDs.


  1. Plan out your build before you start to drill anything!!! This includes wiring/mounting, etc.
  2. Test each strip as you go.
  3. Practice soldering.
  4. You may pre-solder wires on each strip. (I just cut and soldered wires as I went up the stairs.)
  5. Secure wires so they are not pinched or cut when installing the drywall. (regardless of the stairs, clean wiring will be helpful in debugging later on).

As mentioned, each build will be different so it's up to you how you want to proceed. I included pictures of my build in this step.

Watch the build video below:

Step 5: Final Solution

Once I mounted all the strips, I tested the lights to make sure they all work. I will attach molding in front of the LED strips to completely hide them. I decided to wait on this step to make sure everything is functioning before I attach the molding.

Make sure you fully test the final project before covering everything in case there are problems and you need to troubleshoot the circuit and or connections.

Below is a video of the almost fully completed and function LED lighting. Notice the "breathe" standby mode and then the light turning on when the bottom sensor was tripped.

Step 6: Lessons Learned and Future Improvements

  1. Mounting tape is not the best mounting solution for the LED strips. Over time, some strips began to sag. I will be re-securing the strips with liquid nail or other heavy duty epoxy/glue.
  2. I need to add extra power injection into the circuit. Current power solution does not allow me to use full brightness. Although, I am quite happy with the current setting because at full brightness it's hard on the eyes. However, I do not want to be limited later on if I want to write code using full brightness for the holidays.
  3. Need to find better mounting solution for the PIR sensors because the range is too wide.
  4. I would like to add wifi so I can upload code without having to connect a USB. Eventually, I would like to add website functionality so I could select different codes (Christmas colors, fourth of July, etc.)

These are just the major improvements that come to mind, I may add more later.

I would greatly appreciate if you can leave a comment on how well/poorly this instructable is written and what would have been more helpful to know. Any feedback will be helpful in writing further instructables. Also, if you've done a similar build and would like to share it, I would enjoy reading about it! I will be starting a new instructable on a 32 channel christmas light controller I built from scratch for the holidays.

I hope you enjoyed reading this instructable! Good luck on your LED stair lighting. You'll see, once you do it at home, you will never want to use a staircase without LED lights!

Useful links and resources:

Arduino adafruit NeoPixel Overview (Read the "Best Practices" and "Powering NeoPixels" tab)

Jowett "how to bling up a boring staircase" instructable

PIR Sensors How To



  • Fix It! Contest

    Fix It! Contest
  • Furniture Contest 2018

    Furniture Contest 2018
  • Tiny Home Contest

    Tiny Home Contest

93 Discussions


4 weeks ago

Hi snikogos, thanks a lot for your share, I'am currently doing it with 30 led per meter strips.

for the problems you list, i will try this :

  1. I will secure strips with glue, hope this will be ok
  2. Have bought 5v 60A on a chinese website, I Will add a capacitor to be sure to have 5v anytime
  3. bought some mini boxes to put PIR inside with only little holes
  4. no ideas about wifi but if you have worked on it dont hesitate to share with all of us :)

thanks a lot again for your work ! its a pleasure to "copy" your project.

best regards from france


epic faill

Question 4 weeks ago

Hello Snikogos, or anyone who can answer these questions, I have the same question as Jasper below

I have 14 stairs and they vary in size but I will keep the number of LEDs on each step the same to be uniform, the size depends on how many can fit equally, it will be either 30 or 60 on a step.

If you have installed this on your stairs what do you recommend 30 or 60 per step or, the same question being, 30 or 60 LEDs per meter strips?

I believe I can flash the sketch, with enough searching online, and install the hardware, but I'm apprehensive about editing a sketch. If you elaborate on what areas need to be edited, it would be appreciated and probaply help others.

Thanks in advance.


Question 6 weeks ago on Introduction

hello sir,

i'd like to use your code for my stairway...but not in the steps, but on the side under the handrail...how can i change the code...so that the leds will turn on every led on it's own...i also wanna use APA 102 LEDS..because i can adress them singlely...

can you help me with that??


2 months ago on Step 6

Your power supply? Do you have some specs on why you chose that PSU ?


Question 3 months ago on Step 3

Hi all, the only thing I have not been able to fix is the running up/down stairs when triggered. I have 13(stairs)x46 led's with a total of 598 leds however it does look like it is still triggering in rows of 35 although I tried to changed that in the code. also if I list the full number of 598 (0 to 597) it glitches out. I can run the test script across all 598 leds so it does not seem to be a power issue. After spending about 6 hours trying to tweak it this still does not work for me. so I'm left with a broken first or last step in the chain.


Question 4 months ago on Step 6

Hi. Gotta problem... if LDR value change below treshold while led are on the lights stays on and dont turn off its like it freezes in loop. Works all fine without LDR.?


Question 5 months ago

Thank you for the response. But what i mean is step 1 has 45 leds step 2 has 48 leds tep 3 hasn53 leds step 4 has 56 leds and so on. Can you please help me. I have downloaded jour .test2 file and it works but i have downloaded Stair_LED_Final_2.ino and i get a error when i try to open it. I would be very greatfull if you can help me. Dear regards michael from holland


10 months ago

Great Instructable! I am working on putting this together.In your code, you mention putting in a 1000uF capacitor across power leads. I do not see that in your design drawing. Where exactly is that going and what is the purpose? Thanks!

1 reply

Reply 5 months ago

At the psu. Although depending on the power source you use, it should already implement this and can skip this.


9 months ago

I will start this month buying the items I need to build this.

I thought too on this "problem" :

  1. Need to find better mounting solution for the PIR sensors because the range is too wide.

I have a corridor to access to the stairs, and if someone pass but don't want to climb the stairs I thought the stairs may start lightning.. Perhaps put the sensor insisde a cilinder to try to cut the action field.

Keep in touch

1 reply

Reply 5 months ago

The field of view isn't too wide. Depending on your layout a cylinder will limit the range so it doesnt always trip the sensor.


8 months ago

hi i go to make this also but i have here two stairways for two floors can i put this on one arduino board whit 4 sensor. or do i need two arduino. do you now this.

thank you.

1 reply

Reply 5 months ago

Yes, the uno has a lot of unused pins with this code. Add the variable of the addition sensors at the top and assign a pin number to them. Then copy the alarm codes so you monitor all 4 sensors in the code. It will be a copy and paste. You'll have to modify the code significantly if you want the stairs to start lighting up at the sensor that was tripped. Good luck!


7 months ago

Can you maby post an image when you added the molding? or how are you going to hide the holes?

1 reply

Reply 5 months ago

I actually haven't attached the molding yet. But will take a picture when I do.


Question 5 months ago

I have a curved stairs. The curved steps are much longer. I want to change the number of leds on each step. Younheve any idee how

Dear regards michael from holland

1 more answer

6 months ago

Great Job, but is in english, i need in spanish too, i do that live or die!!