The Christmas Lights Display was a project that I started in 2017. I continued with the project until Christmas of 2020. This project evolved over the years. The final rendition of the project contained 32 channels that turned off or on over five thousand lights.
This project was very fun to build. I was unable to find a design on the internet that best matched the requirements of this project; so, I made my own design. It featured the following:
- 32 Channels (3 sub-boxes of 8) - each driven by an Zero-Crossing Solid State Relay
- Use of Shift Registers for each "sub-box" of 8 channels
- Ethernet Link that connected the "sub-boxes" together.
- An Arduino Uno that sent lighting data to each "sub-box" to the shift register.
- A rain dector also plugged into the Aarduino, enabling automatic light shutoff when rains come.
- A Raspberry Pi that fed the light data over a serial connection to the Arduino Uno
- This Raspberry Pi received commands from a website, allowing control via the internet.
- An FM transmitter
Basically, this design consists of several parts, starting from the top.
- A website front end that allowed for remote control.
- The server for this website would send commands using PyZMQ to the raspberry pi outside.
- The Raspberry Pi outside would load timer and playlist data from a file.
- The Raspberry Pi outside would then play song files saved on the SD card at the approporate times.
- The Raspberry Pi would also be listening for commands from the web server.
- When playing a song, the Raspberry Pi sends a "frame" of light data over a custom serial protocol (with checksums).
- The Arduino decodes the light data found in the serial stream.
- The Arduino outputs the light data to the shift register to box 1.
- The Shift Register in box 1 is daisy chained to box 2.
- The Shift Register in box 2 is daisy chained to box 3.
- Each box contains a shift register that is connected to a 8-channel SSR board.
- From there, the SSR board is wired into a AC plug.
- Wires from each relay go directly to a AC receptacle.
- Each string of lights is connected to the AC receptacle.
- Also, if the rain sensor decets rain, the Arduino automatically shifts out 3 bytes of 0's to all shift registers to turn off all lights.