LED NeoPixel Motion Sensor Stair Lighting

126,157

333

233

Introduction: 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.

Suggestions:

  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

Make It Glow! Contest

Participated in the
Make It Glow! Contest

6 People Made This Project!

Recommendations

  • Explore Science Challenge

    Explore Science Challenge
  • Home Decor Challenge

    Home Decor Challenge
  • Make it Real Student Design Challenge #3

    Make it Real Student Design Challenge #3

233 Comments

0
drxlcarfreak
drxlcarfreak

Question 5 weeks ago

This might be a dumb question, but why not use a beam break sensor like a garage door opener instead of a PIR? Then you don't have to worry about figuring out how to properly adjust the motion sensor, you just move the beam break to the spot you want a persons leg to be to trigger the sequence.

0
YamiPrem
YamiPrem

Question 3 months ago

Hey again,

I was wondering, how did you do the connections to the Arduino? I assume you never used wires with pins on end as they just pull out with a little tug.

Did you solder on to board? Wondering how the finished product looks.

EDIT: Also, for the motion sensor at the other end of where the Arduino is, did you have a long wire for data come all the way down from the sensor to the board, or is there a shortcut I'm missing? I assume you did as you bought a 100ft cable for data (green).

Thanks.

0
defaultbad
defaultbad

Answer 6 weeks ago

Hi YamiPrem
yes the motion senson will have a 3 core cable of its own for power and data, power going to the power supply and the data going to the arduino board. I considered soldering the connections to the board but it works fine just plugged in. I have also bought a box similar size to house the arduino, I havent done that yet as i am looking to add either wifi hat or the ethernet sheild

0
defaultbad
defaultbad

Question 6 weeks ago

snikogos I wonder if you could upload any other Sketches you have used on this stair project, I did try changing colours but it didnt work, perhaps if i see your other sketches it will help me understand the coding a little better

0
soorya.best1
soorya.best1

Question 6 weeks ago

Does the code provided above support the circuit with an LDR as shown.

0
defaultbad
defaultbad

Answer 6 weeks ago

i considered using the LDR but instead opted to power the supply from a wifi socket that only turns on dusk till dawn

0
Andrei BogdanB
Andrei BogdanB

3 months ago

Hi! Great work ! Two questions please:
- How can I change the breathe color ?
- What board i need to use for 20 strips with 144 leds each ?

0
defaultbad
defaultbad

Reply 6 weeks ago

thats a hell of a big power supply you will need, on full brightness i calculate it to be 172.8amps

0
snikogos
snikogos

Reply 3 months ago

Breathe color is in the loop change the pixel and color to what you want. I'd suggest using arduuno mega. Look through the comments there's some memory discussions of how many leds can be driven.

0
Andrei BogdanB
Andrei BogdanB

Reply 2 months ago

Thank you for reply ! I will try arduino mega 2560...
About the breathe led color... i cannot locate the exact expression in the loop that refers to breathe led color. I use the latest skatch from github)

0
defaultbad
defaultbad

Question 3 months ago

Hi snikogos, I have just completed this but I am having a problem with leds stay on for 2 minutes 30seconds before wiping
also could you help me light each step alternate colours, Red, White and blue
Great instructable

0
snikogos
snikogos

Answer 3 months ago

try this. add these as functions at the end of the code. In the void loop() replace bottomup() and topdown() with the new function you created bottomup_RWB() and topdown_RWB(). depends on where your start led is, i made a pixel map. you can do this in excel yourself.

void bottomup_RWB() {
Serial.println ("detected bottom"); // Helpful debug message

for(int i=0; i<35; i++){
strip.setPixelColor(i, red);
}
delay(25)
for(int i=35; i<70; i++){
strip.setPixelColor(i, white);
}
delay(25)
for(int i=70; i<105; i++){
strip.setPixelColor(i, blue);
}
delay(25)
.
.
.
}

void topdown_RWB() {
same as bottomup but in reverse, starting with pixel 524

pixel map.JPG
0
defaultbad
defaultbad

Answer 3 months ago

Hi again, the solution to my leds staying on too long was to turn down both potentiometers fully on the pir's.
It;s working great and I'll get a video up soon,
I have the exact same set up as yours 15 steps of 35 pixels but i would be grateful if you or anyone could help to code so the stairs turn red, white and blue each step
thank you

0
vikasvishwakarma00
vikasvishwakarma00

3 months ago

Hi I am having an issue with my led setup. Before cutting the strip i was able to get 480 leds work without any issue, but after cutting it and testing i am having issue once it hits 40 leds. Color of led goes to yellow or sometime does not lightup at all. I have checked the power on the end strip and voltage is constant and stable. Sounds like data transfer issue or something how do i fix this issue do i need to add any resistor or something to boost it ? Sorry I am not too tech guy into electrical bits and this is my first project :)

0
snikogos
snikogos

Reply 3 months ago

Things to check: Was the cut near the 40th LED? What is the new length? do you have a resistor on your data line? looks like an issue with the data in and out between the 39 and 40 pixel. If you cut that pixel out and replace or continue the strip, that should fix it. Could be damaged diode or capacitor. WS2812B has an integrated chip within each LED that controls the RGB of that led then passes the data to the next led. with WS2812B, if a single diode is damaged, the rest of the pixels will fail. There's an upgraded WS2813 strip that resolves this problem by having a dedicated bypass data line (4 pin - +5, GND, D, and B) D is in series with all pixel and B is the backup that bypasses each LED to provide signal to the rest of the strip is one pixel fails.

WS2812B.pngWS2813.jpg
0
vikasvishwakarma00
vikasvishwakarma00

Reply 3 months ago

Just info I have Mega2560 R3 Arduino
LEDs are WS2812B

0
defaultbad
defaultbad

Reply 3 months ago

you could check your data line isnt touching the little capacitor just behind your last working pixel