Intro: LED NeoPixel Motion Sensor Stair Lighting
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:
- Low budget
- Impressive yet functional final product
- Power efficient
- 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.
- 1x Arduino Uno (e-bay)
- 2x PIR motion sensors (e-bay)
- 10M of WS2812B LED Light strip (length depends on how you want to space it out. Every staircase is different!) (e-bay)
- 5V 60A Switching power supply (e-bay)
- 100ft of 18AWG data wire (green) (e-bay)
- 100ft of 18AWG power wire (red, black) (e-bay)
- Extension cable or a standard power cord for a computer (old parts)
- Soldering iron + solder wire, etc. (previously bought)
- Shrink wrap (e-bay)
- Mounting tape (big box store)
- 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.
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).
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.
- Plan out your build before you start to drill anything!!! This includes wiring/mounting, etc.
- Test each strip as you go.
- Practice soldering.
- You may pre-solder wires on each strip. (I just cut and soldered wires as I went up the stairs.)
- 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
- 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.
- 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.
- Need to find better mounting solution for the PIR sensors because the range is too wide.
- 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)
JasperM23 made it!