The physical side of the core is now well underway. There's a clear path to fabricate all of the parts, which just leaves the electronics left. This should be easy enough...right? Wrong.
My first idea was to control lights and sounds via a single Arduino Mega and AdaFruit NeoPixel RGB LED strips. I was able to get the lights working in a single afternoon. The next day I was able to get the sound working independently as well. This was going great. All I had to do was merge the two and I'd be done, or so I thought. After merging the two I met my greatest foe in this endeavor: synchronization.
I came to determine that due to the nature of Arduino's looping code I wasn't able to run two simulataneous loops for the light and the sound. One had to be nested within the other but that resulted in unacceptable pauses and out of sync moments. I demanded perfection and thus the quest was on.
I'll gloss over the numerous iterations I attempted to get this to work which included every permutation of an Arduino and a Raspberry Pi running lights and sounds together or separately using several different protocols such as I2C, ICSP, UART, Serial, USB, and others. I had just about given up when I finally came upon the solution.
My final system has the Raspberry Pi running a Python script that loops around playing one pulse of sound each cycle. After it plays the pulse of sound it sends a single ASCII character via USB serial to the Arduino. The Arduino takes the character and interprets it as the speed or color change, then performs one light cycle. A cycle is defined as the time it takes for the illuminated ring to pass through 6 rings, since the illuminated rings are spaced 6 rings apart. After this cycle has completed, the Raspberry Pi starts again by sending another audio pulse and updating the Arduino about the speed and color.
I'm sure there may have been a more elegant way to accomplish this seemingly simple task if I had a lower level grasp of programming but this seems to suit my needs with the knowledge I had at the time. The nice thing is that it's all software so if I come across a better method I can update it rather easily.
For the physical side of the electronics, I attached strips of 30 LEDs wrapped around a metal cylinder with one strip being for each ring level. This metal cylinder would slot down the center of the ring stack my pops was making and keep the LEDs at a good distance from the white plastic so as to illuminate them without shining through too brightly.
Based on the suggestions on quantity of LEDs per control pin and per power pack on the Adafruit site, I ended up with the 4 power bricks for the lights and 4 control pins. The top ring stack gets one power brick and one control pin, the central ring and door combined get one power brick and one control pin, and the bottom stack gets two power bricks and two control pins. This is due to the bottom stack having more rings than the top stack.
Once I had the lights and sounds working it was a simple matter to add a couple of 10-position rotary control knobs for the speed and mode to manually control the show.