My client asked me to design software & electronics for his public art sculpture commission for a public library in Goodyear, AZ. The client cancelled the project before we could begin construction, but work we did will be used in future projects.
Colored lights on the library wall were to wash under awnings. Colored lights under the awnings were to wash benches below them. A motion sensor would sense people approaching and would change the pattern of lights' color and intensity changes.
One prototype used Philips Hue lights. I used a user-contributed Hue Python API to control Hue's bridge, which plugs into Ethernet and has a web server with a REST API. A made a temporary light fixture with three bulb sockets on a board with a lamp cord.
I wrote a UI that would run on either Android or iOS smartphones, by writing it in HTML, CSS, and Javascript.
A Javascript color-picker sends commands to my tiny web application (which runs under Python's Flask framework) which relays them to the lights. I prototyped the server on my MacBook but plan to deploy it on Raspberry Pi, to which PIR (pulsed infra red) motion sensors can be wired easily.
We rejected the Philips Hue lights because they update too slowly. The system permits groups of lights to receive commands once per second, or individual lights to receive commands 10 times per second.
We like NeoPixel strips (WS2811/12) and we found linear lenses to focus their wide-angle (120 degree) beams into a narrower pattern such as 10 or 30 degrees. There also now exist RGB LED strips with a two-wire interface, permitting faster updates of more LEDs.
I also researched multicolor LED matrix options such as these. These are brighter than NeoPixel matrices. I identified lens solutions that would focus the viewing angle into a narrower, brighter pattern. A "lenticular" lens is an array of parallel linear lenses.