I have now learned enough about Neopixels to be dangerous and go over the head of many except the programmer types that hang out here. I have put some ideas down on paper so I can start working on design. This is what I have decided I want my end result to be:
Manual and Android App control of Neopixel RGBW strip lights. Neopixels are individually addressable, but for my initial purpose I will address them as parallel groups of 8. In other words, a 5 meter strip of RGBW 30 pixels/meter is about 150 modules. I’ll chop that to 144 modules, or 18 groups of 8. This will be for the purpose of what I will call Density. At 100% density all 144 pixels will be lit, or all 8 pixels of each group. At 50% density 72, or 4 pixels of every group will be lit and so on down to the last step before off which would be 18 pixels or 1 pixel per group. I am using groups since I really don’t need control of every pixel for static lighting. I may also program some of the standard effects down the road that addresses each pixel independently. I am not limiting myself to 144 pixels. I chose that as a close number to a stock length of Neopixel strip.
Color control, or what I am calling R G B & W Intensity, will be done with 4 sliders. One for each color of a pixel. The color values derived from setting the sliders will be sent to every pixel setting the brightness of each channel. For example; I could set a very washed out blue, or a very cool white by keeping the Red and Green sliders off and advancing just the Blue and White sliders. The further one advances the slider, the brighter that color becomes.
Once I have basic functionality I would like to implement pre-sets or scenes. It might be fun way down the road to just say “Alexa, set my Moonlight in Rockhill Furnace scene” and the lights come up to a pre-set color and brightness.
What I hope to achieve here is nearly infinitely variable colors and brightness. By controlling the percentage of pixels lighting up I hope to be adding steps to brightness control without affecting color. It may have a side benefit of altering the light source angle for photography. All of this remains to be seen.
When I started working out the Density steps I was surprised how quickly working with binary numbers came back to me. I can represent each of the 8 pixels in a group by one binary digit in an 8 bit byte. Full on would be all 1’s or Hexidecimal FF or 255 in Decimal. Half on of would be 10101010 or AA Hexadecimal or 170 Decimal. Part of the bread boarding task will be decide on how much resolution (how many steps) I want for density. 5 steps is pretty simple and offers some symmetry in which of the 8 pixels are lit. Maximum resolution would be 9 steps including All Off.
I’m still deciding on what hardware to buy. I’ll probably start with a simple 8 pixel strip which is all I need to develop the software. What the controller will be is still up in the air.
From the programming side I was happy to learn that the data stream for controlling Neopixels is really simple old-school logic. No protocols, just timing. The way the chip in each pixel handles the data stream is pretty cool too. It grabs the first chunk of color data, latches that then strips it from the stream and outputs the balance of the stream to the next pixel This allows each pixel to be addressed by it’s position on the strip, not be assigning it an address. Allows a bad pixel to be jumped around with no affect on the balance of the strip other than shifting everything to left by how ever many pixels are jumped out of the strip.
Seeing this from just blue LEDS has me psyched to get going…